slh*_*hck 31 ffmpeg video-conversion
例如,我经常看到使用该sameq选项的FFmpeg 命令
ffmpeg -i input.mp4 -sameq output.avi
Run Code Online (Sandbox Code Playgroud)
这是什么意思?这是否意味着“相同的质量”?如果不是,我应该用什么代替?
slh*_*hck 63
sameq 并不意味着“相同的质量”网络上的一些资源提倡使用sameqorsame_quant选项,但从本质上讲,它们是错误的。使用sameq不会为您提供与输入相同质量的结果。
永远不要使用它。
混乱的根源是写得不好的文档,这暗示使用此选项将提供相同的质量。幸运的是,该选项已被删除。
这是 FFmpeg 文档所说的:
请注意,这不是相同的质量。除非您知道需要它,否则不要使用此选项。
事实上,FFmpeg 开发人员已经将名称从更改sameq为same_quant只是为了确保,然后完全删除了sameq/same_quant;这意味着这个选项在最近的 FFmpeg 中不存在,但这篇文章对于那些使用旧 FFmpeg 构建的人来说仍然有用。
现在我们已经解决了这个问题,让我们进入一些技术细节。
要理解为什么它不能可靠地工作,我们需要掌握“质量”对于普通视频编码器意味着什么以及影响质量的因素的概念。为什么一个视频在以不同比特率压缩时看起来比另一个更好?什么使转换有损,为什么编码后视频比原始视频小?
对视频进行编码时,首先将数学变换应用于像素块,从而将输入数据转换为不同的维度。这种变换,主要是离散余弦变换,产生一个数字矩阵,可以描述视频中 8×8 像素的场。
所以,你的 8×8 像素和相应的矩阵最初看起来像这样:1
但这数据太多了!如果我们想压缩视频,我们实际上可以去掉右下角的数字。我不会解释为什么会这样,但我们只是说在描述这样一个块时左上角的数字更重要。转换的整个想法基本上是将重要的东西放在左上角。
要删除右下角的数字,我们可以将它们设为零。如果某些东西“无”,或者只是作为0s重复,我们就不必存储它,这样我们就可以节省空间。在数学上,我们需要通过应用另一个矩阵“量化矩阵”来量化第一个矩阵。
这将导致矩阵中的数字现在少得多,并且有很多零:
这样做的结果是,我们将第一个包含大量数字的高质量矩阵变成了一个仍然类似于相同 8×8 像素的矩阵,但质量较差,因为它用于描述这些像素的数字较少。如果从视觉上比较块,它们很相似,但不再完全相同。
这里,量化矩阵决定了质量。这个很重要。我们可以为不同的质量使用不同的量化矩阵。一些量化矩阵几乎完好无损地保留了原始矩阵,而另一些则没有。我们删除的数字越多,质量就会越差,但我们可以压缩视频的次数越多,因为我们基本上可以在这里“扔掉”零。
sameq?假设您对视频进行编码并希望设置特定质量。正如我们已经了解到的,不同的量化矩阵会导致不同的质量,因此当我们告诉编码器使用 quality 时x,它将选择合适的量化矩阵y来获得该质量,无论它是什么。结果是使用y矩阵压缩的视频。2
这是有趣的部分:sameq表示“相同的量化器”。不是“相同的质量”。如果您有非最新版本的 FFmpeg,您仍然可以在ffmpeg --help以下位置找到它:
ffmpeg --help 2>&1 | grep sameq
Run Code Online (Sandbox Code Playgroud)
因此,当您现在获取转换后的视频并再次对其进行编码并应用该sameq选项时,FFmpeg 将选择用于输入视频的相同量化矩阵。
当您使用完全相同的编解码器进行输入和输出时,这在一定程度上有效,例如,当从 XviD 视频转换为 XviD 视频时,但您最终仍会得到更差的质量。3这是因为对已经编码的内容进行编码会丢弃更多信息。在上面的例子中,我们将在我们的矩阵中创建更多的零,结果看起来更糟。
它根本不适用于不同的视频编解码器。假设您正在使用 x264 转换 XviD 编码的视频。4对于这两种编解码器,内部使用的量化矩阵是不同的——它们没有相同的系数。所以这个选项甚至没有意义!不幸的是,FFmpeg 仍然允许您使用它。
底线:除非您特别清楚自己在做什么,否则请不要使用该选项。如果您想使用不同的编解码器对视频进行编码,但要保持质量,那么您必须进行试验并自行设置质量。看看结果是否令人满意,如果不是,则设置更高的质量。这就是你所能做的。
最后,如果您想了解如何在重新编码时保持质量,请查看以下帖子:
1)这里的矩阵与图像不对应,真的。这只是一个例子。
2) 实际上,如今,大多数编码过程不仅仅使用一个矩阵。当您设置某个比特率时,编码器将使用不同的矩阵来获得每秒的平均比特率。同样,在设置特定质量时,现代编码器会根据内容采用不同的矩阵。这是因为某些内容比其他内容“更容易”压缩,并且需要较少的量化来获得相同的压缩因子。
3) 示例:ffmpeg -i input.avi -sameq -c:v libxvid output.avi. 不要使用这个。请。
4) 示例:ffmpeg -i input.avi -sameq -c:v libx264 output.mp4. 也不要使用这个。我是认真的。
| 归档时间: |
|
| 查看次数: |
19160 次 |
| 最近记录: |