8

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!

是什么赋予了?

4

2 回答 2

7

很难全面回答这个问题:-p 简而言之,归结为每种格式的压缩是如何完成的。

在 GIF 动画中,每一帧在概念上都是一个单独的 GIF 图像。然后,所有 GIF 图像都存储在一个大的 GIF 文件中,并带有播放帧的指令,帧之间有一定的延迟。要优化帧,您可以通过一个程序运行 GIF,该程序可以删除从一帧到下一帧的重复信息(GIMP“动画优化”过滤器是一个很好的方法:GIMP - 简单动画)。

另一方面,像 MP4 这样的视频格式有不同的方法。他们假设帧将是相似的,并且只存储两个帧之间的差异。此外,每帧的数据量仅限于开始压缩时给定的指定视频比特率。执行有损压缩以将视频文件降低到所需的比特率。为了进一步优化视频文件,大多数视频转码器都包含“二次编码”选项。这会在视频中运行两次:第一次它只是收集有关文件中哪些部分更复杂的信息,然后第二次它更积极地压缩视频中每个不复杂的部分。

作为视频编码过程的一部分,还有许多其他优化在 GIF 文件格式中完全缺失。此外,值得指出的是,GIF 动画将被限制为 256 色调色板,这可能会导致图像抖动。MP4 对视频帧使用更类似于 JPEG 压缩的东西(尽管有专门针对视频的额外优化……旧的 MJPEG 格式基本上只是一堆 JPEG 图像,就像 GIF 动画是一堆 GIF 图像一样)。

如果您可以提供有关您的特定用例的更多信息,我们或许可以帮助您找到更好的解决方案。

于 2012-09-24T22:23:31.743 回答
2

我同意你的看法,使用这个命令不是最优的:

avconv -i input.mp4 -pix_fmt rgb24 output.gif

在此转换后使用 Gimp 如下:

在此处输入图像描述

于 2014-12-01T10:12:24.893 回答