之前使用 FFmpeg 制作 GIF 被 zyo 吐槽 明显的网纹,于是找到了更好的办法。

需要:FFmpeg 以及 ImageMagick。

依旧不讨论如何截取/剪裁视频文件的问题。例如我们这里要转换的视频文件为 clip.mp4,首先使用 ffmpeg 转换成一个个的 PNG 文件,保持纵横比,宽为320像素,帧率为20。为防止文件名混乱,先建立一个 png 目录。

1
2
mkdir -p png
ffmpeg -i clip.mp4 -vf scale=320:-1 -r 20 png/output%05d.png

接下来使用 ImageMagick 的 convert 工具来把 png 连接成 gif。顺便做优化来缩小文件体积。

1
convert -layers Optimize png/output*.png clip.gif

这样就得到了图象效果更好的 clip.gif 文件了。不过还有一个问题,不管是本地图象查看器还是浏览器里,这gif都像幻灯片似的。本来觉得是帧率的问题,但是就算是尝试了原帧率一样不行。Google 之发现了问题…

解决方案在这里。不使用 -delay 0 或者是大于 6/100 的值。

所以刚才的命令可以稍微修改下。几次测试后发现对于我的原视频(23fps),4/100 最合适。

1
convert -layers Optimize -delay 4/100 png/output*.png clip.gif

这样制作出来的 gif 效果就非常赞啦。虽然比之前多了一个步骤,但是确实是制作了更好的gif,是更好的方法。