2011-05-21 33 views
44

我想视频的部分提取到使用以下命令GIF动画:如何使用ffmpeg从avi生成gif?

ffmpeg -i video.avi -t 5 out.gif 

它生成GIF动画,但质量是疯了。然而,当我生成使用GIF图像:

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

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

+2

这可能很方便http://blog.pkh.me/p/21-high-quality-gif-with-ffmpeg.html – 2015-03-18 02:02:27

回答

0

我还没有制作过GIF动画,但您可以尝试使用比特率参数来指定画质,尽管它是一个图像(并且可能没有比例)。缩略图质量响应-b参数。如果通过疯狂,你的意思是“非常糟糕”,你可以指定非常高的比特率和比特率容忍度(不确定你是否使用vbr或cbr源)。 (或者做相反,如果你的意思是太好了,你希望限制大小)

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

另外,您还可以使用-s参数,将采取的一个普通的望着表示更改尺寸尺寸如“1920X1200”。

它确实取决于您的源素材的比特率和压缩以及您希望gif会是什么样子。也许考虑提供比“疯狂”更多的信息,但我想这会给你一个很好的开始。祝你好运

+2

感谢您的回复。但是我发现ffmpeg并不擅长处理gif图像,所以我用它来提取图像,然后使用imagemagick来生成gif。 – Marconi 2011-05-22 01:20:45

+0

不知道为什么我在这里收到很多downvotes。我在前面说过,我没有制作GIF动画。试图将问题的人指向其他相关参数。旧的FFMPEG项目似乎很荣幸将其参数隐藏在文档之外。也许我因为揭示其可怕的黑暗秘密而陷入低谷? – Profane 2011-08-09 12:46:36

61

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

由于某些原因,使用ffmpeg生成的动画gif仅包含103种颜色,使用固定的256级系统颜色调色板可导致可怕的结果。我的解决办法,而不是

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

然后

gifsicle --delay=10 --loop *.gif > anim.gif 

质量是那么相当不错。你可以找到gifsicle here

编辑:更新了帖子,以反映亚历克斯卡恩的建议。

+7

谢谢!一个调整:使用%02d.gif。这填充文件名中的数字,以便它们按照正确的字母顺序排列。否则,订单结束为1,10,11,12,13,14,15,16,17,18,19,2,20,21,22,23 ...这给出了由此产生的gif一个奇怪的跳过效果。 – 2012-12-17 00:32:11

+2

您也可以使用'ffmpeg'输出PNG而不是GIF来避免糟糕的质量。 FWIW,这里有一个关于在Bash中创建GIFS的精彩文章:http://blog.room208.org/post/48793543478 – 2013-09-30 10:48:50

+1

这很好用。你可能还想做的一件事是跳过帧:使用'seq -f%02g。gif start skip stop“代替gifsicle命令中的”* .gif“,你可以跳过'skip'帧,从'start'开始到'stop'帧结束。非常有用。 例如: gifsicle --delay = 10 --loop'SEQ -f%02g.gif 1 3 156'> anim.gif 将在帧1开始,跳过3帧和在帧156中 – funkaster 2014-03-03 23:21:02