#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
#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是允许的最大比特率。更高意味着更好的质量。
评论
谢谢,这是在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