我正在尝试使用以下命令将视频的一部分提取为动画gif:
ffmpeg -i video.avi -t 5 out.gif
它生成了一个动态gif图像,但质量很差。然而,当我使用以下命令生成gif图像时:
ffmpeg -i video.avi -t 10 out%d.gif
它生成了可接受的gif图像质量。如何使用第一个命令生成动画gif图像,但保持与第二个命令相同的质量?
我正在尝试使用以下命令将视频的一部分提取为动画gif:
ffmpeg -i video.avi -t 5 out.gif
它生成了一个动态gif图像,但质量很差。然而,当我使用以下命令生成gif图像时:
ffmpeg -i video.avi -t 10 out%d.gif
它生成了可接受的gif图像质量。如何使用第一个命令生成动画gif图像,但保持与第二个命令相同的质量?
我曾尝试从一部电影提取多个图像,生成高质量的动态gif时,遇到了类似的问题。
由于某些原因,使用ffmpeg生成的动态gif仅包含103种颜色,这些颜色是在一个固定的256级系统调色板中假定的,导致效果极其恶劣。我的解决方案是
ffmpeg -i video.avi -t 10 out%02d.gif
那么
gifsicle --delay=10 --loop *.gif > anim.gif
质量相当不错。你可以在这里找到gifsicle。
编辑:根据Alex Kahn的建议更新了帖子。
ffmpeg
输出 PNG 而不是 GIF,以避免劣质的质量。顺便说一下,这里有一篇关于在 Bash 中创建 GIF 的好文章:http://blog.room208.org/post/48793543478 - Mathias Bynensseq -f %02g.gif start skip stop
而不是*.gif
,你可以跳过skip
帧,从start
开始到stop
帧结束。非常有用。例如:gifsicle --delay=10 --loop `seq -f %02g.gif 1 3 156` > anim.gif
将从第1帧开始,跳过3帧,并在第156帧停止。 - funkaster我以前没有制作过动画GIF,但您可以尝试使用比特率参数来指定质量,尽管它是一张图片(并且可能没有速率)。缩略图质量响应于-b参数。如果您所说的“疯狂”是指“糟糕透顶”,则可以指定非常高的比特率和比特率容差(不确定您是否使用vbr或cbr源)。 (或者如果您认为它太好了并且想要限制大小,则相反)
'-b','10000000','-bt','20000000'
另外,您还可以使用-s参数更改尺寸,该参数将采用普通的尺寸表示方式,例如“1920X1200”。
这实际上取决于您的源材料的比特率和压缩以及您希望GIF的效果如何。也许考虑提供比“疯狂”更多的信息,但无论如何,我想这都会给您一个良好的开端。祝你好运