为什么使用 CRF(本应基于质量)进行 FFMPEG 硬件编码会导致质量降低?

为什么使用 CRF(本应基于质量)进行 FFMPEG 硬件编码会导致质量降低?

我最近一直在使用 FFMPEG 通过快门编码器GUI。我一直使用 CRF 作为质量指标,因为我不在乎文件大小,只要它尽可能高效地编码即可。H.264 编码指南说“将 17 或 18 视为视觉上无损或几乎无损”,但当我使用硬件加速时,即使 CRF 没有改变,也会导致质量大幅下降。我知道 GPU 需要更高的比特率才能达到相同的质量,但 CRF 控制质量,所以我本来希望文件大小增加时质量保持不变。

答案1

补充一下@Mokubai 的回答:

H.264 是一种视频编码标准,存在不同的编码器(或编解码器)可以生成 H.264 视频流。最广为人知的是 x264,它是 ffmpeg 中的默认编码器。它仅在 CPU 上运行。还存在在 GPU 上运行的 H.264 编码器,它们通常由 GPU 供应商提供:QSV 用于英特尔集成 GPU,nvenc 用于 Nvidia GPU,等等...

使用“硬件加速”绝对不是使用移植到 GPU(或任何其他硬件加速器)的相同编码器,它实际上使用完全不同的编码器(由于您使用的是 Mac,因此我不确定您的软件选择了哪一个,我知道 Apple 提供了自己的编码器)。关键是不仅算法不同,而且它们之间的参数也不匹配:例如,一个编码器中的 crf 参数不一定在另一个编码器中具有相同的效果,并且相同的值可能导致完全不同的有效质量(参数及其尺度不标准化)。

答案2

因为硬件编码使用固定的功能块,其通用性和适应性远不如软件编码器。

硬件编码器总是比软件编码器差,除非它们经过专门调整以产生高质量的结果,这将导致它们具有更高的复杂性,因此在硅片空间和开发时间方面的成本。

这可能是硬件编码器能做的唯一工作,但它需要大量的空间才能达到与功能齐全的软件编码器相同的复杂程度。为了降低复杂性,它会采取捷径和权衡。

因此,软件编码器 100 次中有 99 次都会获得更好的结果。

显卡中的硬件编码器足以完成这项工作,而且速度很快。当速度是关键且给定带宽(或给定质量的更大带宽)的质量损失是可以接受的时,它是一个很好的选择。

如果您需要高质量的硬件编码器那么您将为此付出更多钱。

更多信息请访问直播流媒体硬件与软件编码器:您的选择说明 [2021 更新]

相关内容