FFmpeg中的“ sameq”或“ same_quant”选项是什么?这是否意味着“质量相同”?


29

我经常看到使用该sameq选项的FFmpeg命令,例如

ffmpeg -i input.mp4 -sameq output.avi

这是什么意思?这是否意味着“质量相同”?如果没有,我应该怎么用呢?

Answers:


57

sameq 并不意味着“质量相同”

网络上有几种资源可以促进sameqor same_quant选项的使用,但从本质上讲,它们是错误的。使用sameq不能得到与输入相同质量的结果。
永远不要使用它。

造成混淆的原因是文档编写不当,这意味着使用此选项将提供相同的质量。幸运的是,该选项已被删除。

这是 FFmpeg文档所说的:

请注意,这不是相同的质量。除非您知道需要此选项,否则不要使用它。

实际上,FFmpeg开发人员已将名称更改sameqsame_quant只是为了确定,然后将其sameqsame_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

因此,当您现在获取转换后的视频并再次对其进行编码,并应用该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。也不要使用它。我是认真的。


-sameq选项已弃用,然后从avconv中删除
AzizSM '18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.