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

#1 楼

以下是对我有用的方法:

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


movflags –此选项优化了MP4文件的结构,以便浏览器可以尽快加载它。
< br pix_fmt – MP4视频存储不同格式的像素。我们包括此选项,以指定一种特定格式,该格式在所有浏览器中具有最大的兼容性。

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

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

评论


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

–派克勒
16年7月14日在23:52

这在ffmpeg 3.0.2的Ubuntu 16.10上对我有用,其中最高答案没有

–猫
16-10-23在22:54

也可以裁剪而不是缩放(用裁剪替换缩放比例),因为您最多只能裁剪1个像素。缩放可能会使事情变得模糊

–杰扎蒙
18年2月1日在8:12



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

– callum
18-2-22在13:06

#2 楼

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

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


评论


在OS X上制作了空白(损坏的)视频

–派克勒
16年7月14日在23:53



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

– BenC
16年7月17日在19:02

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

–lapo
16-10-24在11:20

这种方法对我来说非常有效。 (最上面的答案导致3秒钟被切断。)编辑:哦,但是在iOS上不起作用:(

– callum
18-2-22在13:07



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

–羽毛
18年8月20日在16:06

#3 楼

如果要在“ 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 my.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选项,因此输出文件将被覆盖

-vf选项用于解决比例比例[width与高度]


评论


如果在不带-y的情况下运行第一个ffmpeg命令,则意外覆盖掉您不想要的内容的可能性会大大降低。 (也可能有一种方法使ffmpeg将视频通过管道传输到其自身,并通过一个管道命令执行此操作,而无需中间文件和覆盖。)

–FeRD
19-09-18在19:15

#4 楼

注意:重要的是要指定-pix_fmt yuv420p,以免在各种工具中您的视频看起来像一个黑色的矩形:
$ ffmpeg -i animated.gif -pix_fmt yuv420p output.mp4

参考文献

为什么ffmpeg的视频不会显示在屏幕上QuickTime,iMovie还是快速预览?



评论


如果不指定该选项,则不仅是Apple,有时Windows Media Player也无法播放输出。而且,如果您尝试与其他播放器一起播放,那将是一个灰褐色的屏幕,其中在视频上显示了伪像。

–沙燕
19年12月1日在13:28

我得到不能被2整除的高度(260x373),并且初始化输出流0:0时出错-打开输出流#0:0的编码器时出错-可能是错误的参数,例如bit_rate,rate,width或height错误消息。但是这个答案对我有用。

–水果
19/12/20在15:36



观察-OP是否要以动画gif作为输入(和/或输出)?您的答案没有gif作为输入或输出

– nhed
20 Jul 24'3:31



@nhed谢谢,我稍微改写了一下,将其放回上下文中

–羽毛
20年7月28日在12:14

#5 楼

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

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


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