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

128 video conversion

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

小智 187

以下是对我有用的内容:

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

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

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

vf – 使用 H.264 的 MP4 视频需要具有可被 2 整除的尺寸。此选项确保了这种情况。

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

  • 谢谢,这是唯一在 osx 上对我有用的版本。 (4认同)
  • 也可以裁剪而不是缩放(用 `crop` 替换 `scale`),因为你最多只会剪掉 1 个像素。缩放可能会使事情变得模糊 (4认同)
  • 这在带有 ffmpeg 3.0.2 的 Ubuntu 16.10 上对我有用,其中最佳答案没有 (2认同)

Ben*_*enC 50

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

$ ffmpeg -f gif -i infile.gif outfile.mp4
Run Code Online (Sandbox Code Playgroud)

  • 在 os x 上制作了一个空白(损坏)的视频 (6认同)
  • @Pykler 您可能应该增加详细程度和/或检查日志文件以了解发生了什么。 (2认同)
  • 我也是,可能是 vico Vault 的回答中建议的“可被二维整除”。(这对我有用) (2认同)

PYK*_*PYK 7

如果您想在“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
Run Code Online (Sandbox Code Playgroud)

对于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
Run Code Online (Sandbox Code Playgroud)

请注意:有一个-y 选项,因此输出文件将被覆盖

所述-vf选项是解决比率相称[宽度VS高度]


whi*_*ngs 5

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

ffmpeg -i your_gif.gif -c:v libvpx -crf 12 -b:v 500K output.mp4
Run Code Online (Sandbox Code Playgroud)

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


bee*_*her 5

旁注:重要的是要指定,-pix_fmt yuv420p以免您的视频在各种工具中看起来像是黑色矩形:

$ ffmpeg -i animated.gif -pix_fmt yuv420p output.mp4
Run Code Online (Sandbox Code Playgroud)

参考