参考资料:
[1]万帅,杨付正编著. 新一代高效视频编码H.265/HEVC 原理、标准与实现[M]. 北京:电子工业出版社, 2014.12.
上一章:HEVC率失真优化
码率控制概述
码率控制的主要工作是建立编码速率R与量化参数QP的关系,公式化描述为:
Q ∗ = ( Q 1 ∗ , ⋯ , Q N ∗ ) = a r g m i n ( Q 1 , ⋯ , Q N ) ∑ i = 1 N D i s . t . ∑ i = 1 N R i ≤ R c (1) Q^* = (Q^*_1,\dotsb,Q^*_N)=argmin_{(Q_1,\dotsb,Q_N)}\sum_{i=1}^{N}{D_i} \,\,\,\,\, s.t.\sum_{i=1}^{N}{R_i} \leq R_c \tag{1} Q∗=(Q1∗,⋯,QN∗)=argmin(Q1,⋯,QN)i=1∑NDis.t.i=1∑NRi≤Rc(1)
码率控制算法组成
- 比特分配:依据视频内容、缓冲区状态、信道带宽为每个编码单元(GOP、帧、CTU)分配最优的目标比特数。HEVC多种预测技术的采用使得不同编码单元间具有高度相关性,需要在该部分着重考虑。
- 量化参数确定:依据码率R-量化参数QP模型为每个编码单元选择最优编码参数QP。QP选择受其他参数影响较小,但其采用的模型高度依赖于视频内容特征。
缓冲区模型
缓冲区用于平衡编码器输出码率和信道速率。缓冲越大,适应信源、信道码率波动的性能越好,但相应地会引入较大延迟。
缓冲区采用流体流量模型建模:
B c ( n + 1 ) = m a x { 0 , B c ( n ) + A ( n ) − u ( n ) } (2) B_c(n+1) = max \lbrace 0 , B_c(n)+A(n)-u(n) \rbrace \tag{2} Bc(n+1)=max{
0,Bc(n)+A(n)−u(n)}(2)
其中:
- B c ( n ) B_c(n) Bc(n)为第n时刻缓冲区占用
- A ( n ) A(n) A(n)为第n时刻编码器输出码率
- u ( n ) u(n) u(n)为第n时刻信道速率
目标比特分配概述
该部分给出码率控制算法理论上的指导思想,而非具体实现。
码率控制算法需要作用于不同层级依次分配比特。HEVC中层级的顺序为:GOP-Frame-CTU。
图像层目标比特分配
由于HEVC中采用了复杂的时域参考关系,因此当前图像的编码比特数分配依赖于其参考的图像。该部分详细推导见[1]第12章,这里只给出结论:
假设已编码的图像失真确定后,当前编码图像的失真D只与其比特数R有关。(拓展:该问题具有马尔可夫性?)
假设变换系数服从参数为α的拉普拉斯分布:
p ( x ) = α 2 e ( − α ∣ x ∣ ) p(x)=\frac{\alpha}{2}e^{(-\alpha|x|)} p(x)=2αe(−α∣x∣)
其中:α反映视频内容特性
定义失真度为绝对误差,得率失真函数:
R ( D ) = { l n ( 1 α D ) , 0 < D ≤ 1 α 0 , o t h e r R(D) = \begin{cases} ln(\frac{1}{\alpha D}), & 0<D\leq\frac{1}{\alpha} \\ 0, & other \end{cases} R(D)={
ln(αD1),0,0<D≤α1other
根据[1]中描述的依赖关系:
∂ D i ∂ R i = − λ ω i \frac{\partial D_i}{\partial R_i} = -\frac{\lambda}{\omega_i} ∂Ri∂Di=−ωi