码率控制实际上是一种编码的优化算法,它用于实现对视频流码流大小的控制。那么它控制的目的是什么呢?
    我们可以试想一下,同样的视频编码格式,码流大,它包含的信息也就越多,那么对应的图像也就越清晰,反之
亦然。目前常用的两种码流控制方式是VBR和CBR,VBR是动态比特率,CBR是固定比特率。那么他们是怎么来实
现的呢?
 
   我们首先看视频编码的目的,它是为了在有限的带宽中传输尽可能清晰的视频,我们以每秒25/帧的图像举例,25
帧图像中定义了GOP组,目前主要是有I,B,P帧三种帧格式,I帧是关键帧,你可以想象它就是一幅JPEG压缩图像,
而B,P帧是依靠I帧存在的,如果丢失了I帧,B,P帧是看不到图像的,B,P帧描述的不是实际的图像像素内容,而是
每个相关像素的变化量,他们相对于I帧信息量会很小。GOP组是指一个关键帧I帧所在的组的长度,每个GOP组只
有1个I帧。
    我们再来看,一组画面的码流大小跟什么有关?当视频编码的压缩方式都一样,清晰度要求都一样的时候,GOP
组的长度格式决定了码流的大小,例如:每秒25帧画面,GOP组长度为5,那么帧格式为IBPBP,那么1秒钟有5个I
帧,10个B帧,10个P帧,如果GOP组长度为15,帧格式就是IBBPBBPBBPBBPBB,那么1秒钟内会有2个I帧和16个B
帧和7个P帧,那么5个I帧比2个I帧占用的数据信息量大,所以GOP组的长度格式也决定了码流的大小。
    最后,我们再来看VBR和CBR,对于VBR来说,它可以通过特殊的算法来控制一个GOP组的长度,也就是I帧的
数量,当图像中运动图像多时,我可以把I帧数量加大,那么图像会很清晰,如果图像内元素基本静止时,它甚至
可以把GOP组调到25的长度。那么根据前面的描述,可以想象这是一种为了确保图像质量的控制手段,它非常灵
活,不死板,但是要求控制算法非常的精确,不精确会导致很多问题,例如码流突增后不降低,即使带宽足够,会
导致图像出现问题。
    CBR相反,它的带宽不变,码流不改变,一直都是一样的大小(会有少许的变化),图像运动量超过码流承受能
力时,图像会出现边缘模糊的现象,它的目的是为了稳定带宽,它的实现方式就相对简单,码流不变就需要均衡IB
P之间的关系,动态视频大时I帧小,BP大,运动视频小时I帧大,BP小。总之都是通过编解格式的算法来实现的。
总结一下,VBR码流控制方式可以降低图像动态画面少时候的带宽占用,CBR控制方式码流稳定,图像状态较稳
定。他们为了解决的是不同需求下的不同应用。
关于Qp
 qp<整数>:固定量化模式并设置使用的量化值,范围0~51,0为无损压缩,默认26
==================================
  在jm的lendocer中,其中在.cfg文件中有关于QP的设置。其中有QPFirstFrame,这里是设置第一帧的QP值,还有QPRemainingFrame,是设置保持帧的QP值。这里两个值可以不同。不同的帧理论是应用不同的QP值,来达到更好的压缩。但是为了试验简单起见,通常可以设置相同的QP值。如果进一步研究,就应该通过改变QP值,来细化研究了
================================
《H.264的码率控制策略》
MonNov2716:12:102006

本文详细讨论了H.264编码标准的码率控制结构,与MPEG-2的TM5模型进行了比较;并对JVT-G012提出的流量往返控制模型进行了探讨;最后对H.264码率控制提出了一些改进意见。

关键词:H.264码率控制VBRCBR

一、引言

到目前为止,视频编码标准通常采用去除时空域相关性的帧内/帧间预测、离散余弦变换量化和熵编码技术,以达到较高的编码效率。对视频通信而言,由于通信信道带宽有限,需对视频编码码率进行控制,来保证编码码流的顺利传输和信道带宽的充分利用。

针对不同的应用场合,学者们提出了多种码率控制(RateControl)策略。其中,实时编码码率控制方法主要有两种:用先前宏块编码产生的比特数来预测当前宏块编码产生比特数,或者通过视频编码率失真函数来预测当前宏块编码产生的比特数。

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

码率控制有两种模式:

VBR和CBR,即可变比特控制和固定比特控制。VBR模式是一种开环处理,输入为视频源和一个QP值。由于实际视频序列中的图像复杂度是不断变化的,细节多少、运动快慢等等,比特率也相应变化,不稳定。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的控制模型相比较。

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

*1.码率量化模型Rate-QuantizationModel*

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

*2.复杂度估计ComplexityEstimation*

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

*3.QP限制QP-Limiter*

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

*4.虚拟缓存模型VirtualBufferModel*

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

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

*5.QP初始化QPInitializer*

QP须在视频序列的开始初始化,并人为输入初值,

,但更好的方法是根据每个像素的比特数估计,并可根据QP和DemandedBitsPerPixel表查找。

*6.GOP比特分配GOPBitAllocation*

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

*7.基本单元比特分配BasicUnitBitAllocation*

如果基本单元小于图像,图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改善2dB。并利用软件AHM2.0和F086提出的方案进行了比较。PSNR改善了最高达1.73dB,平均达0.5dB。且该方案只一个通道而F086是两个通道。

四、结束语

随着H.264的不断改进和推广,其码率控制的算法也在不断改进更新。比如HeZhi

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

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

■参考文献

[1]WiegandT,SchwarzH,JochA,SullivanG.RateConstrainedCoderControlandComparisonofVideoCodingStandards.IEEETrans,CircuitsSyst,VideoTechnol,2003,13(7)

[2]LiZ,etal.AdaptiveBasicUnitLayerRateControlforJVT.JVT-G012,7thMeeting:Pattaya,Thailand,2003(3)

[3]HeZhihai.AUnifiedApproachtoRate-DistortionAnalysisandRateControlforVisualCodingAndCommunication.PHDThesisUCSB,2001

[4]陈川等.联合编码模式选择的码率控制算法.电子学报,2004(5)

[5]XueJinzhu,ShenLansun.RateControlAlgorithmforH.264VideoEncoding,JournalofElectronics(China),2003,20(6)

[6]MaSiwei,WenGao.RateControlForJVTVideoCodingSchemeWithHRDConsiderations.IEEEICIP2003

H.264的码率控制策略相关推荐

  1. 如何确定h.264的码率

    A:如何确定h.264的码率? 码率 = 编码产生的总比特数 * 帧频 / 编码总帧数 码率控制机制就是使编码器编码产生的码流尽量符合你设定的码率.从上面的公式可以看出,当编码帧数和帧频确定后,码率控 ...

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

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

  3. 视频编码H.264的应用

    近日,数字音视频编解码技术标准(AVS)工作组在12月21日结束的第47次会议上公布并于明年4月份会正式推出最新的AVS2视频编码标准,新的编码效率比上一代标准翻了一番,并且在无失真音频编码上取得了突 ...

  4. php avc,什么是AVC编码?简述H.264概念和发展

    频编解码技术有两套标准,国际电联(ITU-T)的标准H.261.H.263.H.263+等:还有ISO 的MPEG标准Mpeg1.Mpeg2.Mpeg4等等.H.264/AVC是两大组织集合H.263 ...

  5. 视频编码器h.264和mpeg4的区别?

    MPEG-4编码技术 MPEG-4:MPEG-4是一个适用于低传输速率应用的方案,MPEG-4是在MPEG-1.MPEG-2基础上发展而来,是为了播放流式媒体的高质量视频而专门设计的,它可利用很窄的带 ...

  6. H.264 软/硬编码器 画质量化分析评测

    第1页:前言--视频压缩无处不在 H.264 或者说 MPEG-4 AVC 是目前使用最广泛的高清视频编码标准,和上一代 MPEG-2.h.263/MPEG-4 Part4 相比,它的压缩率大为提高, ...

  7. H.264 原理与 B 站视频压制技巧

    在上一篇文章<关于"视频",你可能不知道的那些事儿>中,我们得到了一个概念:一段未经任何处理的 1080P 的 60 帧率视频每秒钟需要超过 300MB 的体积空间.直 ...

  8. H.264压缩技术之视频基础(foundation of learning video)——Matlab源码解析

    前言 为了后续能更好的理解,I帧编码与P帧编码,所以笔者先对数字视频中的一些基础概念进行铺垫.后续比较复杂的帧内预测,与帧间预测理解起来就会相对容易些. 关于Matlab中h.264的main函数部分 ...

  9. H.264/AVC (advanced video coding 高级视频编码)

    在视频会议应用中,视频质量和网络带宽占用是矛盾的,通常情况下视频流占用的带宽越高则视频质量也越高:如要求高质量的视频效果,那么需要的网络带宽也越大:解决这一矛盾的钥匙当然是视频编解码技术.评判一种视频 ...

最新文章

  1. ubuntu下wireshark添加root权限
  2. 罗伯特扫地机器人电池如何取_irobot扫地机器人电池怎么拆 iRobot/艾罗伯特扫地...
  3. IDEA的查询引用、调用关系图的功能
  4. git 配置命令行别名
  5. Android开发之通过Android Studio自带插件git创建分支,合并分支等
  6. leetcode mysql 排名_(LeetCode:数据库)分数排名
  7. 在c语言中优先级最低的是6,C语言中 *,<<,= ,->哪个优先级最低
  8. leetcode1491. 工资平均值 这也叫题?也太简单了吧
  9. 写给即将入行以及刚入行的程序员,你需要注意的几个点,别忽略!
  10. 拼多多和国家电网 Offer,怎么选?这回答绝了!
  11. 计算机系统的输入与输出接口是,计算机输入输出系统与接口技术
  12. VirtualBox安装Mac OS引导盘启动不了原因
  13. python变量使用的三个步骤_Python 动态生成多个变量
  14. STM32cube配置编码器和电机
  15. 使用dsoframer演示ppt
  16. t检验和wilcoxon秩和检验 判断两组数据间的显著性差异
  17. JAVA将多个PDF文件合并成一个PDF
  18. 定时关机win10_巧用任务计划程序定时关机
  19. fabs在python中是什么意思_Python fabs() 与 abs() 区别是什么?
  20. 工业互联网+危化安全生产综合管理平台怎样建

热门文章

  1. 浙江省初中计算机知识点,浙江省科学中考复习知识点归纳
  2. 搜狐[编程题]彩色宝石项链.有一条彩色宝石项链,是由很多种不同的宝石组成的,包括红宝石,蓝宝石,钻石,翡翠,珍珠等
  3. (转)Ubuntu 9.10 安装amule 关联firefox 以及加装反吸血模块
  4. 专属爸妈和新生儿的10款亲子游戏推荐
  5. 如何用纯 CSS 创作一台拍立得照相机
  6. 导航与定位技术——412辅助驾驶地图(L1\L2 曲率、坡度、高程、航向角)
  7. 电脑硬盘丢失数据,硬盘数据恢复方法分享
  8. 记录一下HarmonyOS开发app时Image标签无法显示圆形图案的问题
  9. git init提示Reinitialized existing Git repository in /Users/j
  10. 方差为什么叫方差,不叫差方,不是差的平方吗?