如果我在 x264 (FFmpeg) 中使用低于 17/18 的 CRF (恒定速率因子) 值,我会获得任何视觉上的好处吗?除了尺寸之外,还有其他区别吗?
CRF 17/18 在视觉上无损。
CRF 0 表示该帧的每个像素将由其自己的数据决定。CRF 17/18 表示该帧的每个像素将由其自己的数据决定,或者如果前一帧的数据相同,则由前一帧的数据决定。
所以从视觉上看,两者是一样的。那么较低值的 CRF(0-16)编码有什么用呢?
我已经测试了大多数可用的 CRF 值(包括 CRF 0)。我使用“CRF 0”编码了一部 1080P 蓝光电影。输出最终比蓝光源大 2.5 倍(110GB)。
据我所知,我没有看到任何理由使用低于 CRF17/18 的 CRF 值。而且我无法找到任何理由来证明使用较低的 CRF 值是合理的。那么较低的 CRF 值有什么用呢?
CRF 17/18 中的生成损失是否会更多,而 CRF 值较低的编码中的生成损失是否会更少?
答案1
简短的回答是:不,您不太可能获得视觉上的好处,或者至少大多数人不会注意到。
为了简单起见,我们假设使用 17 的 CRF 等于使用常数量子点17。QP 越低,比特率越高,反之亦然。QP 0 表示没有量化损失;QP 51 是最大可能值(对于 8 位 H.264)。这种通过量化减少信息的技术已有数十年历史,是大多数有损视频压缩算法的基础。问题是:量化损失在哪里?主观压缩带来的好处何时大于质量损失?
主观测试中,用户会逐个观看压缩剪辑并对其质量进行评分,结果表明,对于使用 压缩的 UHD 视频libx264
,平均意见分数饱和度约为 30-40 Mbit/s(使用 2 遍编码,中等预设)。这意味着人类受试者无法分辨出以更高比特率编码的剪辑之间的差异(或不会给出更高的评分)。如果 CRF 低于 17,通常会达到 50 Mbit/s 或更高,具体取决于内容。因此,使用较低的 CRF 通常会浪费比特,而人类不会注意到这一点。*
因此,有一个知觉阈值此后,使用较低的 QP 不会给您带来更好的质量——这只会意味着您会浪费比必要更多的比特。此阈值取决于内容的空间特征:有些内容比其他内容更容易压缩。这里肯定没有硬性阈值,但大多数建议在 H.264 的 QP/CRF 17-18 左右徘徊。
需要澄清的是,你可以选择指定这些特定的 QP/CRF 参数,因为它们是技术上可能,并不是因为它们本身就有用。就像你可以驾驶高转速的汽车并浪费汽油一样,你可以以不合理的高比特率对视频进行编码,它也能完成工作。
选择高于感知阈值的 QP/CRF 值的可能原因是什么?
您的目标是找出与特定内容的 QP 相关的感知阈值。(此处的示例。
您希望以最佳质量存档视频,而不关心文件大小,但您不希望拥有非常大的文件(即比原始视频的大小大得多)。
你知道你的视频在某个阶段会再次经历有损压缩,在这种情况下,在第一阶段保留尽可能多的细节会有所帮助,以免产生更多的发电损失。
既然你问的是后一点:生成损失的多少取决于原始视频的空间细节量以及未来编码阶段应用的量化量。因此,在第一步中丢弃的越少,在以后的任何步骤中保留质量的机会就越大。
那么,较低的 QP/CRF 值有什么好处呢?至少对于普通用户来说,没什么好处。
*当然,这取决于测试方法。有些测试范例比我描述的更为关键。例如,如果您展示未压缩剪辑和压缩版本之间的明确比较,用户可以检测到更细微的差异。这同样适用于基于JND的测试。
答案2
是的,只有 CRF 12 及以下是“透明的”。如果您从无损源转换或向下转换(UHD 蓝光到 HD 蓝光),请使用它。大小将与实际的蓝光重制版相当。如果您使用任何高于 12 的 CRF,那么您显然关心存储空间并且必须接受细节损失。
答案3
如果你不想损失太多细节,那就值得了。如果你不在乎,那又何必呢。这取决于你使用的源。例如,如果你正在编码的节目需要高比特率来处理动作场景,你就必须满足 crf 的要求来弥补这一点。一般来说,如果你对任何东西进行编码,并且希望细节损失最小(假设你不在乎大小),crf-14 或 crf-15 就很不错了。