抠图制作技巧图解(裁剪满大街都是)

引言

本文最初是源于一个需求,是这样描述的:

如何从动画gif中每隔一帧移除一次?

这问题本身,从职业角度一看,就知道必须用编程,或者工具实现

提问的小哥又详细进行了描述:

我有很多视频文件,想转换为gif动图。ffmpeg/avconv 在直接操作方面做得很差,所以我曲线救国,把视频转换为 gif 格式。方法是先将每一帧输出为 png ,然后使用 imagemagick 将其转换回 gif 格式。

问题是,就文件而言,这会生成较大体积的 gif 动图。

为了解决这个问题,我想从 gif 中每隔一秒或第 N 帧“删除”一次,或者在转换为 gif 时跳过图像文件,或者从 gif 中删除帧

如何在 Linux 上使用 imagemagick 或其他命令行工具完成此操作?

抠图制作技巧图解(裁剪满大街都是)(1)

1 - 最简单直接 gifsicle

放在第一位,肯定是最佳解决方案啦。只一行就足够了。

gifsicle -U input.gif `seq -f "#%g" 0 2 99` -O2 -o output.gif

本身这个构造就相当牛B,因为 gifsicle 默认是只能手动指定删除哪些帧。

而结合 Bash 的妙用,可以灵活地控制生成的帧数,并保存到新文件。

这个命令应该可以在大多数Unix shell中工作,将 input.gif 和 output.gif 替换为输入和输出文件名,将 99 替换为动画中的帧数。

参数说明:

  • -U选项:将输入动画中的帧与前面的帧合并,这样每个帧都是独立的,并且不依赖于任何其他帧。
  • -O2选项:会重新优化输出动画以最小化文件大小。
  • seq:使用格式化输出序列字符串

2 - Bash 脚本

还是要用到 gifsicle 工具,我们创建一个下面这样的脚本处理文件。

抠图制作技巧图解(裁剪满大街都是)(2)

做一个简单测试,首先生成轮询播放0-9数字,如下动图:

抠图制作技巧图解(裁剪满大街都是)(3)

运行上述脚本之后的结果:

抠图制作技巧图解(裁剪满大街都是)(4)

3 - Photoshop

UI 设计必备工具,也具备了很多功能,可是没有上面两条用起来那么随意。不在命令行处理,受桌面应用的约束就越大。

通过菜单 File -> Import -> Video Frames to Layers 打开下面的界面:

抠图制作技巧图解(裁剪满大街都是)(5)

其中的 “Limit To Every __ Frames”就是可实现。

写在最后

对于个人而言,我更倾向于使用命令行的 gifsicle 处理工具.

因为可自定义参数很灵活,组装起来极为方便。且批量处理威力巨大,不必拘泥于界面操作,效率高的不止一点半点。

Happy coding :-)

我是 @程序员小助手 ,持续分享编程知识,欢迎关注。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页