郭红伟 刘 帅
1(红河学院工学院 云南 蒙自 661100)2(电子科技大学信息与通信工程学院 四川 成都 611731)
高效视频编码HEVC(High Efficiency Video Coding)是ISO-IEC/MPEG和ITU-T/VCEG两大国际标准化组织联合制定的新一代视频编码标准[1],其基准档次已于2013年1月正式发布。尽管其沿用了传统视频编码标准的混合视频编码基本框架,但在各个编码模块上都进行了改进和革新。编码的视频在同等主观质量情况下,HEVC相比于上一代编码标准H.264/AVC节省约一半的码率。在视频编码的研究过程中,通常是事先设定量化参数QP进行编码,根据编码器输出对各种编码工具和编码优化技术进行定量分析比较。而在实际应用中,要根据存储设备可提供的存储空间、传输信道可提供的传输带宽及传输延迟的限制等设定编码器的输出码率。所以实际应用中的编码器必须包含码率控制模块,每一代视频编码标准的制定过程中都推荐了相应的码率控制算法[2]。
HEVC标准制定过程中主要推荐了两种码率控制算法,即URQ(Unified Rate-Quantization)模型码率控制算法[3]和R-λ模型码率控制算法[4]。URQ模型是最早被采纳进HEVC通用测试软件HM的码率控制算法,其利用已有带宽、帧率、编码结构、图像组GOP大小等相关参数确定各个GOP、编码帧、最大编码单元LCU的目标比特数。然后通过URQ模型计算编码帧或LCU级的量化参数QP进行编码。该算法的最终效果不太理想,通常编码后生成的码率与给定的目标码率之间误差较大,且编码视频的质量明显下降。文献[4]提出双曲模型能最好地描述HEVC编码器的率失真关系。并基于双曲模型设计了全新的Lambda域码率控制算法,在码率控制精度和率失真性能上都较URQ模型码率控制有较大提高。HEVC标准发布后,针对HEVC标准实际应用的优化和码率控制持续成为研究关注的重点,已有许多改进的码率控制算法被提出[5-10]。文献[5]利用梯度来表征待编码帧的复杂度,在R-λ模型框架下提出基于复杂度分析的Intra帧码率控制算法。针对会话通信视频编码,文献[6]根据视觉感兴趣区域提出改善主观编码质量的码率控制算法。由于视频场景切换时常引起码率和编码质量的激烈波动,文献[7]提出在场景切换发生时对码率控制的参数以及编码结构做出相应调整,以改善R-λ模型码率控制算法的性能。为了减小因码率控制引起的输出视频质量波动,文献[8]提出恒定视频质量的码率控制。然而,以上改进方法在率失真性能方面的提升都比较有限。为了在实施码率控制的同时获得更好的编码器率失真性能,文献[9-11]从全局率失真最优化视角,提出R-λ模型下的最优比特分配方法。目前,测试软件HM中集成的码率控制算法是文献[4]与文献[9]相结合的方法。
针对HEVC的低延时编码结构,本文提出一种Lambda域的三层(控制单元层、GOP层、帧层)码率控制算法。相比较测试软件HM中两层(GOP层、帧层)的码率控制,本文算法在码率控制精度和率失真性能两个方面都有显著提高;相比较测试软件HM中三层(GOP层、帧层、LCU层)的码率控制,本文算法在码率控制精度上略有降低,但极大地改善了编码器的率失真性能。
码率控制通常包括两个步骤:比特分配和比特率控制。比特分配过程是根据缓存器充盈度和视频序列特性为每一个GOP、待编码帧或待编码基本单元分配适当的目标比特;比特率控制过程是利用码率模型根据目标比特计算量化参数进行编码,使编码器输出比特数尽可能等于预先分配的目标比特。
视频编码中,量化参数QP直接决定预测残差的编码比特数,是影响编码器输出码率的主要参数。编码同一视频序列时,QP设置越大,则输出码率越小;反之,QP设置越小,则输出码率越大。然而,由于HEVC采用灵活的四叉树CU和TU划分结构及其他越来越复杂的编码工具,码流中模式和运动等非残差信息所占比特开销越来越大,而量化仅对残差信息有效。因此在HEVC中建立QP与码率R的模型进行比特控制不够精确。根据视频编码的率失真理论,拉格朗日乘子λ是编码视频率失真曲线上某一点的切线的斜率的绝对值。理论上每一个拉格朗日乘子唯一的对应一组码率和失真,能极好地用于控制编码比特数。
文献[4]提出,在HEVC编码标准中双曲函数形式的率失真函数能较好地描述编码器率失真特性,即:
D(R)=CR-K
(1)
式中:D是编码失真,用均方误差MSE(Mean Square Error)表示;R是编码比特数,用每像素消耗比特bpp(bits per pixel)表示;C和K是与序列特性相关的模型参数。如前文所述,拉格朗日乘子λ是R-D曲线的斜率的绝对值,由式(1)得:
(2)
式中:α和β是与序列内容和编码结构相关的参数,初始值设为3.200 3和-1.367,编码过程中,根据已编码帧的信息进行更新。
获得拉格朗日乘子λ后,计算量化参数QP进行编码:
QP=4.200 5×ln(λ)+13.712 2
(3)
HEVC推荐的R-λ模型码率控制方法可执行在帧级或LCU级,设目标码率为、帧率为,则平均每帧可用的比特数表示为:
(4)
分配给待编码GOP的目标比特数如下:
(5)
式中:SW是用于平滑比特分配的滑动窗。
当前GOP中分配给待编码帧的目标比特数如下:
(6)
式中:ωPic表示编码帧比特分配权重;CodedGOP表示编码当前GOP已消耗的比特数。
测试软件HM中帧层的比特分配有三种可选方式,即等比特分配、固定比率的比特分配和自适应比特分配。其中:等比特分配时,GOP中每一帧的比特分配权重相等;固定比率比特分配时,根据帧级的目标bpp和编码结构,GOP中每一帧的比特分配权重为某一固定比例值。由文献[9]提出的自适应比特分配方式则根据帧级的目标bpp、编码结构和待编码帧的特性自适应调整每一个GOP中帧级的比特分配权重,其码率控制精度和编码性能是三种比特分配中最好的。
针对不同视频业务的应用,HEVC编码器的编码配置可选择全I帧AI(All-intra)结构、低延时LD(Low-delay)结构、随机介入RA(Random-access)结构。由于不同编码配置具有不同的编码参考结构,相应的码率控制应充分考虑其率失真依赖性,使码率控制下的编码视频失真最小。本文讨论低延时编码配置下的码率控制。
如图1所示,HEVC的低延时编码结构中,GOP的大小默认设置为4,序列起始帧编码为I帧,并被作为一个单独的GOP处理,其余GOP中为B/P帧,帧的层级为3、2、3、1,其中层级为1的帧称为关键帧。图1中的箭头表示参考关系,在分级编码结构中,当前编码帧会选择其前一已编码帧和其他最邻近的3个已编码关键帧作为参考帧。然而,编码刚开始时由于可参考的已编码帧数不足4帧,起始帧后的第一个GOP中非关键帧(层级为2和3的帧)将被3次作为参考帧,第二个GOP中的非关键帧会被2次作为参考帧,之后的GOP中的非关键帧则只会被其后一帧参考1次。因此,从编码中时域失真传播的视角考虑,改善视频起始帧和前两个GOP中编码帧的编码质量,将有利于提高编码视频的整体率失真性能。
图1 低延时编码结构
编码过程中,由于编码帧复杂度及参考结构的变化,每一编码帧的R-λ模型参数(α和β)并不相同。在编码下一帧前还不能得到它的率失真关系,R-λ码率控制算法中[4,9],待编码帧的R-λ模型参数采用与其属于同一层级且最邻近的已编码帧信息进行估算。由于传统方法的模型参数更新只利用了已编码帧的实际编码比特Rreal和拉格朗日乘子λreal,其参数更新的收敛速度和准确度都不够理想,从而影响了码率控制的性能。实际上,编码完一帧后,可以获得已编码帧的信息包括实际编码比特Rreal、拉格朗日乘子λreal还有编码失真Dreal。鉴于此,由式(1)、式(2)的R-D函数和R-λ函数可直接推导得更新后的R-D模型参数为:
(7)
(8)
然后,R-λ模型参数αnew=Cnew·Knew、βnew=-Knew-1。
通常码率控制由GOP层、帧层和基本单元层的比特控制组成,基本单元层的比特控制是为了达到更高的比特控制精度。然而由于基本单元层的码率模型参数的估计误差较大,编码过程中经常由于图像中前面编码的基本单元消耗太多比特使后面编码的基本单元预算不足,导致编码帧质量下降,影响了整个视频序列的编码质量。因此,本文的码率控制算法不使用基本单元层的比特控制。本文码率控制算法采用控制单元层、GOP层和帧层的比特率控制。为了便于描述,表1列出本节中所使用的符号及其含义。
表1 算法描述采用的符号及其含义
续表1
编码起始帧后,视频剩余序列被划分为多个连续的控制单元,一个控制单元大小约为视频一秒钟的帧数。用CW表示控制单元大小,则:
CW=FR%NGOP==0?FR:(FR/NGOP)×NGOP
(9)
式(9)使控制单元大小等于GOP大小的整数倍,用了程序语言表述。控制单元层和GOP层的比特分配如下:
(10)
(11)
编码完一个控制单元后,其比特消耗误差会加到下一个控制单元,从而使编码整个序列的比特等于预算的总比特。若为第一个控制单元,则RLeftPreCW等于0;若为最后一个控制单元,则CW=min{CW,NLeft}。由于编码一个GOP消耗的实际比特不可能恰好等于预算值,若采用和控制单元层一样的方式直接把已编码GOP的比特消耗误差加到下一个GOP的比特预算,会使GOP级比特出现较大波动。因此,式(11)中的滑动窗SW用于平滑GOP层比特分配,使得编码比特消耗变化和编码图片的质量更加平滑。本文算法中,SW设置为16,且SW=min{SW,NCWLeft}。帧层的比特分配方式采用文献[9]的自适应比特分配方法,当前GOP中各帧的比特分配权重ωPic由上一已编码GOP的编码信息计算得到,但本文算法中使用了2.2节描述的改进R-λ模型。待编码帧的目标比特由编码当前GOP前预分配的目标比特和编码前一帧后预分配的目标比特加权确定:
TPic=θ×TAPic+(1-θ)×TBPicθ∈[0,1]
(12)
式中:
(13)
(14)
控制单元内剩余未编码帧NCWLeft多于8帧时,式(12)中常数θ取值为0.5;当NCWLeft小于或等于8帧时,取值为1。
算法流程如图2所示。
图2 算法流程图
具体的步骤描述为:
(1) 读取编码器配置文件及输入视频序列,并对码率控制参数初始化。
(2) 编码视频序列起始帧。
(3) 由式(10)进行控制单元层比特分配,并初始化控制单元层参数NCWcoded=0,CodedCW=0。
(4) 由式(11)进行GOP层比特分配,采用改进的R-λ模型和文献[9]的方法确定GOP中各帧的比特分配权重ωPic,根据式(14)预分配编码前GOP中各帧目标比特,初始化GOP层参数使CodedGOP=0。
(5) 由式(12)、式(13) 进行帧层比特分配。
(6) 由式(2)计算待编码帧的拉格朗日乘子λ,由式(3) 计算待编码帧的量化参数QP。
(7) 编码一帧,并根据式(7)、式(8)更新R-λ模型参数,更新GOP层参数CodedGOP=CodedGOP+RActPic。
(8) 判断已编码帧是否是GOP中最后一帧,若不是则跳转至步骤(5);若是则跳转至步骤(9)。
(9) 更新控制单元层参数NCWcoded=NCWcoded+NGOP,CodedCW=CodedCW+RActGOP。
(10) 判断已编码GOP是否是控制单元中最后一个GOP,若不是则跳转至步骤(4);若是则跳转至步骤(11)。
(11) 判断已编码控制单元是否是序列中最后一个控制单元,若不是则计算控制单元比特误差RLeftPreCW=TCW-RActCW,并跳转至步骤(3);若是则跳转至步骤(12)。
(12) 编码结束。
将本文码率控制算法集成到HEVC编码器的参考软件HM16.7 中,以验证算法的性能。测试选用提案JCTVC-L1100[12]建议的ClassB、ClassC、ClassD、ClassE中全部16个视频序列,编码器配置文件采用encoder_lowdelay_main.cfg。参考软件HM16.7在不开启码率控制情况下,以固定量化参数QP等于37、32、27、22编码各测试序列,每个被编码测试序列输出从低到高的4个码率作为码率控制实验的目标码率。
码率控制的目标是要使编码器输出码率近似等于目标码率情况下,编码视频失真最小。所以码率精确性和率失真性能是评价码率控制的两个主要性能指标。码率精确性用码率相对误差描述,定义为:
(15)
式中:Rtar是目标码率;Ract是实际编码码率;RErr越小,表示码率控制精确性越好。本实验比较的算法是HM16.7中采用自适应比特分配的R-λ码率控制算法[9]。其中:不开启LCU层比特控制记作HEVC帧层率控;开启LCU层比特控制时记作HEVC LCU层率控。
表2给出了从4种不同的分辨率中选取的4个测试视频序列在3种码率控制方法下的实验数据,表中第4列、第7列和第10列分别是3种算法编码视频Y分量的PSNR值。在相同目标码率下,本文算法编码视频的PSNR最大。另外,本文算法的平均码率误差是0.054%,低于HEVC LCU层率控的平均码率误差0.075%和HEVC帧层率控的平均码率误差0.127%。
表2 3种码率控制算法的实验结果
为了公平地比较算法的率失真性能,以不开启码率控制的HM16.7为基准,计算三种码率控制算法的BD-Rate。BD-Rate表示在同样的客观质量下,测试算法相对于基准的码率节省,BD-Rate值为负,则说明码率节省;BD-Rate值为正,则说明码率增加。由于篇幅所限,这里不单独列出16个序列的测试结果,表3给出了ClassB、ClassC、ClassD、ClassE数据平均值。HEVC 帧层率控的平均BD-Rate为0.3%,小于HEVC LCU层率控的0.6%,这与前文所述一致。LCU层比特控制能达到更高的码率控制精度,但降低了编码器率失真性能。本文算法对ClassB、ClassC、ClassD、ClassE的BD-Rate均是负值,平均为-2.6%,说明本文算法的率失真性能不仅优于HEVC帧层率控和HEVC LCU层率控,而且还优于不开启码率控制时的HM16.7。码率控制精确性方面,本文算法和HEVC LCU层率控的平均码率相对误差均小于0.1%,而HEVC帧层率控的平均码率相对误差是0.185%。
表3 码率控制算法的性能比较 %
另外,图3中是测试序列Kimono和 Johnny的R-D曲线。可以看到,本文算法从低码率到高码率均具有最好的率失真性能。
(a) Kimono(1080p)
(b) Johnny(720p)图3 率失真曲线对比
图4给出了测试序列Cactus前100帧GOP编码比特和编码帧PSNR的比较。本文算法和HEVC帧层率控对序列起始帧的编码策略一致,故两种方法编码的第0 GOP或第0帧消耗比特数和PSNR相同。然而,HEVC帧层率控对前几个GOP分配较少的比特,致使其编码帧PSNR急剧下降,造成较大的时域质量波动。本文算法考虑了低延时编码结构中前两个GOP编码质量对后续编码帧具有更重要的率失真依赖性,从而为其分配了相对较多的比特,不仅提高了编码视频的率失真性能,同时减小了编码视频的时域质量波动。
图4 序列Cactus前100帧GOP的编码比特和编码帧的PSNR
码率控制作为视频编码控制中的重要环节,是编码器不可缺少的组成部分,合理有效的码率控制方法能够在保证视频质量的同时提高信道的利用率或满足存储需求。本文首先回顾了HEVC推荐的基于R-λ模型码率控制算法,然后提出一种HEVC低延时编码码率控制算法。本文算法在比特分配过程中充分考虑了低延时编码结构的时域率失真依赖关系,并采用控制单元层、GOP层和帧层的比特控制策略,R-λ模型的参数更新利用了已编码帧的实际比特、拉格朗日乘子和编码失真等信息。控制单元层的比特控制通过调整下一个控制单元的目标比特数来填补已编码控制单元的比特误差,从而使视频的实际编码码率近似等于目标码率。实验结果证明,本文算法在码率精度和R-D性能方面都取得了较好的效果。