使用 FFMPEG 减少生成的 GIF 大小

使用 FFMPEG 减少生成的 GIF 大小

我正在开发将mp4文件转换为gifs使用 的android 应用程序ffmpeg。问题是生成的 gif 尺寸很大。另一个问题是,除了ffmpeg(例如imagemagickconvert甚至palletes现在)之外,我无法使用任何其他东西来减小生成的 gif 大小。

这是我正在使用的命令: ffmpeg -y -i file.mp4 -pix_fmt rgb24 -r 10 -s 320x480 file.gif

那么还有其他方法可以优化转化吗?

答案1

使用 ffmpeg 制作 GIF 的标准方法是

生成调色板来自视频

ffmpeg -y -i file.mp4 -vf palettegen palette.png

然后,

ffmpeg -y -i file.mp4 -i palette.png -filter_complex paletteuse -r 10 -s 320x480 file.gif

记录更多选项这里

答案2

下面的命令帮助我优化了我的 gif。参数可以根据您的特定要求进行更改。

ffmpeg -y -i input.mp4 -filter_complex "fps=5,scale=480:-1:flags=lanczos,split[s0][s1];[s0]palettegen=max_colors=32[p];[s1][p]paletteuse=dither=bayer" output.gif

笔记:

  • 这里规模最大颜色数极大地影响输出 gif 的文件大小。

  • 如果你为 scale 和 max_colors 设置较低的值,则设置 抖动拜耳使输出的 gif 看起来更好一些。抖动的默认值是sierra2_4a

答案3

我尝试了所有这些技巧,最后我使用了https://ezgif.com

我不知道他们背后使用了什么魔法,但他们的压缩级别旋钮、调色板优化和分辨率降低带来了最高的视觉质量和最小的文件大小。

我尝试过-vf palettegen-filter_complex paletteuse但这样就无法-vf "scale=iw*.2:ih*.2"在同一次运行中执行,因此我不得不单独执行。而且 ffmpeg 创建的文件比0.3这要大0.5,这很奇怪。经过一个小时的折腾,我尝试了 ezgif,效果很好。

答案4

对我而言,有效的方法是为输出 gif 指定一个低于 10 的帧速率 (-r 10)。如果您追求的是高质量,这可能不是您想要的。如果您追求的是更高质量的 gif,那么文件大小会更大。

相关内容