ffmpeg
我使用以下命令创建了一个 GIF :
ffmpeg -i foo.mp4 -ss 00:00:18 -t 00:00:06 -pix_fmt rgb24 bar.gif
但是,生成bar.gif
的文件大小超过 300 MB,而电影文件foo.mp4
约为 15 MB!
是什么赋予了?
很难全面回答这个问题:-p 简而言之,归结为每种格式的压缩是如何完成的。
在 GIF 动画中,每一帧在概念上都是一个单独的 GIF 图像。然后,所有 GIF 图像都存储在一个大的 GIF 文件中,并带有播放帧的指令,帧之间有一定的延迟。要优化帧,您可以通过一个程序运行 GIF,该程序可以删除从一帧到下一帧的重复信息(GIMP“动画优化”过滤器是一个很好的方法:GIMP - 简单动画)。
另一方面,像 MP4 这样的视频格式有不同的方法。他们假设帧将是相似的,并且只存储两个帧之间的差异。此外,每帧的数据量仅限于开始压缩时给定的指定视频比特率。执行有损压缩以将视频文件降低到所需的比特率。为了进一步优化视频文件,大多数视频转码器都包含“二次编码”选项。这会在视频中运行两次:第一次它只是收集有关文件中哪些部分更复杂的信息,然后第二次它更积极地压缩视频中每个不复杂的部分。
作为视频编码过程的一部分,还有许多其他优化在 GIF 文件格式中完全缺失。此外,值得指出的是,GIF 动画将被限制为 256 色调色板,这可能会导致图像抖动。MP4 对视频帧使用更类似于 JPEG 压缩的东西(尽管有专门针对视频的额外优化……旧的 MJPEG 格式基本上只是一堆 JPEG 图像,就像 GIF 动画是一堆 GIF 图像一样)。
如果您可以提供有关您的特定用例的更多信息,我们或许可以帮助您找到更好的解决方案。
我同意你的看法,使用这个命令不是最优的:
avconv -i input.mp4 -pix_fmt rgb24 output.gif
在此转换后使用 Gimp 如下: