前言
在HM中R-λ的码率控制引入是在k0103提案中开始引入的,代码是HM-8.0以后的版本出现的,后面经过多个提案不断的修改,如M0257提案,M0036提案等;笔者建议研究HM代码的R-λ码率控制从HM10.0版本开始这个版本的R-λ已经存在且bug比较少。
一、R-λ model介绍
1、R-D model介绍
在了解R-λ model前建议先了解下R-D model,因为R-λ model是根据R-D model推导而来。
指数形式的R-D函数:
双曲线形式的R-D函数 :
C和K是和输入图像特征相关的模型参数,D是亮度分量的MSE(Mean Square Error);
如下图指数形式的R-D(虚线)和双曲线形式的R-D(实线)在不同视频上的测试结果,可以看出双曲线的平均相关系数大于0.99,指数形式的平均相关系数仅为0.92左右。可以看出对于 H265,双曲线模型在表征 R-D 关系方面优于指数模型。
上图中bpp为每个像素的bits数,计算公式如下:
R是目标码率,f为帧率,w和h为图像宽高;
MSE的计算公式如下:
N为图像的总像素数,rec和org分别是重建像素和原始像素;
2、R-λ model的来源
λ 作为 双曲线R-D model曲线的斜率,公式如下:
α 和β 是和输入图像特征相关的模型参数。
下图是λ和bpp在不同视频上的特征曲线。
二、基于R-λ 的码率控制介绍
1、HM中Seq(序列)级码率控制
序列级码率控制的公式:
是全部图像序列预计bits,是剩余未编码的bits,N是待编码的帧数,是编码的目标码率(bits) ;
是以及编码的bits,是已经编码的帧数。
此外每一帧的平均bits公式为:
2、GOP级码率控制
GOP级码率控制的公式:
是已经编码的图像个数,SW为平滑窗口大小,为编码的bit代价。
是当前GOP的目标码率,是当前GOP的大小。
3、图像级码率控制
图像级码率控制的公式:
ωi是当前GOP中每个图片的比特分配权重。低延迟(gop为4)中不同图片的权重分配如下表:
根据不同的权重可以给不同帧分配不同的bits,实际编码出来的帧大小如下图所示:
如果是帧内图像则乘一个系数放大目标码率,系数如下表:
非低延迟场景下的权重分配如下:
非低延迟场景下的I帧bits放大系数如下:
4、宏块级码率控制
当前宏块的目标码率
是编码帧头bit数如sliceHeader等,通过前一个同级别已经编码帧估计来的。ωi是当前图像中每个宏块的比特分配权重,根据MAD预测的来。
5、QP的计算公式
6、α 和β 参数的更新
其中δα = 0.1, δβ= 0.05。
7、QP范围限制
帧级QP的限制。
宏块级QP限制 。
三、R-λ的改进
1、M0257-帧级码率控制的改进
在M0257提案提出了一种帧内码率控制方案。在R-λ关系上进一步加入了复杂度C的影响。
帧级λ改进前:
帧级λ改进后:
复杂度C基于SATD来度量,SATD是将Hadamard变换应用于原始8×8块后获得的系数绝对值之和。
2、M0257-宏块级码率控制的改进
M0257提案提出了一种帧内码率控制方案。在R-λ关系上进一步加入了复杂度C的影响。宏块级码控的改进-宏块bit分配权重:
当前帧剩余可分配bit:
是当前剩余码率,是计算后新的剩余码率,M当前帧总的宏块数,W为平滑窗口数。
当前宏块的目标码率计算公式为:
3、 M0036-帧级码率控制的改进
通过提出一种求解数值方程的方法解出当前帧的权重,不同的帧不同的权重,不同的权重不同的bits分配。
上式表明所有帧分配的bits总和应该等于GOP的目标bits数。 λ之间的比值如下公式:
HM中对应的代码如下:
上面的代码主要作用是利用前一帧的lambda来计算新GOP中每个帧的bits分配的权重, 以及为新GOP中每个帧与分配一个初始目标码率(bits) 。然后根据GOP中每一个帧的bit权重计算当前帧的目标码率(bits),代码如下:
4、 M0036-宏块级码率控制的改进
和帧级一样M0036也有为宏块码率控制进行改进,为当前帧中每一个宏块与分配一个初始化bits权重,代码如下:
根据每个宏块的权重来计算每个宏块的目标bits和bpp,代码如下:
最后:
R-λ model还在改进中,新的HM会有新的改进提案,这里就不再记录。