如何在命令行上将动画gif转换为mp4或mv4?


79

我将使用什么命令将mp4或mv4视频文件转换为动画gif,反之亦然。也就是说,将动画gif转换为mp4或mv4。

Answers:


107

这对我有用:

ffmpeg -i animated.gif -movflags faststart -pix_fmt yuv420p -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" video.mp4

movflags –此选项优化了MP4文件的结构,以便浏览器可以尽快加载它。

pix_fmt – MP4视频以不同格式存储像素。我们包括此选项以指定一种特定格式,该格式在所有浏览器中具有最大的兼容性。

vf –使用H.264的MP4视频的尺寸必须可被2整除。此选项可确保确实如此。

资料来源:http : //rigor.com/blog/2015/12/optimizing-animated-gifs-with-html5-video


4
谢谢,这是在osx上对我有用的唯一版本。
皮克勒

1
这为我工作在Ubuntu 16.10的有关ffmpeg 3.0.2,其中最多的回答没有

1
不妨作物,而不是缩放(替换scalecrop),因为你只打算最多1个像素被切断。缩放可能会使事情变得模糊
Jezzamon '18

这为我切断了最后几秒钟。结果mp4提前结束。
卡伦

38

就我而言,ffmpeg直接使用就可以了,并提供了最佳结果:

$ ffmpeg -f gif -i infile.gif outfile.mp4

2
在os x上制作了一个空白(损坏的)视频
Pykler 16'7

2
@Pykler,您可能应该增加详细程度和/或检查日志文件以了解正在发生的情况。
BenC

我也是,可能在vico Vault的答案中建议“被2整除”。(这对我
有用

这种方法对我来说是完美的。(最重要的答案导致3秒钟被删除。)编辑:哦,但它不能在iOS上播放:(
callum

一个网页上说您应该只添加-pix_fmt yuv420p
Beefather

2

将GIF动画转换为视频的另一种方法:

ffmpeg -i your_gif.gif -c:v libvpx -crf 12 -b:v 500K output.mp4

-crf值可以从4到63。较低的值表示更好的质量。-b:v是允许的最大比特率。更高意味着更好的质量。


2

如果要在“ n个循环”中进行输出,请一次性查看此解决方案

因此,让我们将normal.gif转换为loop.mp4

对于2个循环的影片示例:

ffmpeg -stream_loop 2 -i normal.gif loop.gif -y;ffmpeg -i loop.gif -pix_fmt yuv420p -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" loop.mp4 -y

5个循环的电影示例:

ffmpeg -stream_loop 5 -i normal.gif loop.gif -y;ffmpeg -i loop.gif -pix_fmt yuv420p -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" loop.mp4 -y

注意:有-y [用于覆盖]


如果您在不使用的情况下运行第一个ffmpeg命令,则意外覆盖掉您不想要的内容的可能性会大大降低。(也可能有一种方法可以将视频传递到自身中,并通过一个 -yffmpeg
传递

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.