当前位置: 首页 > news >正文

音视频之H.265/HEVC速率控制

 H.265/HEVC系列文章:

1、音视频之H.265/HEVC编码框架及编码视频格式

2、音视频之H.265码流分析及解析

3、音视频之H.265/HEVC预测编码

4、音视频之H.265/HEVC变换编码

5、音视频之H.265/HEVC量化

6、音视频之H.265/HEVC环路后处理

7、音视频之H.265/HEVC熵编码

8、音视频之H.265/HEVC网络适配层

9、音视频之H.265/HEVC编解码并处理    

10、音视频之H.265/HEVC率失真优化

11、音视频之H.265/HEVC速率控制


        视频传输带宽通常都会受到一定限制,为了在满足信道带宽和传输时延限制的情况下有效传输视频数据,保证视频业务的播放质量,需要对视频编码过程进行速率控制。所谓速率控制,就是通过选择一系列编码参数,使得视频编码后的比特率满足所需要的速率限制,并且使得编码失真尽量小。速率控制属于率失真优化的范畴,速率控制算法的重点是确定与速率相关的量化参数(QuantizationParameter,QP)。

一、视频编码速率控制:

        1、速率控制的基本原理:

        音视频之H.265/HEVC率失真优化中剖析了视频编码的率失真特性,同一视频使用不同的编码参数将产生不同的编码速率和视频质量。因此,可以通过调节编码参数使得编码速率与目标速率一致,以达到速率控制的目的。在率失真优化准则下确定的编码参数中,视频编码速率主要与量化参数密切相关,并且遵循一定的规律。速率控制的主要工作是建立编码速率与量化参数的关系模型,根据目标码率确定视频编码参数中的量化参数。

        基于率失真优化知识,一个视频序列的速率控制问题可以描述为:在总编码比特数小于或等于R_{C}的条件下,为每一个编码单元确定最优的量化参数,使得总失真最小,即

        以图像作为编码单元为例,其中N为该序列包含的图像数,D_{i}为第i幅图像的失真,Q^{*} = (Q^{*}, ...,Q_{N}^{*})为各图像的最优量化参数。实际视频编码标准中拥有独立量化参数的最小单位通常是宏块(H.265/HEVC为CU),如果允许控制宏块级的量化参数,速率控制就需要确定所有宏块的最优量化参数。另外,对于变速率的情形,可能需要控制每个编码单元使其满足一定的编码比特限制,即

        其中,R_{j.c}为第i个编码单元的编码比特数限制。

        由于视频编码算法采用了大量的帧内、帧间预测技术,导致编码单元的率失真性能相互依赖,直接根据式(12-1)利用率失真优化技术确定编码单元的量化参数复杂度极高,因此,实际的速率控制方案通常会被分解为两个步骤:

  1. 考虑视频在空域、时域的相关性,根据总的目标比特数确定每个编码单元的最优目标比特数,这被称为比特分配;
  2. 依据编码速率与量化参数的关系模型,为每个编码单元根据其目标比特数独立确定其量化参数。

        比特分配的目的是为每个编码单元分配最优的目标比特数,使得视频编码后总的失真最小,即利用率失真优化技术为每个编码单元分配目标比特数,可以描述为

        由于各编码单元的率失真性能相互依赖,因此该步骤的关键是考虑各编码单元之间率失真性能的相关性,实现最优比特分配。

        当每个编码单元的目标比特数确定后,速率控制的第二个步骤即为根据每个编码单元的目标比特数独立确定其量化参数,可以描述为:

        由于编码单元的编码速率主要与量化参数相关,其他编码参数的影响较小,因此编码速率与量化参数有着较为确定的关系,可以基于这一关系直接根据编码单元的目标比特数确定其量化参数。

        这一环节需要强调的是,编码速率和量化参数的关系与视频的内容特性密切相关。图12.1给出了视频序列“BQSquare”采用HM10.0测试模型得到的编码速率(单位为bits),采用低时延模式,每一幅图像使用相同的量化参数32,GOP大小为4。从图12.1可以看出,在量化参数保持不变的情况下,编码速率随着编码时间的变化而变化。在第3~4秒之间,编码比特数迅速增加,这是由于视频序列发生了场景切换,时域复杂度较高;而在第4~7秒内,编码比特数呈下降趋势,这是由于这一段视频内容的时域和空域复杂度较低。一般来说,当量化参数一定时,视频序列空、时域复杂度越高,产生的编码比特数也越高;反之,则会产生较少的编码比特数,编码速率将会随着视频内容的变化而不断变化。

      

        2、缓冲机制:

           视频的编码速率与编码参数、编码结构、视频内容等诸多因素密切相关,速率控制算法通常无法保证实际编码速率与目标速率完全一致。为了减小二者之间的差别,通常会在编码器和传输信道间建立一个数据缓存区,称为“缓冲(buer)机制”,用于平滑编码速率和信道速率之间的差别。此外,缓冲区还可以容忍一定的速率波动,以避免编码速率与信道速率随时保持一致而引起的视频质量波动。

        图12.2给出了一个实际的视频传输系统,编码器输出的视频码流首先进入缓冲区,缓冲区中的数据以“先进先出”(FirstInFirst Out,FIFO)的原则按信道速率进行传输。与之对应,在解码器和信道间也通过缓冲区来调节信道速率与编码速率的差异。

        缓冲机制可以使编码速率更好地匹配信道速率,然而,它的存在不但会消耗一定的存储空间,而且会引入时延。一般来说,缓冲区越大,消耗的存储空间也越大,适应信道速率的能力越强,但也会导致解码时延增大。因此,在实际应用中,缓冲区的大小往往由允许的最大时延及运营成本决定。对于有限的缓冲区,在进行速率控制时需要避免缓冲区溢出。

        为了设计含有缓冲区的速率控制算法,通常将缓冲区的动态变化过程用流体流量模型来表示。令B_{c}(n)表示时刻的缓冲区充盈度,则n+1时刻的缓冲区充盈度为

        其中,A(n)表示n时刻的实际编码速率,u(n)为时刻的信道速率式(12-3)反映了缓冲区充盈度的动态变化,视频编码速率的流体流量控制模型如图 12.3所示。

        为了有效发挥缓冲区的作用,需要将缓冲区内的数据量维持在一定水平,以应对信道速率的变化以及编码速率与目标速率的匹配误差。使用缓冲区的视频编码速率控制的基本思想如下:如果实际编码速率比可用的信道带宽高,则多余的比特会在缓冲区中积累。当缓冲区中的比特数累积到一定高度时,速率控制算法会采取一定措施适量减小实际编码速率,以降低缓冲区充盈度;反之,当缓冲区充盈度低于一定程度时,速率控制算法会适量增加实际编码速率,使得缓冲区充盈度回升至一定水平。

        3、速率控制技术:

        视频编码中的速率控制过程如图12.4所示,首先为编码单元进行目标比特分配,即根据视频内容、缓冲区状态和信道带宽为编码单元分配恰当的目标比特数;进而为编码单元独立确定量化参数实现分配的目标比特,其关键是确定量化参数,因此这个环节称为量化参数确定。

        目标比特分配:

        视频编码标准中拥有独立量化参数的最小单元通常是宏块(H.265/HEVC为CU),即速率控制可以为每个宏块确定不同的量化参数。因此,实际的速率控制算法可以作用于不同的编码单元等级,如图像组(GOP)级、图像(Frame)级、片(Slice)级、宏块(Macroblock)级等,这主要取决于与目标速率的匹配精度需求和速率控制算法复杂度限制。如图像级速率控制为每幅图像确定一个量化参数,因此该图像所有宏块都采用这一量化参数,这将无法精确匹配目标速率以毫秒级变化的无线信道,并且无法反映出不同宏块内容所具有的不同率失真性能,进而影响编码效率,但图像级速率控制具有复杂度低的优点。

        对于宏块级速率控制,每个宏块拥有独立的量化参数,可以为视频提供更精细的速率控制。一个视频序列拥有大量的宏块,直接对宏块进行目标比特分配仍然过于复杂。因此,通常采用分级的方式来简化目标比特分配问题,依次可以是GOP级、图像级、宏块级,即首先为每个GOP确定目标比特数,其次根据每个GOP的目标比特数确定其中每一幅图像的目标比特数,最终确定每个宏块的目标比特数。

        如式(12-2),每个层级的比特分配都需要利用率失真优化技术为每个编码单元分配目标比特数,以达到最优的编码性能。对于率失真性能相对独立的编码单元,如GOP之间通常独立编码,不同编码单元的率失真性能主要与编码单元的内容特性相关。而对于率失真性能相互依赖的编码单元,如采用了帧间预测技术的各编码图像,则需要重点考虑编码单元率失真性能间的相互依赖关系。下面将以图像层为例讨论率失真性能相互依赖的编码单元的比特分配,以宏块层为例讨论率失真性能独立的编码单元的比特分配。

        1)图像层目标比特分配:

        图像层目标比特分配的重点是关注图像率失真性能间的相互依赖关系,因为参考图像的率失真性能直接影响当前图像的率失真性能。已知当前GOP的目标比特数R_{c},则图像层的目标比特分配问题可描述为

        其中,N为该GOP包含的图像数,D_{i}为第i幅图像的失真,R_{i}为第i幅图像的编码比特数,R_{T}^{*} = (R_{T_{i}}^{*},...,R_{T_{N}}^{*})为最佳比特分配方式。采用拉格朗日优化方法可以将其转换为无约束条件下的求极值问题:

        如式(12-6),第i幅图像的失真D_{i},不仅与该图像的编码比特数R_{i}有关,还与己编码图像的失真相关。但当已编码图像的失真确定后,D_{i}只与该图像的编码比特数R_{i}相关。\omega _{i}D_{i}包含了该图像对其他后续图像的影响。因此,

        然而,式(12-10)中的参数\alpha _{i},\omega _{i},\lambda分别与视频的内容、时域预测结构、总目标比特数相关,多变的视频内容以及复杂的编码算法使得实际中往往无法准确获得相关参数,通常并不直接使用式(12-10)确定每一幅图像的最优目标比特数。但对于固定的时域预测结构,内容特性稳定的视频,不同图像之间的最优目标比特数具有较为稳定的关系:

        再结合\sum_{i= l}^{N}R_{i} = R_{c}可以实现目标比特分配。因此,在实际速率控制中的目标比特分配环节,可以根据不同的时域预测结构为不同的图像分配不同的权重。需要注意的是,每幅图像的权重应与视频内容特性、时域预测结构以及总的目标比特数相关。 

        2)宏块层目标比特分配:

         对于宏块层的比特分配,采用帧内预测模式宏块的率失真性能与参考宏块的率失真性能关系密切;对于使用帧间预测模式的宏块,其运动信息也可由空域相邻宏块预测得到,但由于运动信息可以有多个选择,以至于使用帧间预测模式宏块的率失真性能受相邻宏块影响较小。因此,对于允许采用帧间预测的P图像,采用间模式的宏块占大多数,通常忽略宏块间率失真性能的依赖性进行比特分配。

        可以看出,每个宏块的目标比特数与视频内容直接相关,如背景区域待编码的残差较小,其分配的码率应较少;而细节和运动比较剧烈的区域待编码的残差较大,其分配的码率应较大。

        需要注意的是,实际编码单元的失真并不是加性的,视频序列的质量并不是所有图像质量的求和或求平均,图像的质量也不是所有宏块质量的求和或求平均。但是由于对人的视觉认知机制还不清楚,目前仍没有可以准确体现视频主观质量的客观测度。大量主观实验已经表明,空域、时域的质量波动容易影响视频序列的整体质量,视频时空域质量的一致性已经成为了衡量速率控制算法性能的一个重要方面。因此,在使用式(12-1)进行优化的过程中,需要考虑视频时空域的质量波动,通常的做法是将质量波动控制在一定范围内。

        量化参数确定:

        速率控制的第二个步骤是根据编码单元的目标比特数独立确定其量化参数。在基于块的混合视频编码框架下,编码速率主要取决于量化参数。因此,该步骤的关键是建立速率一量化参数(R-QP)模型,进而用其估计目标编码速率所对应的量化参数。下面将以二次R-QP模型为例分析其合理性,并简单介绍其他R-OP模型。

        1)二次模型:

        实验表明,采用早期视频编码标准得到的DCT系数服从拉普拉斯分布,其率失真函数为

        2)一阶线性模型:

        3)对数模型:

        4)指数模型:

        5)分段模型:

        根据变换系数服从方差为\sigma ^{2}的拉普拉斯分布,可以得到如下的分段模型。

        6)R-\lambda -QP模型

        7)R-\sigma -QP模型:

二、H.265/HEVC速率控制:

        速率控制是视频编码器中必备的关键模块,H.265/HEVC编码器同样需要相应的速率控制算法。与以前的视频编码标准相比,H.265/HEVC标准采用了大量的新编码技术,这使得以前标准所推荐的速率控制算法,如MPEG-2的 TM5、H.263的TMN8和 H.264/AVC的JVT-G012等不能直接用于H.265/HEVC。这主要是因为:时域预测技术使帧间的率失真性能关系复杂;新的帧内预测及运动信息的空间预测使得CTU间也具有复杂的率失真性能依赖关系;新的CABAC技术更好地利用了变换系数间的相关性,使得R-Q关系更加复杂。

        H.265/HEVC 的速率控制算法仍然可以采用传统的两步骤方式:目标比特分配和量化参数确定。

  • 目标比特分配的核心在于:考虑视频帧率失真间的相互依赖关系实现图像级的目标比特分配,考虑视频内容的CTU级目标比特分配。
  • 量化参数确定环节的核心在于:根据视频内容建立编码比特数与量化参数的关系模型。

        如前文所述,速率控制不属于H.265/HEVC 标准化的内容。但由于速率控制是视频编码器中必备的关键模块,因此随着H.265/HEVC标准关键技术的确定,相应的速率控制算法也不断出现。在2012年2月JCT-VC第8次会议上,提案H0213提出了基于R-Q模型的速率控制算法。Bin Li等以λ为纽带建立了R-λ与λ-QP 模型用于确定编码单元的量化参数,并于JCT-VC第11次会议中提出了K0103速率控制提案。与H0213相比,K0103提案速率控制更为精确,比特波动更小,因此该提案加入了HM9.0测试模型中并取得了良好的编码性能。在此基础上,提案 M0036对每个编码单元的比特分配权重进行了改进。

        JCTVC-K0103是H.265/HEVC测试模型HM10.0的速率控制算法,本节将对其进行详细介绍。该速率控制算法主要分为两个步骤:

  1. 根据目标码率为不同编码单元分配目标比特数;
  2. 根据 R与λ,λ与QP的关系模型确定不同编码单元的量化参数。

      1、目标比特分配:

        该目标比特分配算法仍采用分级策略(GOP级、图像级、CTU级)依次为不同编码单元分配目标比特。

        GOP级目标比特分配:

        视频序列在编码时通常被划分为多个连续的GOP,GOP通常采用固定的时域编码结构,是速率控制算法需要处理的最大编码单元。GOP级目标比特分配是指根据信道速率和缓冲区状态为每个GOP分配目标比特数。当前GOP的总目标比特数T_{G}

         图像级目标比特分配:

        

        CTU级目标比特分配:

        2、量化参数确定:

        实验表明,双曲函数能够很好地反映H.265/HEVC 视频码率和失真之间的关系:

        其中,C和K是与视频内容特性有关的模型参数。则拉格朗日优化因子λ为:

        其中,\alpha\beta与视频内容特性有关。另外,实验结果表明量化参数QP和\ln \lambda之间存在如下线性关系:

        因此,联合式(12-18)和式(12-19)就可以根据编码单元的目标比特数确定其量化参数。

        JCTVC-K0103 提案就采用了这一思路,量化参数确定过程具体可分为两个步骤:

  • 根据编码单元的目标比特数得到其对应的λ值:
  • 由λ和量化参数的关系确定每个编码单元的量化参数。下面详细介绍图像级、CTU 级量化参数的确定方法。

        图像级量化参数确定:

        

        CTU级量化参数确定:

参考资料:

                《新一代高效视频编码 H.265/HEVC 原理、标准与实现》——万帅 杨付正 编著

相关文章:

  • 图的几种存储方法比较:二维矩阵、邻接表与链式前向星
  • 利用Spring Boot和Redis构建高性能缓存系统
  • 使用MybatisPlus实现sql日志打印优化
  • 洛谷P1093 [NOIP 2007 普及组] 奖学金
  • 丝杆升降机在锂电行业的自动化应用有什么?
  • MySQL 存储过程优化实践:项目合同阶段数据自动化处理
  • 基于 ABP vNext + CQRS + MediatR 构建高可用与高性能微服务系统:从架构设计到落地实战
  • 源码分析之Leaflet中TileLayer
  • Linux Bash 中 $? 的详细用法
  • 每日算法 -【Swift 算法】寻找两个有序数组的中位数(O(log(m+n)))详细讲解版
  • 深挖navigator.webdriver浏览器自动化检测的底层分析
  • k8s1.27版本集群部署minio分布式
  • jQuery Ajax中dataType 和 content-type 参数的作用详解
  • MySQL 8.0 OCP 英文题库解析(六)
  • Java中字符串(String类)的常用方法
  • 海康威视摄像头C#开发指南:从SDK对接到安全增强与高并发优化
  • win7无线网络名称显示为编码,连接对应网络不方便【解决办法】
  • 基于springboot的校园二手电动车 交易可视化系统【附源码】
  • 【Jitsi Meet】(腾讯会议的平替)Docker安装Jitsi Meet指南-使用内网IP访问
  • docker- Harbor 配置 HTTPS 协议的私有镜像仓库
  • 美发布“金穹”导弹防御系统发展规划
  • 为俄乌一日三通电话,这里成“关键战场”?
  • 存款利率、LPR同日下调,机构称对银行的影响偏正面
  • 新质观察|低空货运是城市发展低空经济的第一引擎
  • 最高法:依法惩治损害民营企业合法权益的串通投标行为
  • 调查:“网约摩的”上线起步价五六元,合规性及安全性引质疑