专利名称:视频编码中帧级码率的控制方法
技术领域:
本发明涉及图像信息视频编码压缩技术,特别涉及视频编码中帧级码率的控制方法。
背景技术:
如今的通讯服务已不再仅限于传统的语音业务,而是将目光投向了更加丰富多彩的多媒体业务。随着网络应用的日益扩大,多媒体业务的重要性尤其是视频应用,更加凸显。视频应用相对于以往的网络应用,如网页浏览,邮件服务,对带宽的要求更大,对实时性要求更高。目前基于有线信道或者无线信道网络的视频应用包括交互式应用,如会议电视,预编码的视频流下载,如实时视频流等等。尽管现在有线信道所能提供的带宽不断增大,但是对于视频序列来说,带宽还是无法满足其高数据量的要求,无线信道更是只能提够有限的带宽。这样视频编码输出的瞬间码流过高会对有限的网络资源造成冲击,更严重的会有丢包现象。因此,为满足这些视频应用的需求,充分利用网络资源,视频压缩后的码流要尽可能的占满带宽,并且保持平稳输出,码率控制在其中扮演着重要的角色。
常用的码率控制方法分为帧内码率控制和帧间码率控制。帧内码率控制主要是利用率失真理论,这种方法能够达到较好的控制效果,但数学计算量大,且使得瞬间码率过高,对网络具有一定的冲击性,甚至会造成丢包现象。帧间码率控制是利用前几帧编码的信息,调整当前帧的量化参数,或者进行丢帧,以保证输出码流的平均码率控制在带宽要求内,达到码流平稳的效果。因此,帧间码率控制是有效的控制住瞬间码率过高,让码流输出平稳的方法。
传统的帧间码率控制的方法通过前几帧的编码情况来调整当前帧的量化因子或者目标码率,以达到几帧平均码率平稳的目的,但是这样反应速度慢,无法很快的使码流平稳。例如,中国专利CN01130703的“视频压缩码率控制方法”,该专利是利用码率积累超过经验阈值,才对目标码率进行调整,这样使得瞬间码率无法尽快下降,而且还是一样无法完全避免高数据量对网络的冲击。国际专利WO0019137的“FAME-LEVEL RATE CONTROL FOR VIDEOCOMPRESSION”,该专利利用时间窗分配码字过于平均,另外还需要根据量化因子,运动差值等对目标比特数进行调整,达到较好的调整效果需要对多种因素进行考虑,判断条件复杂,实现繁琐。
发明内容
为了克服现有技术的缺陷和不足,本发明的目的在于提供一种计算量小并且效果好的视频编码中帧级码率的控制方法。
为了达到上述目的,本发明一种视频编码中帧级码率的控制方法,包括以下步骤(1)获取一帧图像的额定编码比特数,并为环形滑动窗的所有元素进行赋值;(2)计算当前帧在环形滑动窗内允许的编码比特数,并根据该允许的编码比特数与额定编码比特数的差判断是否对当前帧的数据进行编码,如果判断结果为是,则进入步骤(3);如果判断结果为否,步骤结束;(3)获取当前帧的目标编码比特数对当前帧的数据进行编码后,更新环形滑动窗。
优选地,所述步骤(1)具体为(11)将视频码率除以帧频来获取一帧图像的额定编码比特数;(12)使用该额定编码比特数给环形滑动窗的所有元素进行赋值。
优选地,所述步骤(2)具体为(21)计算当前帧在环形滑动窗内允许的编码比特数,并计算该允许的编码比特数与额定编码比特数的差值;(22)将该差值与修正加权值作乘积后,判断是否小于预设的丢帧的阈值,如果不小于,则判定需要对当前帧的数据进行编码,进入步骤(3);如果小于,则丢弃当前帧,步骤结束。
优选地,步骤(21)中所述计算当前帧在环形滑动窗内允许的编码比特数的方法为(A)通过累加环形滑动窗内元素的值来获取当前帧之前所有帧的实际编码比特数的和;(B)将所述步骤(A)中获取的和与环形滑动窗中保存的第一帧图像的实际编码比特数做差值;(C)将当前帧之前所有帧的额定编码比特数的和减去所述步骤(B)中的差值,来获取当前帧在环形滑动窗内允许的编码比特数。
优选地,所述步骤(3)具体为(31)将当前帧的额定编码比特数与所述步骤(22)中得到的乘积值作和,来获取当前帧的目标编码比特数;(32)根据该目标编码比特数对当前帧的数据进行编码后,更新环形滑动窗。
优选地,步骤(32)中所述更新环形滑动窗的方法为将当前帧编出的比特数替换掉滑动窗口内当前元素的值,并将当前帧的编码后将索引值加1再模N,获取下一帧在滑动窗中的窗口索引值;其中,所述的N为当前帧之前的所有帧个数的和。
采用上述的方法后,通过将环形滑动窗应用于视频编码器,运用环形滑动窗平滑每帧的编码比特数,平滑不下时就丢弃当前帧,如果不需丢弃当前帧,就运用滑动窗得到当前帧的目标编码比特数进行编码后更新环形滑动窗,不需要对多种因素全面考虑,判断条件也简单有效,能较好的调整码字分配,避免流量突变,最大程度的平缓了码流的效果,有效的控制住瞬间码率过高,让码流输出平稳,缓解了网络压力,提高了编码效率,达到了计算量小,并且编码过程效果好的目的。
图1为本发明环形滑动窗的结构示意图;图2为本发明视频编码中帧级码率的控制的具体流程图。
具体实施例方式
下面结合附图对本发明的具体实施方式
作进一步详细说明。
如图1所示,本发明将环形滑动窗应用于视频编码器,该环形滑动窗随时间转动,时间轴为t-3、t-2、t-1、t、t+1、t+2、t+3、t+4、t+5等,对于待编码的第t帧对应于时间轴的时间为t,此时,环形滑动时间窗对应的索引为0(t),时间窗上的其它索引为1(t-N+1)、2(t-N+2)、3(t-N+3)、N-1(t-1)、N-2(t-2),当处理完第t帧后,由于环形滑动窗是循环使用的,下一个待编码的第t+1帧对应时间轴的时间顺延为t+1,而环形滑动时间窗的索引就对应为第t帧的索引加1后模N,得到的索引为1(t+1)。
如图2所示,为本发明视频编码中帧级码率的控制的具体流程,包括以下步骤(101)首先判断编码是否为第一帧,如果是第一帧,则进入步骤(102);如果不是第一帧,则进入步骤(103);(102)初始化环形滑动窗。开始视频编码时,要给环形滑动窗的N个元素赋初值。环形滑动窗记录了当前帧之前的连续N帧的实际编码比特数。即滑动窗每个元素对应前N帧中某一帧的实际编码比特数。刚启动编码器时,由于还没有编码,滑动窗的每个元素都设为一帧图像的额定编码比特数,随着编码过程的持续,再不断更新为实际编码比特数。
初始化环形滑动窗包括以下步骤(A1)计算一帧图像的额定编码比特数FrameRate,由视频码率BitRate除以帧频FramePerSecond得到,即
FrameRate=BitRate/FramePerSecond(A2)用额定编码比特数FrameRate给环形滑动窗的每个元素SlipWindow[i]赋值,即SlipWindow[i]=FrameRate i=0,…,N-1(A3)赋值过程结束后,将初始化标志FirstTime置为无效,即当编码开始后不再以每帧图像的额定编码比特数给环形滑动窗元素赋值。
(103)计算在环形滑动窗内允许的当前帧编码比特数,即当前帧编码比特数的上限;包括以下步骤(B1)累加环形滑动窗内所有元素的值,得到当前帧之前N帧的实际编码比特数之和SumBits,即SumBits=Σi=0N-1SlipWindow[i]]]>(B2)累加的结果SumBits减去环形滑动窗中保存的第一帧图像的实际编码比特数SlipWindow[WindowIndex],得到前N-1帧的实际编码比特数的和SumBitsplusFisrtFrm。WindowIndex是第一帧在滑动窗中的窗口索引,如图1所示,因为环形滑动窗是循环使用的,所以WindowIndex与时间轴上的帧序号不是一致的,即WindowIndex不一定等于0。从后面的步骤中可以看出结束对当前帧的处理后WindowIndex将做为当前帧的窗口索引。
SumBitsplusFisrtFrm=SumBits-SlipWindow[WindowIndex](B3)用N帧额定编码比特数的和Nominal减去SumBitsplusFisrtFrm得到当前帧在环形滑动窗内允许的编码比特数LeftFrameBitsl,即LeftFrameBitsl=Nominal-SumBitsplusFisrtFrm(104)根据当前帧在环形滑动窗内允许的编码比特数与额定编码比特数的差判断是否需要丢弃当前帧,如果是则进入步骤(105);如果不是,则进入步骤(106);上述步骤(104)可以包括以下步骤(C1)计算当前帧在环形滑动窗内允许的编码比特数LeftFrameBitsl与额定编码比特数FrameRate的差ExtraBitsl;即ExtraBitsl=LeftFrameBitsl-FrameRate
(C2)为了增大码流的平滑度,将ExtraBitsl乘以修正加权值(1/(N/2)),即将码流的波动平均分配在后续的N/2帧上,这个结果用来做为是否丢帧的重要依据;ExtraBits=ExtraBitsl/(N/2)(C3)将ExtraBits与丢帧的阈值nThresh比较,小于则进入步骤(105);大于则进入步骤(106)。
(105)丢弃当前帧后,进入步骤(109)在丢帧前,更新滑动窗内当前元素的值和窗口索引,阈值的大小随码率自适应改变。即当满足条件ExtraBits<nThresh时,则做如下操作SlipWindow[WindowIndex]=0;WindowIndex++;WindowIndex=WindowIndex%N;丢弃当前帧;(106)确定当前帧的目标编码比特数,编码器将根据该值做更精细的码率控制,使得当前帧实际编码比特数尽可能的接近该值。
上述是将当前帧在环形滑动窗内允许的编码比特数根据它与额定编码比特数的差进行修正得到当前帧的目标编码比特数,在后续的编码过程中用目标编码比特数进行更精细的码率控制。修正的方法如下当前帧目标编码比特数=额定编码比特数+当前帧在滑动窗内允许的编码比特数与额定编码比特数的差×修正加权值。
也可以通过当前帧的目标编码比特数=当前帧的额定编码比特数+当前帧在滑动窗内允许的比特数与额定编码比特数的差/(N/2)来求得,即LeftFrameBits=FrameRate+ExtraBits;(107)进行当前帧数据的编码;(108)结束当前帧的编码后,更新环形滑动窗内容和索引值。
包括以下步骤(D1)用当前帧编出的比特数BitsFrm替换掉窗口内当前元素的值;即
SlipWindow[WindowIndex]=BitsFrm(D2)更新窗口索引。由于环形滑动窗是循环使用的,如图1所示。窗内当前元素的窗口索引范围是0~N-1。将当前帧的编码后将索引值加1再模N,得到下一帧在滑动窗中的窗口索引值。即WindowIndex=WindowIndex+1WindowIndex=WindowIndex%N本发明通过将环形滑动窗应用于视频编码器,运用环形滑动窗平滑每帧的编码比特数,平滑不下时就丢弃当前帧,如果不需丢弃当前帧,就运用滑动窗得到当前帧的目标编码比特数进行编码后更新环形滑动窗,不需要对多种因素全面考虑,判断条件也简单有效,能较好的调整码字分配,尽可能平滑码流,避免流量突变,达到了计算量小,并且编码过程效果好的目的。
权利要求
1.一种视频编码帧级码率的控制方法,其特征在于,包括以下步骤(1)获取一帧图像的额定编码比特数,并为环形滑动窗的所有元素进行赋值;(2)计算当前帧在环形滑动窗内允许的编码比特数,并根据该允许的编码比特数与额定编码比特数的差判断是否对当前帧的数据进行编码,如果判断结果为是,则进入步骤(3);如果判断结果为否,步骤结束;(3)获取当前帧的目标编码比特数对当前帧的数据进行编码后,更新环形滑动窗。
2.按照权利要求1所述的视频编码帧级码率的控制方法,其特征在于,所述步骤(1)具体为(11)将视频码率除以帧频来获取一帧图像的额定编码比特数;(12)使用该额定编码比特数给环形滑动窗的所有元素进行赋值。
3.按照权利要求2所述的视频编码帧级码率的控制方法,其特征在于,所述步骤(2)具体为(21)计算当前帧在环形滑动窗内允许的编码比特数,并计算该允许的编码比特数与额定编码比特数的差值;(22)将该差值与修正加权值作乘积后,判断是否小于预设的丢帧的阈值,如果不小于,则判定需要对当前帧的数据进行编码,进入步骤(3);如果小于,则丢弃当前帧,步骤结束。
4.按照权利要求3所述的视频编码帧级码率的控制方法,其特征在于,步骤(21)中所述计算当前帧在环形滑动窗内允许的编码比特数的方法为(A)通过累加环形滑动窗内元素的值来获取当前帧之前所有帧的实际编码比特数的和;(B)将所述步骤(A)中获取的和与环形滑动窗中保存的第一帧图像的实际编码比特数做差值;(C)将当前帧之前所有帧的额定编码比特数的和减去所述步骤(B)中的差值,来获取当前帧在环形滑动窗内允许的编码比特数。
5.按照权利要求3或4所述的视频编码帧级码率的控制方法,其特征在于,所述步骤(3)具体为(31)将当前帧的额定编码比特数与所述步骤(22)中得到的乘积值作和,来获取当前帧的目标编码比特数;(32)根据该目标编码比特数对当前帧的数据进行编码后,更新环形滑动窗。
6.按照权利要求5所述的视频编码帧级码率的控制方法,其特征在于,步骤(32)中所述更新环形滑动窗的方法为将当前帧编出的比特数替换掉滑动窗口内当前元素的值,并将当前帧的编码后将索引值加1再模N,获取下一帧在滑动窗中的窗口索引值;其中,所述的N为当前帧之前的所有帧个数的和。
全文摘要
本发明公开了一种视频编码中帧级码率的控制方法。为解决现有技术中视频编码的复杂度高、效果差的问题而发明。本发明视频编码中帧级码率的控制方法包括以下步骤获取一帧图像的额定编码比特数,并为环形滑动窗的所有元素进行赋值;计算当前帧在环形滑动窗内允许的编码比特数,并根据该允许的编码比特数与额定编码比特数的差判断需要对当前帧的数据进行编码,则获取当前帧的目标编码比特数对当前帧的数据进行编码后,更新环形滑动窗。本发明能较好的调整码字分配,避免流量突变,最大程度的平缓了码流的效果,有效的控制住瞬间码率过高,让码流输出平稳,缓解了网络压力,提高了编码效率,达到了计算量小,并且编码过程效果好的目的。
文档编号H04N7/26GK1964494SQ200610145809
公开日2007年5月16日 申请日期2006年11月17日 优先权日2006年11月17日
发明者王宁, 吴钊, 鲁晓牧 申请人:中兴通讯股份有限公司