如何使用ffmpeg从avi生成gif?

Mar*_*oni 49 ffmpeg

我正在尝试使用以下命令将视频的一部分提取为动画gif:

ffmpeg -i video.avi -t 5 out.gif
Run Code Online (Sandbox Code Playgroud)

它生成一个动画GIF,但质量是疯狂的.但是当我使用以下方法生成gif图像时:

ffmpeg -i video.avi -t 10 out%d.gif

它产生可接受的gif图像质量.如何使用第一个命令生成动画gif,但质量与第二个命令相同?

Tom*_*and 64

我有一个类似的问题,试图从电影中提取的一系列图像生成高质量的动画gif.

由于某些原因,使用ffmpeg生成的动画gif仅包含103种颜色,使用固定的256级系统调色板可以产生可怕的结果.我的解决方案是

ffmpeg -i video.avi -t 10 out%02d.gif
Run Code Online (Sandbox Code Playgroud)

然后

gifsicle --delay=10 --loop *.gif > anim.gif
Run Code Online (Sandbox Code Playgroud)

质量非常好.你可以在这里找到gifsicle

编辑:更新了帖子以反映Alex Kahn的建议.

  • 谢谢!一个调整:使用%02d.gif.这将填充文件名中的数字,以便它们按正确的字母顺序排列.否则,该命令最终为1,10,11,12,13,14,15,16,17,18,19,2,20,21,22,23 ......这使得得到的gif具有奇怪的跳跃效果. (7认同)
  • 您也可以使用`ffmpeg`输出PNG而不是GIF来避免糟糕的质量.FWIW,这是关于在Bash中创建GIFS的一篇很好的文章:http://blog.room208.org/post/48793543478 (2认同)

Pro*_*ane 0

我以前没有制作过动画 GIF,但您可以尝试使用比特率参数来指定质量,尽管它是图像(并且可能没有速率)。缩略图质量响应 -b 参数。如果“疯狂”是指“非常糟糕”,您可以指定非常高的比特率和比特率容差(不确定您使用的是 vbr 还是 cbr 源)。(或者,如果您认为它太好了并且想要限制大小,则执行相反的操作)

'-b', '10000000','-bt', '20000000'

或者,您也可以使用 -s 参数更改尺寸,该参数将采用普通的尺寸表示形式,例如“1920X1200”。

这实际上取决于源材料的比特率和压缩以及您希望 gif 的样子。也许可以考虑提供比“疯狂”更多的信息,但我想这无论如何都会给你一个良好的开始。祝你好运

  • 感谢您的回复。然而我发现 ffmpeg 并不擅长处理 gif 图像,所以我用它来提取图像,然后使用 imagemagick 生成 gif。 (2认同)