我是靠谱客的博主 沉静溪流,最近开发中收集的这篇文章主要介绍H.264的码率控制算法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

   H.264的码率控制算法采用了多种技术,其中包括自适应基本单元层(Adaptive Basic Unit Layer)、流量往返模型(Fluid Traffic Model)、线性MAD模型、二次率失真模型等。并且采用了分层码率控制策略,共分为三层:GOP层、帧层和基本单元层。在JVT的提案中,采用的是JVT-G012码率控制算法,该算法提出了基本单元的概念,将一帧划分为若干个基本单元,基本单元可能是一宏块、一行宏块、一场或一帧。帧层码率控制根据网络带宽、缓存占用量、缓存大小及剩余比特来分配每一帧的目标比特;在基本单元层码率控制中,目标比特由该帧的剩余目标比特平均得到。这些技术的采用成功地解决了传统码率控制算法与H.264的率失真优化技术之间存在的因果矛盾,能较准确地控制输出码率,输出视频质量较好。

H.264中的JVT.G012算法采用的二次R—Q模型如下:

h.264的码率控制算法 - 雪中飞燕 - 我的博客

        这一模型用于基本单元的量化参数计算,其中R代表编码量化系数所需的码字位数,Q指基本单元的量化步长,MAD通过以下线性预测模型进行预测:

h.264的码率控制算法 - 雪中飞燕 - 我的博客

        其中MADcb和MADpb代表当前基本单元和前一帧相应位置处的MAD,a1,a2是模型系数,在每一个基本单元的最后一个宏块处理中通过线性回归的方法进行更新。

        JVT的码率控制比以往的标准更加困难。因为量化参数不仅在码率控制算法中使用而且在率失真优化中应用,从而导致一种称为“鸡与蛋"的悖论(Chicken and Egg Dilemma):为了在当前帧的宏块中应用率失真优化,首先要有一个量化参数,这个量化参数通过计算当前帧的MAD(Mean Absolute Difference)得到。然而,只有在率失真优化以后才能得到当前帧的MAD。并且编码处理所使用的信道带宽可能是恒定的,也可能是可变的。必须同时考虑恒定比特率(Constant Bit Rate,CBR)和可变比特率(Variable Bit Rate,VBR)两种情况。目前的码率控制机制大多针对恒定码率的情况.

        率失真理论是视频编码的一个基本部分。率失真优化(RDO)在给定的码率限制下最小化解码失真,Lagrangian方法可以在码率和失真之间有效地进行折中。在H.264标准中,Lagrangian方法用于运动补偿的模式选择和帧内预测。换言之,它可以在给定的码率限制下,最小化失真,寻找到块的最佳运动向量和编码模式。然而,Lagrangian方法的应用使码率控制变得更困难,因为QP涉及到码率控制和失真计算。换言之,码率控制方案在调整QP后将影响块的运动和模式选择。在MPEG.4码率控制中,可以在估计QP前通过执行二次R—D模型来获得X1,X2、MAD和目标比特数。但在H.264标准中,QP在码率控制和RDO中都指定了,因此在执行RC时就存在一个问题:对MB执行RDO,要先通过MB的MAD决定MB的QP,然而MB的MAD只有在RDO运行后才能获得。这就是一个蛋鸡悖论。


如上所述,在H.264标准的码率控制中存在两个问题:
1.在执行RDO之前,MAD是未知的。
2.虽然在运动补偿后可以获得每个编码模式的MAD,但最佳编码模式仍然未知,所以不能决定哪个MAD可以用于估计QP。
Ma等人提出了一个新的H.264码率控制方案,该方案没有考虑QP与MAD之间的相关性,但它不是single—pass码率控制算法。虽然该算法可以实现目标比特数且没有明显的比特变动,但执行RDO要花费2倍的时间,对宏块而言这样的时I司复杂度是不可接受的。

        H.264中的码率控制方法是以提案JVT—G012为蓝本的。JVT.G012提案通过引入基本单元和线形模型的概念,提出一种自适应基本单元层码率控制方案。基本单元可能是一帧、片或宏块。并提出了一种线性模型,通过前一帧相应位置的基本单元预测当前基本单元MAD。为阐述G012提案,本文首先对其中的关键技术进行分析。

1。基本单元的定义

       假设某一帧由Nmbpic个宏块组成,那么定义基本单元为一个由Nmbpic个宏块中连续的Nmbunit个宏块所组成的组。那么在该帧中的总的基本单元的个数为:

Nunit=Nmbpic/Nmbunit

        需要注意的是,如果采用了比较大的基本单元,那么PSNR可以达到一个较高的值,同时比特的波动也会增大。另一方面,如果采用了比较小的基本单元,比特的波动会比较的小,但是相应的会带来PSNR的损失。

2.流量往返模型(Fluid Tramc Model)

h.264的码率控制算法 - 雪中飞燕 - 我的博客

3.MAD的线性预测模型
       这里,该算法一个线性模型来预测当前帧中的基本单元的MAD值,它的参

h.264的码率控制算法 - 雪中飞燕 - 我的博客

预测模型参数a1和a2更新方法分为三步,如下所述:
      第一步一数据点选择:数据点是用于更新模型参数,数据点的数量以及质量对于模型的准确性有着重要的影响。通常而言,数据点越多,模型越准确。在JM86模型中,采用滑动窗口机制进行数据点的选择,窗口大小通常为20。
      第二步一计算模型参数:根据选中的数据点,算法收集预测的MAD和实际MAD的值,采用线性回归的方法,计算得到a1和a2。
      第三步一去除坏的数据点:在得到al和a2之后,根据滑动窗口中数据点的参考值,用a1和a2形成的预测模型计算数据点的预测值,然后将得到的值与数据点的原始预测值比较,计算误差,如果误差大于一定的值(JM中取误差的均值),则将该数据点去除,用更新后的数据点重新计算模型参数al和a2。

h.264的码率控制算法 - 雪中飞燕 - 我的博客

最后

以上就是沉静溪流为你收集整理的H.264的码率控制算法的全部内容,希望文章能够帮你解决H.264的码率控制算法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部