码率控制技术 RC(Rate Control)是视频编码中一个十分重要的技术模块。不同的利用场景对视频编码的码率管制有不同的需要,离线编码通常采纳可变码率(VBR),实时视频零碎通常采纳恒定码率(CBR)。本篇技术干货将深度分析视频编码中的码率控制算法,剖析其背地的数学模型及实践,心愿能帮忙大家更好地了解视频通信中的码率控制算法。
PART 01 码率管制类型
码率管制次要指编码过程中,通过调整 QP 来管制视频码率的行为。在不同的应用场景下,用户对视频的码率大小、稳定性会有不同的要求,因而码率管制的类型也多种多样。
比方观看离线视频文件时,往往不须要此视频具备恒定的码率,因为整个文件都在本地,只有磁盘 IO 和设施解码能力都合格,根本就不会产生卡顿问题(这里不探讨硬件解码的 buffer 限度以及内网 NAS 的带宽限度)。所以压抑这类视频时会偏向于保证质量而非码率平稳性。画面纹理比较复杂或静止激烈的场景,码率给高一些,以保障画面质量;而画面简略的场景,码率就给低一些,节俭硬盘空间。这种码率控制策略咱们统称为可变码率(VBR)。
但在观看在线视频时,因为用户带宽是恒定的,可能缓存的数据量也无限,所以须要对码率做一些限度。否则一些刹时码率过高的片段可能会引起卡顿。此外还有一点,因为 CDN 是按流量计费的,视频网站如果应用 VBR 编码视频会使带宽老本变得不可控。所以压抑这类视频时,会偏向于抉择恒定码率(CBR)。
不同场景下的码率管制需要
本文接下来的探讨内容次要集中在 CBR,但其中的一些改进算法其实也能够用在 VBR。
PART 02 码率管制根基:RQ 模型
首先看一下码率管制的大体流程:
码率管制根本流程
能够看到整个流程都是围绕着 RQ 模型进行。这里的 RQ 模型指的是码率与 QP 的推导关系,能够说是码率控制算法的根基。它经验过屡次改良,精度也在一直进步,这里举几个例子:
一阶模型:
最简略的模型,在 x264、OpenH264 等编码器中被宽泛应用。式中 Q 指 Q -step,即量化步长。R 指 Rate,示意码率。Comp 示意图像复杂度,个别能够应用 MAD(Mean Absolute Difference)来计算。α 是一个系数,须要咱们在编码过程中一直依据理论输入码率来更新。
二阶模型:
一阶模型的进阶版,JM 中有应用。
R- λ 模型:
在 HM(HEVC Test Model)中被引入的模型 [1],显著晋升了码率控制精度。式中的 λ 是率失真优化中应用的拉格朗日乘子,放在下节作为拓展内容介绍。而 f(λ) 则是通过试验拟合失去的。比方 HM 中就是:
PART 03 MAD 值的获取与模型的更新
下面提到图像复杂度能够应用 MAD 来计算,然而以后帧的 MAD 值只能在编码后能力失去。这与 QP 须要在编码前确定这一点相矛盾。另外,在模型确定后,咱们还须要确定模型的更新形式及速率。通过进步模型系数的更新速率,能够使编码器的输入码率更加安稳;但绝对的,画面质量可能因为 QP 变动幅度过大而降落。
针对这些问题,不同的编码器抉择了不同的计划:
在 JM 中,应用了一个一阶线性模型依据过来帧的 MAD 来预测以后帧的对应值。而 RQ 模型的系数则间接通过以后帧的编码后果来反向计算失去。
在 OpenH264 和 x264 中,则放弃了 MAD 的计算,转而合并了
,把它作为一个整体来计算。
对于 R - λ 模型,其提出者也曾经设计了对应的更新公式和经验值供咱们参考[1]。
模型更新这部分内容,更多是工程实际上的考量,须要依据教训和测试状况一直调整。
拓展:λ 是什么
R- λ 模型中的 λ 是率失真优化中的一个系数。这里的率失真优化,指的是编码过程中的一个优化步骤。要具体解释它,咱们须要先理解率失真实践。它起源于香农的钻研[2],大抵能够概括为:在给定的信源散布以及可承受的失真度 D 下,求信息数据量 R 的实践最小值。显然,可承受的 D 越大,其对应的 R 也就越小。这个 R - D 的关系边界,咱们称为率失真曲线,即下图中的红线[3]。旁边的绿线则是编码器理论工作区域的边界,它和理论值存在肯定差距。
R- D 曲线
视频编码标准提供了大量的工具集,或者说编码模式,它们就相当于上图的绿点。在它们之中抉择一个失当的来应用是一件比较复杂的事件。留神到这个问题实质是一个数学最优化问题,所以能够利用拉格朗日乘数法的离散模式来解决它。简略地说,引入一个拉格朗日乘子 λ,构建代价函数,再去求取代价函数的最小值即可:
艰深地了解,λ 就相当于失真与码率的权值。给定了 λ,也就给定了一个断定模式好坏的规范。如下图所示,求代价函数最小值,相当于求斜率为 λ 的直线与 R - D 曲线的切点。在编码过程中,不论是模式抉择,还是静止矢量的比拟,都会利用到这个办法。
拉格朗日乘子 R - D 曲线斜率
R- λ 模型的提出者首先依据试验数据提出 R - D 曲线能够近似拟合为一条双曲线,再依据 λ 是 R - D 曲线斜率这一点,求得了 R - λ 模型:
PART 04 码率管制优化算法
上文介绍的内容,属于码率管制外围算法,其目标仅为管制输入码率,使其尽可能地靠近指标。但在理论利用中,咱们并不需要这么严格地执行。在输入码率根本满足要求的前提下,咱们仍然有肯定的调整空间来改善画面质量。下文将介绍几种这方面的算法。
Adaptive-Quantization
因为人眼对不同类型的画面的细节感知水平是不同的,所以给不同画面内容给予雷同的权重来调配码率实际上是比拟节约的。比方高速静止的物体就能够绝对动态物体含糊一点。在这方面做文章的算法个别归类为基于感知的码率控制算法。而其中一类比较简单且应用宽泛的算法,叫做 Adaptive Quantization(AQ)。简略来说,它利用图像的方差或其余相似特色来掂量以后宏块的复杂度,对于内容较简单的宏块,算法认为能够适当舍弃其细节,所以增大其 QP;而简略的宏块则反之。通过这种调整,视频的主观品质能失去大幅晋升。现在很多编码器都实现了 AQ,比方 x264 的实现如下所示。计算失去的 qp_adj 即 QP 偏移量,会叠加到 R - Q 模型计算出来的 QP 上:
// x264 的 AQ 外围实现。ac_energy_mb 计算宏块像素值方差。strength 代表 AQ 强度,由用户配置。
uint32_t energy = ac_energy_mb(h, mb_x, mb_y, frame);
qp_adj = strength (x264_log2( X264_MAX(energy, 1) ) – (14.427f + 2(BIT_DEPTH-8)));
利用人眼感知能力的码率控制算法还有很多,比方基于最小可发觉误差 (JND, Just Noticeable Distortion) 的,或者基于机器学习的,这里不再开展。值得一提的是,因为是针对主观视觉体验的优化算法,通过 PSNR 等主观伎俩测试往往无奈体现这些算法的劣势。
MB-Tree
MB-Tree 是由 x264 的开发者提出的算法,它的根本思维是:因为视频数据在编码时存在依赖关系,被参考的数据的失真水平间接影响到后续的预测精度,所以依据依赖关系给予不同画面不同码率权重能够从整体上晋升画面质量。
MB-Tree 的实现依赖于 x264 外部的 lookahead 构造。所谓的 lookahead,是一种预编码模块。它会应用通过下采样的低分辨率图像事后对视频进行一轮编码(这种预编码只进行到 SATD 的计算),并缓存大量有用的信息供后续正式编码应用。咱们在应用 x264 编码视频时,常常会看到 -lookahead 参数,它示意预编码的帧数,减少这个值利于晋升编码品质,然而会减少编码时延。
有了 lookahead 缓存下来的信息,咱们就能够从最初一帧开始,逐帧回溯每个 MB 的依赖性,或者说重要性,再依据这个重要性计算 QP 的偏移量。MB-Tree 的原理十分有特色,如果读者对细节感兴趣,举荐浏览 x264 开发者的文章[4]。
PART 05 总结
本文概述了码率控制算法的根本思维和原理,而理论的代码实现,往往是和利用场景高度相干的。开发者不仅须要关注编码器自身,还要联合网络 QoS 和视频特色等因素综合考量。并且,优良的码率管制模块也不太可能是欲速不达的。不论是画面质量与码率平稳性的取舍,还是参数默认值的配置,都须要通过测试来一直调优。
参考文献
[1] JCTVC-K0103
[2] C.E. Shannon, Coding theorems for a discrete source with a fidelity criterion, in IRENational Conventwn Record, Part4, pp. 142-163, 1959.
[3] A. Ortega; K. Ramchandran, Rate-distortion methods for image and video compression, IEEE Signal Processing Magazine, Volume: 15, Issue: 6, Nov 1998.
[4] Garrett-Glaser J. A novel macroblock-tree algorithm for high-performance optimization of dependent video coding in H.264/AVC[J]. Tech. Rep., 2009.