VVC中码率控制算法沿用了HEVC中经典的 R-λ码率控制模型, R-λ由中科大的李斌博士提出(详情参考
JCTVC-K0103
)。
R-λ模型的基础为视频编码中
R(比特 bpp)和
D(失真 MSE)之间的双曲线模型,即
D ( R ) = C R − K D(R) = CR^{-K} D(R)=CR−K
R-λ模型中λ是R-D曲线的斜率,对上式求导,可得
λ = − ∂ D ∂ R = C K ⋅ R − K − 1 ≜ α ⋅ R β \lambda=-\frac{\partial D}{\partial R} = CK\cdot R^{-K-1} \triangleq \alpha \cdot R^ \beta λ=−∂R∂D=CK⋅R−K−1≜α⋅Rβ
其中 α α α和 β β β是和视频内容相关的参数。
码率控制主要可分成两个步骤:
1. 首先是比特分配,即将序列目标比特以一定策略确定GOP、帧和LCU各级单元的目标编码比特。
2. 依据分配到的目标比特,通过调整编码单元的编码参数,以达到分配到的目标比特。
1. 比特分配
一般情况下,序列第一帧所需分配的比特需要特殊考虑,第一帧的质量会很大程度上影响后续的编码效率和质量。实际应用中,第一帧的编码参数会根据一些先验知识进行设定。编码第一帧所需比特由于缺乏必要先验信息很难预测,一般采取的策略即给第一帧多分配,以保证质量。
首先定义平均每帧比特
R p i c A v g = R t a r / F R R_{picAvg} = R_{tar} / FR RpicAvg=Rtar/FR
其中 R t a r R_{tar} Rtar为目标比特,FR为帧率。
1.1 GOP级比特分配
一般来说,每个GOP所分配的比特应该是一样的,但是由于实际编码的比特和目标比特总是有差异,GOP级比特分配引入滑动窗口SW来消除每个GOP的实际编码比特与目标比特的误差,每个GOP所分配的比特计算如下
T G O P = R p i c A v g ⋅ ( N c o d e d + S W ) − R c o d e d S W × N G O P T_{GOP} = \frac{R_{picAvg}\cdot (N_{coded} + SW) - R_{coded}}{SW} \times N_{GOP} TGOP=SWRpicAvg⋅(Ncoded+SW)−Rcoded×NGOP
公式写成这样可能比较不容易理解,换个表达如下
T G O P = T p i c A v g × N G O P T_{GOP} = T_{picAvg}\times N_{GOP} T