购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.4.3 H.264的码率控制

如前所述,在H.264中,同时把量化参数QP用于率失真优化(RDO)的模式选择和码率控制(RC),导致了“蛋鸡悖论”,或QP悖论:要进行有效的RC,需要知道平均绝对残差(Mean Absolute Difference,MAD),而获得实际残差需要进行RDO模式选择,RDO需要有实际QP数值的支持,实际QP只有在RC后才能得到。它们之间的循环依赖关系如图2.9所示。

为了克服这一矛盾,H.264发布了众多的码率控制提案,其中JVT-G012和JVT-O016具有一定的代表性。JVT-G012提案是一种自适应基本单元(Basic Unit,BU)层码率控制算法,采用线性MAD预测模型来解决蛋鸡悖论,根据流量传输模型为每个基本单元(BU)分配目标比特,并采用二次率失真模型计算QP,获得了较好的控制效果。JVT-O016提案在JVTG012的基础上进一步挖掘视频序列的时空相关性,在目标比特分配、头码率预测和二次率失真模型方面都提出了更好的改进,下面分别予以说明。

img

图2.9 H.264码率控制的蛋鸡悖论

1.JVT-G012码率控制算法

JVT-G012算法引入BU的概念,用线性模型根据前一帧相同位置BU的MAD值来预测当前BU的MAD值,以此解决蛋鸡悖论。BU是一组连续的MB,MB数目是总MB数的约数,因此BU最大可以是一帧图像,最小可以是一个MB。使用较大的BU,会得到较高的PSNR,但码率波动也较大;反之,使用较小的BU,码率波动会减小,但会造成PSNR的轻微下降。JVT-G012具体的控制过程分为3层:GOP层、帧层和BU层,可同时适用于VBR与CBR的情况。

1)GOP层码率控制

GOP层码率控制完成整个GOP目标码率的分配及每帧编码完成后剩余比特数的更新,并确定GOP的初始量化参数QP。初始QP用来编码当前GOP的I帧和第一个P帧。在第 i 个GOP开始编码时,其分配的总比特数 T r

img

(2.42)

式中, n i ,0 表示第 i 个GOP第0帧; u ( n i ,1 )是第 i 个GOP第1帧编码时的码率; F r 是预定义帧率; N GOP 是GOP中的总帧数; B s 是缓冲区大小; 是前一个GOP编码完成后缓冲区的实际充满度。可见后面GOP的编码过程依赖于之前GOP的编码结果,为保证每个GOP有一致的视频质量,每个GOP应正好使用其分配的比特,即每个GOP编码完成后,缓冲区充满度应保持在 B s /8。因为信道带宽可能是时变的,剩余比特数应在每帧编码后更新:

img

(2.43)

式中, A ( n i , j -1 )表示第 i 个GOP中第 j -1帧编码产生的比特数。在CBR时, u ( n i , j )= u ( n i , j -1 ),因此上式可简化为

img

(2.44)

初始QP的计算:第一个GOP的初始QP可以任意指定,或由信道带宽和帧率计算每像素比特数(bits per pixel,bpp)得到,即:

img

(2.45)

式中,bpp表示某个像素可获得的比特数,可由 计算; N pixel 是一帧中的总像素数; l 1 l 2 l 3 由图像大小预先确定。其他GOP的初始QP由下式确定:

img

(2.46)

式中, N p 是前一个GOP的P帧数目,Sum PQP 是前一个GOP所有P帧QP之和。

2)帧层码率控制

帧层码率控制分为两个阶段,前编码阶段与后编码阶段。

(1)前编码阶段。这一阶段为各帧计算QP,帧类型不同,计算方法也不同。由于B帧不用作参考帧,其QP由相邻P帧的QP通过简单的线性插值得到。而P帧用作参考帧,其QP需要精确计算。

这里仅讨论两个P帧之间没有B帧的情况,则P帧的目标缓冲水平(buffer level)为:

img

(2.47)

由线性回归理论,第 i 个GOP的第 j 个P帧的目标比特可根据信道带宽、帧率、目标缓冲水平和实际缓冲区充满度由下式确定:

img

(2.48)

式中, γ 是常数,在无B帧时为0.5,否则为0.25。注意,选取较大的 γ 值可以获得更严格的缓冲区调节。同时考虑GOP中可用的剩余比特数,即:

img

(2.49)

式中, N p,r ( j -1)表示当前GOP中未编码的P帧的数目。

最终P帧的目标比特是考虑缓冲区及剩余比特数的权重组合,即:

img

(2.50)

式中, β 是常数,典型值在无B帧时为0.5,否则为0.9。

计算出帧目标比特后,用线性模型根据前一帧的MAD值估计当前帧的MAD值,即:

img

(2.51)

然后由前面的二次率失真模型计算当前帧的QP。为了保证视频质量的连续性,此QP需要限定在前一P帧实际QP的±2之间,结果限定在[1,51]之间。最后用此QP为帧中所有MB进行RDO的模式选择,得到输出码流。

(2)后编码阶段。这一阶段主要任务有三个:更新线性预测模式中的参数、更新二次率失真模型参数和确定跳帧的数目。为避免缓冲区发生上溢,对缓冲区充满度进行判断,如果当前帧码流送入缓冲区后使得充满度超过了某个阈值(如80%),则跳过下一帧不编码。

3)BU层码率控制

当BU不是一帧时,就要进行BU层码率控制,它的作用是为帧中复杂度不同的BU选择合适的QP,以使帧中各BU的实际编码比特数之和尽量接近帧目标比特。与帧层码率控制类似,BU层码率控制也要进行目标比特分配、线性预测MAD值、用二次模型计算QP和编码后模型参数的更新。

2.JVT-O016码率控制算法

JVT-O016提案在JVT-G012的基础上,进一步利用MB编码的空间与时间相关性,减少了不相关历史数据点对模型参数更新带来的误差。JVT-O016的GOP层和帧层码率控制与JVT-G012相同,主要在MB层的头码率预测、码率-量化( R - Q )模型、失真-量化( D - Q )模型和编码复杂度预测这4个方面作了改进,得到了一种整帧范围内MB层最优的量化步长计算方法。在相同实验条件下,每帧PSNR比JVT-G012提高接近1dB,而且计算复杂度与JVT-G012相当,附加的存储需求较小,可以满足实时应用的需求。

1)头码率预测

由于H.264使用了更加复杂的编码模式来删除空时冗余,头信息码率(如MV、编码模式、QP等)在各MB之间波动较大,而且在总码率中占有较大的比率,这已经成为码率模型与RC中必须考虑的问题。考虑到时间相关性在视频序列中普遍存在,而空间相关性不一定存在,因此JVT-O016使用前一帧相同位置MB的实际头比特数来预测当前MB的头比特数,即

2)编码复杂度的预测

编码复杂度主要用来反映图像内容的特性,一般可用MAD或MSE来测量,JVT-O016仍使用线性模型来预测当前宏块的MAD值,但是模型参数的更新使用时间与空间相关性强的历史数据点,提高了MAD预测的准确性。

3)码率-量化模型

仍假设残差DCT系数服从Laplacian分布,并用 Q step 作为失真测量,用MAD表达图像复杂度,可得二次模型如下:

img

(2.52)

为了得到MB层最优 Q step 的闭式解,对上式在前一帧平均量化步长 作Tayler展开,得到如下形式的二次模型:

img

(2.53)

式中,

最终的第 i 个MB的码率模型为

img

(2.54)

4)失真-量化模型

考虑到 Q step 与DCT系数对失真都有影响,JVT-O016根据相邻帧MB失真的时间相关性提出一种线性的启发型失真模型,即:

img

(2.55)

整帧范围内的MB层最优 Q step 的求解可以用拉格朗日乘子法表示如下:

img

(2.56)

上式对变量求偏导数并置为0,得如下方程组:

img

(2.57)

通过求解上述方程组,可得每一MB最优 Q step 的闭式解 i =1,…, N 2F9UbNFpe96UNagzQ+OOo1bX7X0NAgQoRCVFGeoDLMskPnzfaAmAUqeqGmf3VCtK

点击中间区域
呼出菜单
上一章
目录
下一章
×