我正在开发将mp4
文件转换为gifs
使用 的android 应用程序ffmpeg
。问题是生成的 gif 尺寸很大。另一个问题是,除了ffmpeg
(例如imagemagick
,convert
甚至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,那么文件大小会更大。