视频传输带宽通常都会受到一定的限制,为了在满足通信带宽和传输时延限制的情况下有效传输视频数据,保证视频业务的播放质量,需要对视频编码过程进行速率控制,所谓速率控制,就是通过选择一系列编码失真尽量小,速率控制属于码率失真优化的范畴,速率控制算法的重点是确定于速率相关的量化参数Quantization Parameter,QP ,其他编码参数优化方法已经介绍过了。
一 视频编码速率控制
前面详细剖析了视频编码的码率失真特性,同一视频不同的编码参数将产生不同的编码速率和视频质量。因此,可以通过调节编码参数使得编码速率与目标速率一致,以达到速率控制的目的。在码率失真优化准则下确定的编码参数中,视频编码速率主要与量化参数密切相关,并遵循一定的规律,速率控制的主要工作是建立编码速率与量化参数的关系模型,根据目标码率确定视频编码参数中的量化参数。
基于前面的码率失真优化知识,一个视频序列的速率控制问题可以描述为,在总编码比特数小于或者等于Rc的条件下,为每一个编码单元确定最优的量化参数,使得总失真最小,即。
Q = arg.min sigmaDi
以图像作为编码单元为例,其中N为该序列包含的图像数,Di为第i幅图像的失真,Q = Q1,,,Qn 为各图像的最优量化参数,实际视频编码标准中拥有独立量化参数的最小单位通常是宏块(H265/HEVC为CU),如果允许控制宏块级的量化参数,速率控制就需要确定所有宏块的最优量化参数。另外,对于变速率的情形,可能需要控制每个编码单元使其满足一定的编码比特限制。
Q = arg.min sigmaDi。 s.t.Ri <= Rj,c
其中 Rj,c 为第i个编码单元的编码比特数限制。
由于视频编码算法采用了大量的帧内,帧间预测技术,导致编码单元的码率失真性能相互依赖,直接根据式子利用码率失真优化技术确定编码单元的量化参数复杂度更高,这在前面已经介绍过。因此,实际的速率控制方案通常会被分解为两个步骤。
(1)考虑视频在空域,时域的相关性,根据总的目标比特数确定每个编码单元的最优目标比特数,这被称为比特分配。
(2)依据编码速率与量化参数的关系模型,为每个编码单元根据其目标比特独立确定量化参数。
比特分配的目的是为每个编码单元分配最优的目标比特数,使得视频编码后总的失真最小,即利用码率失真优化技术为每个编码单元分配目标比特数,可以描述为。
Rt = (Rt,,,Rn) = arg.min sigmaDi
由于各比那吗单元的码率失真性能相互依赖,因此该步骤的关键是考虑各编码单元之间码率失真性能的相关性,实现最优比特分配。
当每个编码单元的目标比特数确定后,速率控制的第二步骤即为,根据每个编码单元的目标比特数独立确定其量化参数,可以描述为
Qi = arg.min Di
由于编码单元的编码速率主要与量化参数相关,其他编码参数的影响较小,因此编码速率与量化参数有着较为确定的关系,可以基于这一关系直接根据编码单元的目标比特数确定其量化参数。
这一环节需要强调的是,编码速率和量化参数的关系与视频的内容特性密切相关,图12.1 给出了视频序列BQSquare采用HM10.0测试模型得到的编码速率,采用低延时模型,每一幅图像使用的相同的量化参数32,GOP大小为4。从图12.1可以看出,在量化参数保持不变的情况下,编码速率随着编码时间的变化而变化,在第3-4秒之间,编码比特数迅速增加,这是因为视频序列发生了场景切换,时域复杂度较高,而在4-7秒内,编码比特数下降,这是因为这段视频内容的时域和空域复杂度较低,一般来说,当量化参数一定时,视频序列空,时域复杂度越高,产生的编码比特数也越高,反之,则会产生较少的编码比特数,编码速率将会随着视频内容的变化而不断变化。
