Back
Featured image of post 什么是 CBR、VBR、CRF、Capped-CRF?

什么是 CBR、VBR、CRF、Capped-CRF?

流控制模式详解

原文地址:What is CBR, VBR, CRF, Capped-CRF? Rate Control Modes Explained
作者:Jan Ozer

当你用 H.264、HEVC、VP9、AV1 等编码分发视频文件时,你都需要选择流控制模式,以在码率、整体质量、瞬态质量、编码耗时间平衡,得出具体场景下的最佳选择。常见的流控制模式有 CBR、VBR、CRF、Capped-CRF。本文将介绍这些模式的运作方式、优缺点、使用场景。

本文将会首先讨论 CBR(恒定码率,Constant Bitrate Encoding)和 VBR(可变码率,Variable Bitrate Encoding)。所有编码器都支持这两个模式。而 CRF 和 Capped-CRF 仅在 FFmpeg 的 x264x265libvpx-VP9libaom-AV1 编码器中可用,尽管本文仅讨论 x264

以下是本文会用到的视频文件,之后将会以此指代:

  • 测试:时长两分钟,前 \(30\) 秒为朝着镜头说话的视频,之后为 \(30\) 秒的芭蕾舞视频,之后再将整个视频重复一次。
  • 足球:时长两分钟,整体高动态的足球视频,同时包含较低动态和较高动态的片段。
  • 对话:时长两分钟,低动态的近距离对话视频。

当以分发为目的时(而非以归档或上传会被二压的视频为目的),这五个因素值得注意:

  • 兼容性:播放器可以解码并播放你分发的文件吗?本文讨论 H.264,所以兼容性不成问题。但如果使用 HEVC、VP9、AV1,则需要考虑兼容性。
  • 整体质量:文件的整体质量,在本文中以 VMAF1 度量。
  • 瞬态质量:编码后视频可能会存在瞬态质量问题,在本文中以低帧 VMAF 或 VMAF 的单帧最小值衡量。
  • 交付能力:顺畅地将文件传送给远程受众的能力。对于使用高速带宽连接的观众来说,自然不用考虑;但对于通过 3G 等低速网络接收视频的受众,可能是大问题。
  • 编码耗时:如果使用涉及多通2的编码模式,会显著提高编码时间。如果你使用付费云编码服务(典型的如 AWS Elemental MediaConvert),多通编码会显著提高花费。

最后,在 FFmpeg 及大多数带有 x264x265 编码器的工具中,有三个控制比特率的选项:

让我们从 CBR 开始。

CBR

顾名思义,使用 CBR 会使整个文件都是固定码率,而不会随场景复杂度变化。在 FFmpeg 中,将 b:vmaxratebufsize 的值设为一个,即为 CBR,如:

-b:v 5000k -maxrate 5000k -bufsize 5000k

测试视频中,\(30\) 秒的谈话和 \(30\) 秒的芭蕾舞片段交替出现,CBR 编码后的文件如下图所示。可以看到平均比特率(绿线)徘徊在 \(\pu{5000 Kbps}\) 附近。

被 CBR 模式编码的测试视频

在右侧,可以看到平均比特率为 \(\pu{4938 Kbps}\),峰值比特率为 \(\pu{6013 Kbps}\),较平均多 \(20\%\)。对于大多数软件编码器,CBR 的码率图并不是一条直线。但相比于下文的其他模式,CBR 的可变性明显更小。

我们稍后会回顾 CBR 编码的质量影响。

从交付能力来看,CBR 的优势显而易见。如果你的目的是云端直播,网络速率有限;或者通过低速连接将视频发送给远端受众,那么 CBR 缺乏可变性将确保连接稳定。CBR 是单通技术,编码成本也比接下来要讨论的 VBR 低。

VBR

VBR 编码的目的是达到码率目标,但在过程中根据视频内容的复杂度调整码率。VBR 通常还使用 2-pass 技术:第一遍扫描视频,识别复杂度;第二遍进行实际的编码。

VBR 通常通过最大码率和目标码率的比值来描述,如以下参数,分别称为 \(200\%\)\(150\%\)\(110\%\) 受限 VBR(也可称 CVBR,constrained VBR):

-b:v 5000k -maxrate 10000k -bufsize 10000k
-b:v 5000k -maxrate 7500k  -bufsize 7500k
-b:v 5000k -maxrate 5500k  -bufsize 5500k

如下图所示,比特率在高动态(芭蕾舞)和低动态场景(谈话)之间明显波动。尽管平均比特率类似于 CBR(\(\pu{5041 Kbps}\)\(\pu{4938 Kbps}\) 相比),但最大比特率明显更高(\(\pu{11137 Kbps}\)\(\pu{6013 Kbps}\) 相比)。\(150\%\) CVBR 具有类似平均比特率(\(\pu{5036 Kbps}\)),但峰值比特率低 \(20\%\)\(\pu{9090 Kbps}\))。

\(200\%\) CVBR 模式编码的测试视频

所有这些对质量有何影响?

下表显示了使用四种模式压缩足球视频的分数。平均比特率与峰值比特率的显着增量非常相似。整体 VMAF 得分非常接近;低帧 VMAF 得分正是 CBR 和 VBR 的区别。

编码模式平均码率峰值码率VMAF低帧 VMAF
CBR4938601395.1779.76
\(200\%\) CVBR50411113795.6985.39
\(150\%\) CVBR5036909095.8084.47
\(110\%\) CVBR4944666295.5782.59

最大的区别在于低帧分数,即瞬态质量问题的指标,其中 CBR 比 \(200\%\) CVBR 低约 \(5.5\) 分。一些观众可能会注意到这种瞬时质量问题。有趣的是,\(200\%\)\(150\%\) CVBR 之间的低帧 VMAF 仅相差约 1 点,而 \(150\%\)\(110\%\) CVBR 之间相差两点。

为了进一步探索,我在 MSU(Moscow State University,莫斯科国立大学)研发的视频质量测量工具中,比较了 CBR 和 \(200\%\) CVBR,见下图。

MSU 测量工具中的 CBR 和 CVBR 对比
  • 图顶部是两个文件的整体 VMAF 分数,CBR 为红色,\(200\%\) CVBR 为绿色。
  • 底部图表是顶部图表中突出显示区域的放大图,大致范围为 \(2100\) 帧到 \(3400\) 帧。若红色折线在绿色折线之下,表示这一部分 CBR 质量明显差于 VBR。

有趣的是,Apple 支持 \(200\%\) CVBR,《HLS创作规范》 中写到,「1.30. 对于 VOD 内容,峰值比特率不应超过平均比特率的 \(200\%\)」。也就是说,\(200\%\) CVBR 是否适合高帧率 8K 内容还有待观察,实质上可能需要 \(\pu{40 Mbps}\)3 才能达到可接受的质量。

小结

CBR 在编码耗时和交付能力方面胜出,而 VBR 在质量方面领先。然而,瞬时质量问题对于 CBR 来说也非常值得注意。

CRF

使用 CBR、VBR,我们可以选择目标比特率,编码器会调整质量以满足该比特率。这种方式的问题在于,如果对所有视频剪辑使用相同的参数,那么会浪费大量不必要的宽带,而实际上该视频可能是易于编码的,如对话视频。

VBR 的问题在于,它会无条件达到目标比特率,即使该视频的比特率和质量过高也是如此。

上图显示了被 \(200\%\) CVBR \(\pu{5 Mbps}\) 目标编码的对话视频,参数和先前编码足球视频一样。平均码率和峰值码率也和其一致,但 VMAF 分数达到了 \(97.61\)

研究4表明,一旦 VMAF 值超过 \(93\) 观众就无法感知,我也建议制作者不要让 VMAF 值超过 \(95\)。正如后面将要讲到的,对于此视频,可以将比特率降低至少 \(60\%\),但仍能达到 \(95\) VMAF 的目标。

因此,同样,当使用 CBR 和 VBR 时,编码器会根据需要调整质量以达到目标比特率。相比之下,当使用 CRF(恒定质量因子编码,Constant Rate Factor)时,编码器则是根据质量目标调整比特率。CRF 值的范围为 \(0\)\(51\),数字越低质量越高。通过命令调用 FFmpeg 使用 CRF 模式编码:

ffmpeg -i input_file -crf 23 output_file

CRF 编码适用于归档视频,或生成用于上传和转码的中间文件。但是,从交付能力的角度来看,它不是最佳选择,因为在编码之前,产生文件的比特率是未知的。

  • 对于对话视频,值为 22 的 CRF 编码的文件,平均比特率为 \(\pu{1878 Kbps}\),VMAF 得分为 \(96.26\),将VBR的比特率削减 \(60\%\) 以上,而对质量没有明显影响。
  • 然而,对于足球视频,CRF 22 产生了 \(\pu{10650 Kbps}\) 的平均比特率,这对于大多数 1080P 编码而言都太高了。

如何在确保合理的比特率限制的同时,节省带宽?CRF 加上最高比特率限制(或称 Capped-CRF)就是答案。

Capped-CRF

顾名思义,使用 Capped-CRF,可以将 CRF 与最大比特率限制结合。FFmpeg 参数如下:

-crf 22 -maxrate 5000k -bufsize 10000k 

使用测试视频作为输入,此参数产生了下图的结果。虽然最大速率不是一条平坦的线,但芭蕾舞的部分非常接近 \(\pu{5000 Kbps}\),峰值比特率为 \(\pu{6302 Kbps}\)。在编码过程中,编码器在对话部分使用 CRF 值,而在芭蕾舞部分被最大比特率限制。

Capped-CRF 编码的测试视频

这与 \(200\%\) CVBR 相比如何?

\(200\%\) CVBR 编码产生了 \(97.30\) 的平均 VMAF,\(\pu{5041 Kbps}\)的比特率。因此,Capped-CRF 节省了大约 \(30\%\) 的带宽并取得了 \(96.55\) 的 VMAF 分数,这在视觉上是无法区分的。而比特率存在显着差异,显著影响对受限连接的交付能力。

在高动态视频中,如足球视频,有许多部分 CRF 值产生高于上限的数据速率。在这些部分中,由最大上限控制比特率,而不是 CRF值。在这些情况下,Capped-CRF 不会节省太多带宽,因为编码器在不超过上限的情况下产生指定质量的部分很少。

如下表,该表显示了使用 \(200\%\) CVBR 和 Capped-CRF(CRF 22,\(\pu{5 Mbps}\)上限) 分别压缩足球视频的比特率和 VMAF 分数平均比特率大致相同,尽管 Capped-CRF 视频的峰值要低得多。平均 VMAF 分数也非常相似。

编码模式平均码率峰值码率VMAF低帧 VMAF
\(200\%\) CVBR50411113795.6985.39
Capped-CRF5025599395.3079.83

与 CBR 一样,主要区别出现在低帧 VMAF 中。下图显示了 VQMT 的比较结果图;当我查看折线图时,我没有看到明显的差异。

对比 \(200\%\) CVBR 和 Capped-CRF

然而,CBR 仅提高交付能力,Capped-CRF 除了可以做到这一点,还能在更易于编码的文件上节省带宽。从本质上讲,这使 Capped-CRF 成为一种按内容编码的技术,可以使用几乎所有基于 FFmpeg 的编码工具应用 Capped-CRF。

Capped-CRF 不是灌篮高手;你应该在自己的场景下测试,并确定视频中的瞬态问题是否比足球视频更为明显。如果瞬态问题很小,并且考虑使用 Capped-CRF,那么应该尝试不同的 CRF 等级(参见:为 Capped-CRF 编码选择最佳的CRF值)。

重复一次,CRF 和 Capped-CRF 并非适用于所有编码器;因此,如果您使用的第三方编码器不是基于 FFmpeg 的,或者你不使用 x264x265libvpx-VP9libaom-AV1 编码器,则它们可能不可用。

下表总结了所讨论的四种编码方法的优缺点。

模式方式优点缺点使用场景
CBR调整质量以达成比特率目标
整体比特率恒定
比特率固定
单通编码
整体质量
瞬态质量
直播
受限宽带下的点播
CVBR调整质量以达成比特率目标
根据场景复杂度调整比特率
整体质量
瞬态质量
比特率可变性
编码耗时(多通编码)
大多数其他点播
CRF根据质量要求调整比特率单通
分发时设置质量
无码率控制归档
待二压的中间文件
Capped-CRF带有最大比特率的CRF按内容调整编码
单通
瞬态质量
比特率可变性
直播
点播

  1. VMAF:视频多方法评估融合,Video Multimethod Assessment Fusion,Netflix 等研发的全参考视频质量指标 https://en.wikipedia.org/wiki/Video_Multimethod_Assessment_Fusion↩︎

  2. 多通:即 multi-pass,常见于 VBR 模式的二通(2-pass)。这种模式会扫描多次文件以提高编码质量。与之相反的为单通,1-pass 或 single-pass,只会扫描一次文件。↩︎

  3. 参见:https://streaminglearningcenter.com/metrics/8k-video-per-title-encoding-hdr-metrics.html↩︎

  4. https://realnetworks.com/sites/default/files/vmaf_reproducibility_ieee.pdf↩︎

comments powered by Disqus