H.264 码率控制 VBR CBR

转载 2015年07月09日 09:19:00

一、引言

到目前为止,视频编码标准通常采用去除时空域相关性的帧内/帧间预测、离散余弦变换量化和熵编码技术,以达到较高的编码效率。对视频通信而言,由于通信信道带宽有限,需对视频编码码率进行控制,来保证编码码流的顺利传输和信道带宽的充分利用。针对不同的应用场合,学者们提出了多种码率控制(RateControl)策略。其中,实时编码码率控制方法主要有两种:用先前宏块编码产生的比特数来预测当前宏块编码产生比特数,或者通过视频编码率失真函数来预测当前宏块编码产生的比特数。

码率控制算法[1]就是动态调整编码器参数,得到目标比特数。它为视频序列中的图像组GOP、图像或者子图像分配一定的比特。现有的码率控制算法主要是通过调整离散余弦变换的量化参数大小输出目标码率。实际上,量化参数(QP)反映了空间细节压缩情况,如QP小,大部分的细节都会被保留;QP增大,一些细节丢失,码率降低,但图像失真加强和质量下降。也就是说,QP和比特率成反比的关系,而且随着视频源复杂度的提高,这种反比关系会更明显。

码率控制有两种模式:VBR和CBR,即可变比特控制和固定比特控制。如图1(a)所示,VBR模式是一种开环处理,输入为视频源和一个QP值。由于实际视频序列中的图像复杂度是不断变化的,细节多少、运动快慢等等,比特率也相应变化,不稳定。如图(b)所示,CBR模式是一种闭环处理,输入为视频源和目标比特。它根据对源复杂度估计、解码缓冲的大小及网络带宽估计动态调整QP,得到符合要求的码率。

二、H.264码率控制结构

作为新一代的视频压缩编码标准,H.264对多编码模式、编码参数自适应选择、上下文自适应熵编码、多参考帧的灵活选择、高精度预测、去方块滤波以及抗误码能力等方面进行了精雕细刻,采取了一系列切合实际的技术措施,大大提高了编码效率和网络自适应能力。

但H.264标准草案并没有很好地研究RC,主要精力放在了编码码流及解码方法上。它将QP同时用于码率控制算法和率失真优化,导致了蛋鸡悖论:为了计算当前帧中宏块的RDO,需利用当前帧或宏块的MAD预测每个宏块的QP,而每个当前帧或宏块的MAD只有在RDO后才能计算出。

H.264码率控制方法的提案主要有两个[2]:JVT-F086中MPEG-2TM5改进版本及JVT-G012中提出用流量往返模型来分配每个基本单元目标比特数,并在宏块层编码采用二次率失真函数计算量化参数的算法。JVT-G012还比较了这两种算法,认为其算法优于F086算法。

本节主要介绍H.264的码率控制结构,并与MPEG-2的控制模型相比较。

如图2所示,H.264码率控制的主要部分类似于其他RC方案[1]。图2只是一个概念性的结构,并不是其软件的实际反映,如P帧和B帧需分别处理,一些估计是前面值的平均等等。

1. 码率量化模型 Rate-Quantization Model

RC算法的核心是一个定量的描述QP、实际比特率和编码复杂度代理的关系的模型。比特率和复杂度与残差有关,QP只能影响变换残差信息的细节,对包含头信息、预测数据、运动矢量信息的比特流没有直接影响。预测误差的平均残差绝对值(MeanAverage Difference ,MAD)被引用,用来估计复杂度。

2. 复杂度估计Complexity Estimation

MAD是预测器精度和帧内预测情形下临近图像时间相似度的逆操作。MAD可以在对当前图像编码完以后进行估计,但是,在QP选择以后再编码一次,负荷太重。相反可以假设MAD随图像变化而变化,可根据前一图像的实际值估计而得。但该假设在场景切换时失效。

3. QP限制QP-Limiter

闭环控制系统须能够保证稳定性和视觉变化最小。对一些复杂度快速改变的序列,QP变化显著,须设置以码率限制器来限制图像的QP变化不超过±2。

4. 虚拟缓存模型Virtual Buffer Model

解码器都有一个缓存来平滑码率变换和数据的到达时间。相应编码器产生的比特流须满足解码器的限制,所以用一个虚拟缓存模型来仿真实际解码器的满度。

虚拟缓存满度的改变即编码成流的总比特数的差异。缓存满度的下届为0,上界为缓存容量。用户需根据解码器支持的级别设置缓存容量和初始值。

5. QP初始化QP Initializer

QP须在视频序列的开始初始化,并人为输入初值,但更好的方法是根据每个像素的比特数估计,并可根据QP和DemandedBitsPerPixel表查找。

6. GOP比特分配GOP Bit Allocation

根据需求的比特率和虚拟缓存的当前满度,计算GOP的目标码率,I图像和第一个P图像的QP。

7. 基本单元比特分配Basic Unit Bit Allocation

如果基本单元小于图像,图2则分为两层:图像层和基本单元层。对H.264而言,重点是计算每个存储图像(通常为P图像)的QP。严格地讲H.264是允许B图像用作参考的,只是通常不用。非存储图像(通常为B图像)则通过邻近P图像的QP内插或偏移得出。首先,考虑到图像的MAD,可为缓存满度设置一目标级。接着,利用该级别,计算图像的目标比特数。

与MPEG-2的TM5模型相比,类似之处有:虚拟缓存的设立,GOP和图像层的目标比特的计算,为每个基本单元生成QP等。不同之处有:基本单元是宏块,且同一图像中的不同宏块的QP可能相差很大;I/P/B三帧之间只是目标比特分配的不同,其余处理类似;MPEG-2预测模式没有H.264的多样性。由于其没有高级的帧内预测,也没有必要对关联QP和残差时那么严格;宏块级的空间复杂度由源活动性估计而得。忽略复杂度是否由MV和残差数据体现;对图像分配比特,需考虑图像类型、GOP结构、需要的比特率,而非图像的复杂度。但在图像中,缓存满度和相关的空间活动性用来分配图像比特等。

三、H.264码率控制算法

如上所述,H.264码率控制方案主要有JVT-F086和JVT-G012提出的两种。JVT-G012通过引入基本单元和线性模型的概念,提出一种自适应基本单元层码率控制方案。基本单元可能是一帧、片或者一个宏块。线性模型用于预测当前基本单元的MAD,它是通过前一帧相应位置的基本单元得到。

蛋鸡悖论解决如下:当前帧的目标比特率根据预先定义的帧率、当前缓冲容量、目标缓冲级别和可利用信道带宽,利用漏斗模型和线性跟踪理论计算得出。剩余比特分配给当前帧未编码基本单元。当前基本单元的MAD利用前一帧相同位置基本单元的MAD实际值线性预测而得。相应的QP通过一个二次RD模型获得。该方案同样适用于VBR情形。该方案利用一个虚拟缓存,根据信道带宽的动态特征,来帮助调节编码操作。该缓存既不上溢也不下溢。由于该模型类似于漏斗模型,该RC算法与HRD是一致的。

为了验证该方案,JVT-G012在VBR和CBR两种情形下进行实验。VBR的比特率曲线是一预先确定的曲线,即实际产生的比特接近于比特率曲线且缓存不上溢和下溢。CBR情形下,与QP固定的编码器比较了编码效率。目标比特率由以固定QP编码测试序列产生。计算出的码率由该方案编码产生。该方案编码效率上升1.02dB,所有测试序列的平均PSNR改善0.32dB。并利用软件AHM2.0和F086提出的方案进行了比较。PSNR改善了最高达1.73dB,平均达0.5dB。且该方案只一个通道而F086是两个通道。

四、结束语

随着H.264的不断改进和推广,其码率控制的算法也在不断改进更新。比如HeZhihai等[3]提出线性率失真函数,通过变换量化后零值在变换系数中的比例(认为这对编码码率的影响最大)来选取量化参数,可避免蛋鸡悖论;陈川等[4]提出联合编码模式选择、信源的码率控制算法;XueJinzhu[5]等提出基于块活动性和缓冲状态的算法;MaSiwei等[6]提出结合HRD的控制算法,并被H.264采用等等。还有学者提出考虑解码端(通过其反馈信息控制码率)的控制模型。上述的算法都在其实验范围内体现出了编码效率的改进。可见,H.264码率控制的改进有许多方向,主要有:考虑编码器端的编码参数(如量化参数、编码模式或直接影响比特流的参数等)的率失真控制模型,结合信源信道失真和缓冲状态的码率控制模型,考虑解码端反馈信息的控制模型等。

H.264采用了多种改进编码效率的技术,针对不同的应用可以选择不同的技术,其码率控制模型的建立也应该结合实际应用做出调整,而不是一定要建立一个适应各种场合的控制模型。



相关文章推荐

视频码率,帧率和分辨率及H264介绍

视频码率,帧率和分辨率到底哪一个影响电影的清晰度 码率:影响体积,与体积成正比:码率越大,体积越大;码率越小,体积越小。   码率就是数据传输时单位时间传送的数据位数,一般我们用的单位是kbps即...
  • jsh13417
  • jsh13417
  • 2013年08月24日 11:06
  • 11991

码率控制、VBR、CBR

码率控制实际上是一种编码的优化算法,它用于实现对视频流码流大小的控制。那么它控制的目的是什么呢? 我们可以试想一下,同样的视频编码格式,码流大,它包含的信息也就越多,那么对应的图像也就越清晰,反之亦然...

H264三种码率控制方法(CBR, VBR, CVBR)

CBR(Constant Bit Rate)是以恒定比特率方式进行编码,有Motion发生时,由于码率恒定,只能通过增大QP来减少码字大小,图像质量变差,当场景静止时,图像质量又变好,因此图像质量不稳...

H.264码率控制算法研究及JM相应代码分析(二)

在前一篇文章的基础上,现在先看一下MPEG4 编码标准中应用的码率控制算法,总结起来,各大算法都是在解决两个问题:RD 率失真的优化以及避免缓冲区的上溢下溢。 MPEG-4 VM8 码率控制算法 在这...

H.264码率控制跳帧算法

  • 2013年04月08日 16:43
  • 145KB
  • 下载

H.264码率控制算法研究及JM相应代码分析(一)

这是之前我们学校张远老师留的课程作业,要求个人整理分析H.264码率控制算法及JM相应代码,个人感觉自己做的还不错,所以发出来给大家分享一下。鉴于公式什么的太多了,我这里就直接从文档里截图了。 要明白...

H.264码率控制算法研究及JM相应代码分析(三)

在前一篇文章的基础上继续往下讲。 基本单元层码率控制 如果不是选择一帧作为一个基本单元,还得添加上额外的基本单元层码率控制。 同帧层码率控制一样,I帧以单一的QP值编码,且这个QP值和帧层码率控制中的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:H.264 码率控制 VBR CBR
举报原因:
原因补充:

(最多只允许输入30个字)