Linux下将动态gif转换为avi

27

有没有办法在Linux上将动态GIF转换为视频格式(例如.avi)?

我已经尝试过

ffmpeg -i thegif.gif thevideo.avi

但我得到的只有视频的第一张图片。


使用当前的ffmpeg,ffmpeg -i foo.gif foo.mkv可以正常工作,甚至可以正确处理可变帧速率的动画gif。使用mkv输出,您将获得一个可变帧速率的mkv。使用mp4输出,它会将fps提高到所需的最高值,然后根据需要复制帧以在适当时显示内容。例如,具有25fps和10fps的gif生成了50fps的mp4,其中包含2倍的重复帧和5倍的重复帧,具体取决于哪个部分。存储重复帧几乎不占用空间,我不知道它们是否在h.264流中或仅在mp4容器中。 - Peter Cordes
5个回答

46

ffmpeg 的 GIF 输入效果不太好。通常更容易使用 convert(来自 ImageMagick)解压缩 gif 帧,并使用 ffmpeg 处理这些帧:

convert some.gif some%05d.png  
ffmpeg -i some%05d.png some.avi  
rm some*.png

谢谢,我一直在寻找你的第一个命令行:convert some.gif some%05d.png - Dorian
3
如果某些帧因为只显示与基本帧的差异而损坏,使用-coalesce选项来转换。 - Hnatt
当使用-coalesce时,您可能需要删除第一帧,因为它的格式与其他帧不同(PseudoClass而不是DirectClass)。可能存在一种方法来转换它... - xiawi
这并没有考虑每一帧的时间信息。所有帧都将以相同的帧率显示。 - BarbaraKwarc

13

7
如果您的gif有透明度,您需要像这样添加-coalesce:convert -coalesce download.gif some%05d.png。 - Ivailo Bardarov
-1,因为你的第一条命令没有生效。但 NordicMainframe 的命令生效了。 - erik
1
这会丢失输入gif的帧速率信息。当前的ffmpeg现在可以直接处理动画gif输入。 - Peter Cordes

9
如果您希望以特定的帧率作为输入,因为生成的视频太快或太慢,请使用以下方法:
ffmpeg -r 'xx' -i some%05d.png some.avi  

其中xx为输入帧率。


3

如果你不想要临时文件,可以尝试使用mencoder:

mencoder myfile.gif -mf fps=25 -o myfile.avi -ovc lavc -lavcopts vcodec=mpeg4

0
如果你想要一个循环作为输出
ffmpeg -loop 1 -t x -i some%05d.png some.avi

其中 x 代表视频运行的时间(秒)。

来源


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接