APP下载

一种改进的H.264帧层码率控制算法

2014-01-16胡建总王怡爽

江西理工大学学报 2014年1期
关键词:占用率码率缓冲区

吴 军,胡建总,谢 斌,王怡爽

(江西理工大学信息工程学院,江西 赣州341000)

一种改进的H.264帧层码率控制算法

吴 军,胡建总,谢 斌,王怡爽

(江西理工大学信息工程学院,江西 赣州341000)

针对H.264码率控制算法在缓冲区控制上的不足,提出一种改进的帧层码率控制算法.对缓冲区进行监视,根据已编码帧实际缓冲与目标缓冲占用率的情况进行量化参数的调整.当实际缓冲偏离目标缓冲较大时,适当增大或者减小量化参数,使编码后实际缓冲更接近目标缓冲,防止缓冲发生上溢或下溢.仿真结果表明,对于纹理简单的序列,改进的算法在PSNR几乎不变的情况下,得到了更精确的码率控制,实际缓冲更接近目标缓冲,缓冲区占有率更稳定.

H.264;码率控制;目标缓冲;量化参数

0引言

码率控制是视频编码中很重要的一部分.在各种视频压缩编码标准中,提出了相应的码率控制模型,如MPEG-2的TM5,H.263的TMN8以及MPEG-4的VM5.由于量化参数同时用在码率控制和率失真优化(RDO),在编码模式选择之前要有一个量化参数,量化参数的计算需在码率控制部分由平均绝对误差 (Mean Absolute Difference,MAD)计算得出,而MAD要在编码后才能得出,这样就导致一个鸡蛋悖论.码率控制就是解决在一定的编码资源下,如何按图像复杂度的不同分配适当的编码资源,使编码后在图像质量和缓冲区之间保持一个平衡,既要有合理的编码图像质量,又要合理控制缓冲区占用率(Buffer Occupancy),使缓冲区既不上溢也不下溢,减少编码延时.

H.264并没有规定码率控制的标准,不同的应用场合需要不同的码率控制方法,如针对快速运动场景和慢运动场景、场景切换、人眼视觉特性、前景区域和背景区域、B帧的存在情况等等.目前,针对H.264视频压缩编码标准,众多学者提出了相应的码率控制方案.其中经典的有马思伟博士提出的基于二次编码的码率控制提案JVT-F086[1],Li Z G等人提出的基于线性预测模型的分层码率控制提案JVT-G012[2],都取得了比较好的码率控制效果.除此之外,还有JVT-H016,JVT-W042等相应的码率控制提案.

大多针对码率控制算法的改进都是基于对图像复杂度的预测方法上,如文献[3]提出采用APIBP和PSNR的加权来预测图像复杂度;文献[4]采用BH(Block Histogram Difference)计算图像复杂度,取得了一定的效果;杨晓琴等人利用衡量图像复杂度[5-10]的方式作改进,并得到了一定的码率控制效果;Jiang M等人利用图像相对复杂度[11-12]对其进行比特分配,从而得到更精确的帧层和基本单元层码率控制.

本文针对缓区控制的不足,对其进行改进.首先实时监控缓冲区占用率,然后根据缓冲区情况进行量化参数的调整,最后通过实验验证该算法在保持图像质量几乎不变的情况下可以获得更好的缓冲区控制.

1 G012中的码率控制策略

1.1 码率控制算法中的漏桶模型

由于带宽的限制,编码器需要合理控制缓冲区占用度,使编码后输入到缓冲区的数据、缓冲区本身占有率、缓冲区数据输出能力三者之间要有一个平衡度,即编码每帧后缓冲区既不上溢也不下溢.如果上溢,则丢失数据,将影响编码后的图像质量;如果下溢,则影响在实时视频通信中的解码端工作.码率控制模块和缓冲区之间的关系如图1所示.由图1可知,缓冲区连接在编码端和信道之间,相当于一个数据缓冲区,编码端不断的往缓冲区输入编码数据,而缓冲区也按一定的数据量向信道传输编码比特.

图1 码率控制基本原理

H.264视频编码标准的码率控制策略JVT-G012把缓冲区看做为一个漏桶模型,数学模型如下:

其中,Bc(nj+1)为编码一帧后实际缓冲的大小,Bc(n0)为初始缓冲值,A(nj)为编码每帧后产生的实际比特数,u(uj)为帧率,Fr为带宽.其原理为:缓冲区尺寸固定,设定初始缓冲,编码每帧后产生的实际比特输入到缓冲区,同时缓冲区向信道按一定的速度传输数据,这样,保证编码过程中输入到缓冲和由缓冲输出的数据保持一个平衡,使缓冲既不满也不为空,整个序列编码完后缓冲为初始缓冲大小.

1.2 码率控制中的比特分配

JVT-G012[2]与JVT-H017[13]采用由缓冲状况和剩余比特加权的方法对每一帧分配目标比特,分别由缓冲占用率和剩余比特计算其应分配的比特,再利用两者加权的方式确定应该分配给该帧的目标比特.由于第一个P帧采用初始QP编码,编码完第一个P帧后缓冲定义为:

之后编码各P帧后的目标缓冲如下:

Btarget(nj)为编码当前帧时前一帧的目标缓冲,NP为P帧数目.最后,由缓冲区占用率和剩余比特两者的加权确定分配给该帧的比特为:

其中,Tr为剩余比特,Nr为剩余未编码的帧,u(nj)为带宽,Fr为帧率.(Btarget(nj)-Bc(nj))为实际缓冲和目标缓冲之差,μ和ε为常数,其值由B帧存在的情况确定.由于比特分配是采用加权的预测方式,因此是一种近似的计算,实际编码过程中目标比特和实际比特不一致.最后对得到的目标比特进行限制:

其中,L(nj)和U(nj)分别为分配比特的下界和上界,κ为常数,f˜(nj)为最后确定分配的比特.

1.3 G012码率控制算法的不足

G012码率控制算法没有设计如何监视缓冲状况,如果在编码当前帧之前缓冲占用率已经比较高,而当前帧又是复杂度比较高的帧,则在编码后缓冲区可能会很大程度地偏离目标缓冲甚至发生益出的危险,将丢失已编码的数据.因此,当发现实际缓冲偏离目标缓冲较大时,应适当调整量化参数.

图2所示为QCIF 4:2:0格式的 “carphone”序列在帧率为10帧/s,序列结构为IPPP……,目标比特率为64 kbps下编码后的缓冲区状况.由图可知,在第8帧左右,编码后实际缓冲远远偏离了目标缓冲,而且已经发生上溢,缓冲区最大尺寸为25000 bit,这时可能会导致数据丢失,从而影响编码图像质量.因此,控制缓冲占用率是码率控制很重要的一个目标.码率控制要保证编码后缓冲区既不上溢也不下溢,合理控制在目标缓冲附近.因此,应实时监视缓冲区状况,根据缓冲区占用率合理调整量化参数,使编码后实际缓冲更接近目标缓冲.

图2 “carphone”序列编码后缓冲区状况

2 改进的码率控制算法

针对以上提出的H.264码率控制算法JVTG012的不足之处,本文对缓冲区的控制作如下的改进.采用B_Tratio(nj)作为实际缓冲大小和目标缓冲大小之间的差值比例,定义如下:

其中,B_T为在编码第j个P帧时第j-1帧实际缓冲和目标缓冲差值的绝对值,反映了前一帧编码后实际缓冲和目标缓冲的偏离程度(j-2)为在编码该帧之前已编码的P帧的实际缓冲和目标缓冲差值的平均值,即平均偏离程度,因此,B_Tratio(nj)能很好的反映在编码当前帧之前缓冲区的状况,因此可以利用B_Tratio(nj)的值大小调整量化参数,使编码后实际缓冲更接近目标缓冲.为了统计B_Tratio(nj)的值分布情况,采用“foreman”序列,IPPPPP……,即除第一帧为I帧外其他为P帧,目标比特率设为24 kbps,共编码100帧,帧率为10帧/s进行测试,测试结果如图3.

图3 B_Tratio(nj)的分布情况

因此,可在编码第j个P帧前通过B_Tratio(nj)来调整第j个P帧QP的大小,调整方法如下:

以上算法的改进原理为:在编码当前帧之前,由前一帧实际缓冲和目标缓冲差值的绝对值,和已编码P帧的实际缓冲和目标缓冲偏离程度的平均值,计算出前一帧编码后缓冲占用度相对偏离程度,来自适应调整QP,即调整编码后实际产生的比特数,合理控制缓冲区.当1<B_Tratio(nj)<2,且实际缓冲大于目标缓冲时,要增加量化参数,减少编码后实际产生的比特;同理,当实际缓冲小于目标缓冲,则相应减小量化参数,从而增加编码后实际产生的比特数,使编码后实际缓冲更接近目标缓冲,维持缓冲稳定.

3 实验结果与分析

为了测试本文改进的算法对缓冲区控制的效果,采用JM10.2官方标准测试模型.分两组实验,第一组测试序列为 “Foreman”和“Carphone”,即运动较缓慢和纹理较平滑的序列,第二组测试序列为“Mobile”和“Football”,即快速运动和纹理较复杂的序列,序列格式为QCIF 4∶2∶0,图像尺寸为176×144(像素),共编码100帧,帧率为10帧/s,I帧周期为0,即IPPPPP……,初始QP由码率控制计算初始QP部分得出,采用CABAC熵编码,Hardamard变换开启,开启RDO,搜索范围为16,参考帧数为2,基本单元为一帧.实验设置的目标比特率为24 kbps和64 kbps.采用 CPU为双核AMD,主频为2.21G,内存为2G的PC机作为实验平台.实验结果分别如表1、表2和图4、图5、图6、图7所示.

表1 两种算法性能比较(慢运动序列)

图4 “Foreman”缓冲区情况Bitrate=24 kbps

图5 “Carphone”缓冲区情况Bitrate=64 kbps

表2 两种算法性能比较(快速运动序列)

图6 “Mobile”缓冲区情况Bitrate=24 kbps

图7 “Football”缓冲区情况Bitrate=64 kbps

对于慢运动序列,即纹理简单的视频序列,从表1可以看出,改进的算法对PSNR并没有很大影响,PSNR几乎保持不变,即图像质量几乎未受到影响,码率控制效果比JM10.2更好,实际码率更接近目标码率,即码率控制误差更小.从图4和图5可以看出,本文方法得到的实际缓冲更接近目标缓冲,缓冲区占有率更加稳定平滑,没有出现上溢和下溢的现象.特别是图5中所示的“Carphone”序列在比特率为64 kbps下的编码结果,JM10.2算法下得到的缓冲在第8帧出现溢出的现象,而本文方法很好地控制了缓冲大小,没有出现上溢的现象.

对于快速运动序列,即纹理相对复杂的序列,从表2可知,对于改进的算法,PSNR有所下降,但码率控制相对更好,更贴近目标码率,码率控制误差更小,但这是在牺牲PSNR情况下得到的更精确的码率控制.从图6可知,对于复杂的视频序列,本文算法下能得到更好的缓冲区状况,实际缓冲更逼近目标缓冲.对于图7,本文算法下得到的缓冲区控制相对较差.因此综上所述,本文方法适用于纹理较简单的序列,对于纹理较复杂的序列,缓冲区控制效果并非很好,因此应寻找其他的方法来应对复杂序列缓冲区控制问题.

4小结

在H.264码率控制算法JVT-G012的基础上,对缓冲占用率的控制情况进行分析并对其不足之处作改进.实时跟踪缓冲区占用率,并根据缓冲区状况调整量化参数,使编码后实际缓冲尽量接近目标缓冲.仿真实验表明,对于纹理简单的视频序列,在PSNR几乎不变的情况下,即不影响编码后图像主观质量,实际缓冲更接近目标缓冲,缓冲曲线更平滑,合理控制了缓冲区的稳定,在图像质量和缓冲区之间取得了较好的平衡.对于运动剧烈的视频序列,PSNR有所下降,实际码率更逼近目标码率,但缓冲区控制却无规律可言,新方法下有的序列缓冲区控制更好,但有的序列缓冲区控制效果不佳,因此,对于快速运动序列,如何控制缓冲区溢出,得到更精确的缓冲区控制效果,将是以后的研究工作.

[1]马思伟.基于率失真优化的视频编码研究[D].北京:中国科学院计算技术研究所,2005.

[2]Li Z G,Pan F,Lim K P,et al.Adaptive basic unit layer rate control for JVT [C]//JVT-G012-r1,7th Meeting,Pattaya II, Thailand.2003,14.

[3]魏显超,张翠芳,闫小涛.低码率下的H.264宏块级码率控制方法[J].计算机应用研究,2009,26(7):2796-2800.

[4]兰 天,顾学迈.基于BH帧层码率控制算法[J].遥测遥控,2008,29(4):45-51.

[5]杨晓琴,季晓勇,盛任农,等.基于H.264的码率控制[J].计算机工程与应用,2011,47(13):186-187.

[6]罗圣敏.一 种视频编码技术码率控制算法的改进[J].计算机仿真,2010,27(5):359-362.

[7]吕振斌,王惠南.一种H.264基本单元层的码率控制算法[J].电视技术,2009,33(1):45-47.

[8]刘 启,石志强.一种H.264帧级码率控制改进算法[J].计算机仿真,2008,25(5):105-108.

[9]丁 文,张浩平,胡鹏莎.一种改进的JVT-H017码率控制算法[J].计算机工程,2012,38(6):238-240.

[10]王昭顺,张 平.基于H.264/AVC的一种新的帧-层码率控制算法[J].计算机应用,2005,25(12):2800-2802.

[11]Jiang M,Yi X,Ling N.Improved frame-layer rate control for H. 264 using MAD ratio[C]//Circuits and Systems,2004.ISCAS'04. Proceedings of the 2004 International Symposium on.IEEE, 2004,3:III-813-16.

[12]Jiang M,Ling N.An improved frame and macroblock layer bit allocation scheme for H.264 rate control[C]//Circuits and Systems,2005.ISCAS 2005.IEEE International Symposium on. IEEE,2005:1501-1504.

[13]Ma S,Li Z,Wu F.Proposed draft of adaptive rate control[C]// Joint Video Team(JVT)of ISO/IEC MPEG&ITU-T VCEG,Doc. JVT-H017r3,8th Meeting,Geneva.2003:20-26.

An improved rate control algorithm of frame layer for H.264

WU Jun,HU Jian-zong,XIE Bin,WANG Yi-shuang

(School of Information Engineering,Jiangxi University of Science and Technology,Ganzhou 341000,China)

For the shortage of the buffer control for H.264 rate control algorithm,an improved frame layer rate control algorithm is proposed.First monitoring the buffer occupancy,then adjust quantization parameter based on the situation of actual buffer and the target buffer occupancy of encoded frame.When the actual buffer deviating from the target buffer large,appropriate increase or reduce the quantization parameter,make the actual buffer closer to the target buffer,therefore prevent buffer overflow or underflow.Simulation results show the PSNR of new algorithm is almost constant,the actual buffer is closer to the target buffer,and more steady.

H.264;rate control;target buffer;quantization parameter

TN919.81

A

2095-3041(2014)00-0070-05

10.13265/j.cnki.jxlgdxxb.2014.01.012

2013-08-29

江西省教育厅青年科学基金项目(GJJ11132)

吴 军(1963- ),男,副教授,主要从事嵌入式系统与视频编码等方面的研究,E-mail:hujianzong1987@163.com.

猜你喜欢

占用率码率缓冲区
一种基于HEVC 和AVC 改进的码率控制算法
基于FPGA的多码率卷积编码器设计与实现
降低CE设备子接口占用率的研究与应用
基于状态机的视频码率自适应算法
基于网络聚类与自适应概率的数据库缓冲区替换*
嫩江重要省界缓冲区水质单因子评价法研究
解析交换机CPU占用率
基于排队论的区域路内停车最优泊位占用率研究
关键链技术缓冲区的确定方法研究
多光谱图像压缩的联合码率分配—码率控制方法