一种适用于实时应用的H.264码率控制方法
技术领域:
本发明涉及数字视频编解码技术领域,特别涉及一种适用于实时应用的H.264码率控制方法。
背景技术:
码率控制在固定码流编码中扮演了重要的角色,若没有码率控制任何视频编码都难以在实际中获得应用。一些国际视频压缩标准都有其特定的码率控制技术,如MPEG-2视频压缩标准的TM5(Test Model 5),H.263视频压缩标准的TMN8(Test Model Near 8),MPEG-4视频压缩标准的VM8(Verification Model Version 8)等。新一代视频压缩标准H.264由于在编码算法中引入了以往标准没有的RDO(Rate-Distortion Optimization)率失真优化编码技术,其码率控制技术变得更为复杂。JVT(Joint Video Team)联合视频编码组推荐H.264视频压缩标准采用Li Zheng-guo等提出的JVT-G012码率控制方法。该方法利用线性预测来预测当前宏块的MAD(Mean Absolute Difference),然后再使用MPEG-2中的二次模式(R-D预测模型)来计算量化等级,并将码率控制分为GOP(Group OfPicture)层码率控制,帧层码率控制以及宏块层码率控制,能对编码器的输出码率较好的进行控制。但由于其基于RDO率失真技术,且需要多层联合码率控制,存在复杂度过高的问题,在一些实时通信应用中,比如视频会议系统中,难于实际应用。
因此,如何对H.264视频压缩标准的码率控制算法进行简化和优化,进一步降低复杂度和提高码率控制精度成为本领域技术人员亟待解决的技术课题。
发明内容:
本发明的目的是提供一种帧级H.264码率控制方法,该方法具有计算复杂度低、码率控制精度高的特点,非常适合实时网络视频通信应用。
为了达到上述目的,本发明提供的帧级H.264码率控制方法,其包括步骤:
1)根据目标码率计算初始量化参数;
2)设置码流输出缓冲区占用率;
3)计算当前帧编码目标比特数;
4)计算当前帧编码量化参数;
5)跳帧控制;
6)编码当前帧;
7)根据当前帧码流大小更新输出缓冲区占用率。
所述步骤1)根据目标码率计算初始量化参数的具体方法为根据单位像素的平均目标比特数确定初始量化参数QPinit,其计算公式如下:
其中,R为目标码率,单位为比特/秒(bps),f为帧率,单位为帧/秒(fps),Npixel为图像的总像素数,l1,l2,l3为常数,较佳的l1=0.6,l2=1.4,l3=2.4。
所述步骤2)码流输出缓冲区占用率ρ定义如下:
其中,R为目标码率,Rinst为当前帧之前1秒钟的即时码率,为当前帧之前1秒钟编码帧的比特总和,即为当前帧之前(含当前帧)1秒钟已编码的f帧(从当前帧开始倒数f帧)的比特总和。当前帧之前(含已编码当前帧)已编码帧不足f帧时,不足之帧比特数均按R/f计算。当开始编码之前,设定ρ为一常数。
所述步骤3)计算当前帧编码目标比特数Btarget具体方法如下:
其中,R为目标码率,f为帧率,n为第N秒内的f帧视频图像中已经被编码的帧数,
为第N秒内的f帧视频图像中已经被编码的n帧的比特数之和。
所述步骤4)计算当前帧编码量化参数具体方法如下:设当前帧编码量化参数为QPcurr,其计算方法如下,
如果当前帧为I帧或者是紧接I帧之后的第一个P帧,QPcurr=QPinit;
否则,根据当前码流输出缓冲区占用率ρ以及当前帧编码目标比特数Btarget计算当前帧量化参数
QPcurr=Min(Max(QPprev-3,QPesti),QPesti+3)(6)
其中,QPprev为前一帧编码量化参数,
QPesti=QPinit*(1/α)*ρ(7)
所述步骤5)跳帧控制方法如下:
根据可接受的码率波动范围和(或)编码图像质量进行跳帧控制。设定码率波动范围阀值为t1,值越大编码产生的比特流码率超出目标码率的可能性和量越大;设定编码图像质量阀值为t2,值越大编码产生的码流超出目标码率的可能性和量越小,但编码图像质量会变差。t1,t2大小可根据经验进行设置。实际应用中,可设置跳帧条件为当缓冲区占用率ρ>t1或QPcurr>t2时跳过对当前帧的编码,或者当缓冲区占用率ρ>t1且QPcurr>t2时跳过对当前帧的编码,(QPcurr为当前帧编码量化参数,其计算方法参见步骤4)。若满足跳过编码条件,跳过对当前帧编码,并计其压缩比特数为零,参与下一帧编码的缓冲区占用率计算,否则可以针对条件ρ>t1和QPcurr>t2的真假情况对步骤4)所得当前帧编码量化参数进行修正,以更好的满足对码率控制精度和图像质量的要求。最后更新QPprev=QPcurr。
所述步骤7)根据当前帧码流大小更新输出缓冲区占用率具体方法如下:
重新计算当前帧编码完成之后的即时码率,即
Rinst′=Rinst-Bcurr-f+Bcurr (9)
其中,R’inst为当前帧编码之前1秒钟的即时码率,Rinst为当前帧前一帧之前1秒钟的即时码率,Bcurr、Bcurr-f分别为当前帧编码比特数和当前帧之前第f帧(从当前帧开始倒数第f帧)的编码比特数。若当前帧跳过对当前帧的编码,并计当前帧的压缩比特数为零。
综上所述,本发明的适用于实时应用的H.264码率控制方法基于帧级码率控制,采用了基于缓冲区占用率和编码图像质量的跳帧控制方法和帧编码量化参数计算方法,具有计算复杂度低、码率控制精度高的特点,简洁实用,非常适合对延时有较高要求的视频会议、可视电话等实时网络视频通信的应用。
附图说明:
以下结合附图和具体实施方式来进一步说明本发明。
图1为本发明码率控制流程图。
图2(a)和图2(b)为本发明与x264编码器帧级码率控制方法的对比结果。
具体实施方式:
为了使本发明实现的技术手段、创作特征、达成目的与功效易于明白了解,下面结合具体图示,进一步阐述本发明。
本发明的适用于实时应用的H.264码率控制方法包括了以下步骤:
1)根据目标码率计算初始量化参数;
2)设置码流输出缓冲区占用率;
3)计算当前帧编码目标比特数;
4)计算当前帧编码量化参数;
5)跳帧控制;
6)编码当前帧;
7)根据当前帧码流大小更新输出缓冲区占用率。
本例中设图像总像素数为Npixel=width*height,视频帧率为f=frame_rate,视频编码目标码率为R=bit_rate。
请参阅图1,本发明的适用于实时应用的H.264码率控制方法首先执行步骤S10,即根据目标码率计算初始量化参数。参照公式(1),则
bpp=bit_rate/(width*height*frame_rate);
较佳的选取l1=0.6,l2=1.4,l3=2.4,参照公式(2),获得QPinit。
接着执行步骤S11。由于当前还没有图像帧编码,因此设置码流输出缓冲区占用率为一常数,较佳的,设为ρ=1.0。
执行步骤S12,判断编码是否结束。如果是跳过以下所有步骤,结束编码。如果否,接着执行步骤S13。
执行步骤S13,计算当前帧编码目标比特数。参照公式(5),若当前帧为第1秒视频内的第1帧(按视频帧出现的时间先后顺序,下同),其编码目标比特数Btarget=bit_rate/frame_rate;若当前帧为第1秒视频内的第2帧,其编码目标比特数Btarget=(bit_rate-B1)/(frame_rate-1),其中,B1为第1秒视频内的第1帧的实际编码比特数;若当前帧为第1秒视频内的第3帧,其编码目标比特数Btarget=(bit_rate-(B1+B2))/(frame_rate-2),其中,B1、B2分别为第1秒视频内的第1帧、第2帧的实际编码比特数;若当前帧为第1秒视频内的第4帧,其编码目标比特数Btarget=(bit_rate-(B1+B2+B3))/(frame_rate-3),其中,B1、B2、B3分别为第1秒视频内的第1帧、第2帧、第3帧的实际编码比特数;依次类推,若当前帧为第1秒视频内的第frame_rate帧(即第1秒视频内的最后一帧图像),其编码目标比特数Btarget=bit_rate-(B1+B2+B3+…+Bframe_rate-1),其中,B1、B2、B3、…、Bframe_rate-1分别为第1秒视频内的第1帧、第2帧、第3帧、...、第frame_rate-1帧的实际编码比特数。若当前帧为第N秒(N>1)视频内的第1帧,其编码目标比特数Btarget=bit_rate/frame_rate;若当前帧为第N秒视频内的第2帧,其编码目标比特数Btarget=(bit_rate-B1)/(frame_rate-1),其中,B1为第N秒视频内的第1帧的实际编码比特数;若当前帧为第N秒视频内的第3帧,其编码目标比特数Btarget=(bit_rate-(B1+B2))/(frame_rate-2),其中,B1、B2分别为第N秒视频内的第1帧、第2帧的实际编码比特数;若当前帧为第N秒视频内的第4帧,其编码目标比特数Btarget=(bit_rate-(B1+B2+B3))/(frame_rate-3),其中,B1、B2、B3分别为第N秒视频内的第1帧、第2帧、第3帧的实际编码比特数;依次类推,若当前帧为第N秒视频内的第frame_rate帧(即第N秒视频内的最后一帧图像),其编码目标比特数Btarget=bit_rate-(B1+B2+B3+…+Bframe_rate-1),其中,B1、B2、B3…、Bframe_rate-1分别为第N秒视频内的第1帧、第2帧、第3帧、...、第frame_rate-1帧的实际编码比特数。
执行步骤S14,计算当前帧编码量化参数。设当前帧编码量化参数为QPcurr,其计算方法如下:
A.如果当前帧为I帧或者是紧接I帧之后的第一个P帧,QPcurr=QPinit;
B.否则,根据当前码流输出缓冲区占用率ρ以及当前帧编码目标比特数Btarget计算当前帧量化参数,参考公式(6-8),α=Btarget/(bit_rate/framerate),QPesti=QPinit*(1/α)*ρ,QPcurr=Min(Max(QPprev-3,QPesti),QPprev+3),其中,QPprev为前一帧实际编码量化参数。另外,通常,我们会为整个码率控制过程设定编码允许的最大量化参数QP_MAX和最小量化参数QP_MIN。因此,需要对最后得到的量化参数进行限制QPcurr=Min(Max(QP_MIN,QPesti),QP_MAX)。
执行步骤S15,进行跳帧控制。通常,可根据可接受的码率波动范围和(或)编码图像质量设定码率波动范围阀值为t1和编码图像质量阀值为t2。t1值越大编码产生的比特流码率超出目标码率的可能性和量越大,较佳的,其值范围在0.9~1.5之间;t2值越大编码产生的码流超出目标码率的可能性和量越小,但图像质量会变差,较佳的,其值范围在32~51之间。为获得较好的编码图像质量,根据经验本实施例设置t2=36,t1=1.2,并设置跳帧条件为当当前帧编码量化参数QPcurr>t2且缓冲区占用率ρ>t1时跳过对当前帧的编码,即满足上述条件时设置跳过当前帧编码标志为真,否则设置跳过当前帧编码标志为假。如果跳过当前帧编码标志为真时,计当前帧的压缩比特数为零,参与下一帧编码的缓冲区占用率计算,否则,对当前帧编码量化参数进行修正:若条件ρ>t1为真,修正QPcurr=Max(QPcurr+2,QP_MAX),若条件QPcurr>t2为真,修正QPcurr=t2,其它情况不做修改。最后更新QPprev=QPcurr。
执行步骤S16,如果跳过当前帧编码标志为真,跳转执行步骤S18,否则接着执行步骤S17。
执行步骤S17,对当前帧进行压缩编码,并记录编码比特数。
执行步骤S18,根据当前帧码流大小更新输出缓冲区占用率。参照公式(3)和公式(4),
参照公式(5),首先计算即时码率Rinst,即当前帧之前(含当前帧)1秒钟编码帧的比特总和。需要注意的是,当前帧之前(含已编码当前帧)已编码帧不足frame_rate帧时,不足之帧比特数需要按bit_rate/frame_rate计算。设当前帧序号为curr,即第curr帧,实际编码比特数为Bcurr。若当前帧为第1帧,其即时码率Rinst=B1+(bit_rate/frame_rate)*(frame_rate-1),其中,B1为当前编码帧的实际编码比特数;若当前帧为第2帧,其即时码率Rinst=B2+B1+(bit_rate/frame_rate)*(frame_rate-2),其中,B2、B1分别为从当前帧开始倒数第1帧、第2帧的实际编码比特数(B2为当前编码帧的实际编码比特数);若当前帧为第3帧,其即时码率Rinst=B3+B2+B1+(bit_rate/frame_rate)*(frame_rate-3),其中,B3、B2、B1分别为从当前帧开始倒数第1帧、第2帧、第3帧的实际编码比特数(B3为当前编码帧的实际编码比特数);依次类推,若当前帧为第frame_rate帧,其即时码率Rinst=Bframe_rate+…+B3+B2+B1,其中,Bframe_rate、…、B3、B2、B1分别为从当前帧开始倒数第1帧、第2帧、第3帧、…、第frame_rate帧的实际编码比特数(Bframe_rate为当前编码帧的实际编码比特数);进一步简化的,当curr>frame_rate时,参照公式(9),R’inst=Rinst-Bcurr-frame_rate+Bcurr-frame_rate,其中,R’inst为当前帧编码之前1秒钟的即时码率,Rinst为当前帧前一帧之前1秒钟的即时码率,Bcurr、Bcurr-frame_rate分别为当前帧(从当前帧开始倒数第1帧)编码比特数和当前帧之前第frame_rate+1帧(从当前帧开始倒数第frame_rate+1帧)的编码比特数。最后根据即时码率更新缓冲区占用率ρ=R’inst/bit_rate,并跳转到步骤S12,执行对下一帧的编码。
综上所述,本发明的适用于实时应用的H.264码率控制方法基于帧级码率控制,采用了基于缓冲区占用率和编码图像质量的跳帧控制方法和帧编码量化参数计算方法,计算复杂度低、码率控制精度高的特点,简洁实用。图2(a)和图2(b)给出了本发明码率控制方法应用到x264视频编码器与该编码器现有帧级码率控制方法的对比结果。结果显示,本发明的适用于实时应用的H.264码率控制方法较之现有方法,产生的比特流的即时码率(比如1秒钟内的码率)更平稳,相对目标码率的偏差更小,因而能够获得更高的码率控制精度。
以上显示和描述了本发明的基本原理和主要特征和本发明的优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本发明要求保护范围由所附的权利要求书及其等效物界定。