CABR是一种闭环内容自适应速率控制机制,可在降低视频编码输出码率的同时,保留更高码率编码的视觉感知质量。

文 / Tamar Shoham

译 / John

原文 https://blog.beamr.com/2019/09/11/cabr-content-adaptive-rate-control/

基于Beamer的帧级内容自适应速率控制进行视频编码
在视频方面,质量和比特率之间的权衡十分微妙。内容制作人希望最大限度地提高观众的质量,而存储和交付成本上的压力迫使人们需要尽可能降低比特率。内容自适应编码致力于通过使每个独一无二的内容(无论是完整剪辑还是单个场景)达到“最佳”比特率来解决这一挑战。我们的CABR技术在帧级别调整编码上取得了显著进展。CABR是一种闭环内容自适应速率控制机制,可在降低视频编码器编码输出文件的比特率的同时,保留更高比特率编码的感知质量。作为一种低复杂度的解决方案,CABR还可以用于直播或实时编码。 
视频服务,万众瞩目
根据Grand View Research的研究,从2019年到2025年,全球视频流媒体市场预计将以19.6%的复合年增长率持续增长。这一转变得益于Netflix、亚马逊和Hulu等消费级流媒体服务的日益普及,同时也得益于社交媒体网络和UGC视频平台(如Facebook和YouTube)以及其他应用程序(如在线教育和视频监控)上视频内容的不断扩张,保持视频工作流程的高效运转成为大家关注的焦点问题。因此,就编码和交付成本而言,升级视频编码以满足观众不断提高的对视频质量的期待已成为摆在视频服务提供商面前的首要命题。Beamer的CABR解决方案可以在不降低视频质量的情况下降低码率,同时保持较低的计算成本以提升视频服务的营收效果。
对比内容自适应编码解决方案
内容自适应编码不是使用固定的编码参数,而是根据视频剪辑的内容动态配置视频编码器以实现比特率和质量之间的最佳平衡。过去业界已经使用了各种内容自适应编码技术以降低交付成本并提供更好的用户体验。其中一些是完全手动的,其原理是针对每个内容类别手动调整编码参数,有些是基于场景级别上(例如大量的蓝光影片)调整。手动内容自适应技术在场景等方面都存在诸多限制。 
其他一些技术(例如YouTube和Netflix使用的技术)基于应用广泛的编码参数,对每个主题(Title)使用“蛮力”编码,然后通过使用速率失真模型或机器学习技术尝试为每个主题(Title)或场景单独设定编码参数。该方法需对每个主题(Title)以不同的分辨率和比特率执行多次完全编码,因此需要大量的CPU资源。此类技术适用于大小受限制的各种内容库,包括电视连续剧和电影等专业编码内容。但此方法不适用于视频的大规模存储库,例如UGC和实时编码。
Beamer的CABR解决方案与上述技术的不同之处在于,其在闭环中工作并适应每帧的编码:视频编码器首先使用基于其常规速率控制机制的配置对帧进行编码,从而进行初始编码;然后Beamer的CABR速率控制指令编码器使用各种编码参数值再次对同一帧进行编码,从而创建候选编码。使用获得专利的感知质量度量,CABR将每个候选编码与初始编码进行比较,随后选择出最佳候选并将其放置在输出流中,最佳候选是比特率最低但仍具有与初始编码相同的视觉感知质量的编码数据。 
利用Beamer的CABR速率控制
为了使Beamer的CABR技术能够实现以最小的视频码率达到以往高码率编码才能达到的视觉感知质量,我们尝试将每个视频帧压缩到最大程度以确保观众在观看激烈运动画面时能获得满意的视觉质量。图1是包含CABR技术的编码解决方案的流程架构示意图。 
图1 – CABR编码解决方案的流程架构示意图
集成的CABR编码解决方案由视频编码器和CABR速率控制引擎组成。CABR引擎则包含负责管理优化过程的CABR控制模块和评估视频质量模块。
如图2所示,CABR编码过程包括多个步骤。这些步骤中的一些会对每个编码会话执行一次,一些则会对每个帧执行一次,另一些则是对每个候选帧编码的迭代执行。当内容自适应编码会话被启动时,CABR引擎和编码器将被初始化。在此阶段,我们设置系统级参数如每帧的最大迭代次数,然后编码器速率控制模块通过应用其内部逻辑来对每个帧进行帧类型选择工作。
图2.包含内容自适应比特率编码的视频编码器的流程架构示意图。
编码器为CABR引擎提供每个原始输入帧,以便其在质量度量计算器中进行预分析。编码器使用其自身的逻辑(用于位分配、运动估计、模式选择、量化参数QP等)对帧执行初始编码;在对帧进行编码之后,编码器向CABR引擎提供与之对应的重构帧初始编码的帧以及一些辅助信息,例如以位为单位的帧大小和为每个MacroBlock或编码树单元(CTU)选择的QP。 
在每次迭代中,CABR控制模块首先确定是否应该重新编码该帧。例如根据帧类型、帧的位消耗、先前帧或迭代的质量以及根据为帧设置的最大迭代次数来完成。在某些情况下,CABR控制模块可能会决定完全不对帧进行重新编码;在这种情况下,初始编码帧将直接成为输出帧,而编码器将继续下一帧的编码工作;当CABR控制模块决定重新编码时,CABR引擎会为编码器提供经过修改的编码参数,例如建议的帧平均QP或与初始编码的QP之间的差值。请注意,这里的QP或增量QP值是平均值,每个编码块的QP调制仍可以由编码器执行。在更复杂的实施方式中,CABR引擎可以提供每个编码块值的QP图以及附加的编码器配置参数。
编码器使用修改后的参数对帧进行重新编码(请注意:此重新编码不是完全编码,而是利用初始编码中的许多编码决策;实际上编码器可以仅对帧进行重新量化,从而重新使用所有先前的运动矢量和模式决策。);然后编码器向CABR引擎提供重构的重新编码帧,该帧成为候选帧之一;接下来质量度量模块计算相对于初始编码帧的候选重新编码帧的质量,并将此质量分数以及编码器报告的码率消耗一起提供给CABR控制模块,CABR控制模块再次确定该帧是否应该重新编码;在这种情况下,CABR控制模块会为下一次迭代设置编码参数并重复上述过程;如果控制模块确定对最佳帧参数的搜索已完成,则它将指示出,应在输出视频流中使用该帧的所有先前编码版本中的特定帧。请注意——编码器速率控制模块从当前帧的初始编码接收其反馈,下一帧的初始编码(确定比特流的目标质量)不会受到影响。 
CABR引擎可以以串行迭代方式或并行方式运行。在串行方法中,先前迭代的结果可用于选择下一个迭代的QP值;在并行方法中,CABR引擎同时提供所有候选QP值并且并行进行编码过程以减少等待时间。
将CABR引擎与软件和硬件编码器集成
Beamr已将CABR引擎集成到其AVC软件编码器Beamer 4和HEVC软件编码器Beamer 5中。实际上CABR引擎可以与任何软件或硬件视频编码器集成,同时支持任何基于块的视频标准,例如MPEG-、AVC、HEVC、EVC、VVC、VP9和AV1。 
要将CABR引擎与视频编码器集成在一起,编码器应支持多项条件:首先,编码器应该能够使用几个不同的编码参数(例如QP值)对输入帧(已经编码的帧)进行重新编码,并保存每个编码的不同阶段状态,包括初始编码;保存状态的原因是当CABR控制模块选择一个候选帧编码(或初始编码)作为输出流中的一种时,编码器的状态应对应于候选帧编码后的状态;通常情况下,支持多线程操作的编码器和硬件编码器通常具有此功能,因为每个帧编码都是由无状态单元执行的。 
其次,编码器应支持一个接口以提供重构帧和编码帧的每块QP和码率消耗信息。为了提高计算性能,我们还建议编码器支持部分重新编码模式,在该模式下,编码器可以将在初始编码中发现的与运动估计、分区和模式决策有关的信息用于重新编码而无需再次计算;这样便使得对于每个候选编码,仅需要重复量化和熵编码阶段;而与完全重新编码相比,这样也使得优化编码结果的最小编码效率下降,并且带来显着的速度提升。如上所述,我们建议编码器将初始编码数据(QP、压缩大小等)用于其速率控制状态更新;而将CABR引擎与支持并行编码且不增加延迟的硬件编码器集成时,我们建议使用并行搜索方法,允许每帧同时评估多个QP值。如果硬件编码器可以执行并行部分编码(例如仅进行重新量化和熵编码)而所有并行编码都使用初始编码的分析阶段(例如运动估计和模式决策),则可以实现更好的CPU性能。 
样品编码结果
下面,我们提供了两个基于CABR引擎编码的示例结果,当与Beamer 5集成时,Beamer的HEVC软件编码器将分别说明CABR的不同方面。
对于第一个示例,我们将多个4K 24FPS源剪辑片段按照目标码率为10 Mbps进行编码,每个剪辑的样本帧如图3所示。剪辑的内容复杂度各不相同:“人群奔跑”(上)具有很高的复杂性,因为其画面中的众多跑步者具有大量细节和非常重要的动作;“ 家庭聚会”(左下)则具有中等复杂度,同时还有一些视频压缩方面的挑战,例如不同的照明条件和相当高的胶片颗粒感;最后,由于相对较低的运动和简单的场景,Beamr制作的“人物采访”(右下)剪辑片段具有较低的复杂性。 
图3.测试剪辑中的样本帧。上:人群运行 左下:家庭聚会 右下:人物采访。
我们使用Beamr 5 HEVC编码器的VBR模式(执行常规编码)和CABR模式(可创建较低的码率),将每个剪辑中的500帧编码为10 Mbps的目标码率。对于高复杂度的剪辑“人群奔跑”来说,基于如此严苛的码率条件提供足够出色的质量非常困难,CABR仅将码率降低了3%;对于中等复杂性片段“ 家庭聚会”来说,CABR所能节省的码率更多,达到了17%;对于最低复杂度的剪辑“人物采访”,CABR将码率降低了惊人的45%,同时仍获得了与10 Mbps VBR编码质量相当的出色质量。可观的码率降低百分比证明了CABR增强编码器具有足够的内容自适应特性,可以达到令人满意的码率节省效果,
第二个示例使用来自Blender开放电影项目的著名电影“Tears of Steel”中的500帧1080p 24 FPS剪辑电影片段,使用Beamer 5 HEVC软件编码器的VBR和CABR模式对同一片段进行编码并以三个目标码率输出:1.5、3和5 Mbps。在这种情况下,对于最低码率(可产生1.4 Mbps编码)CABR模式可节省13%;对于中等码率(可产生1.8 Mbps编码)则可节省44%;对于最高码率(可产生2 Mbps编码)则可节省62%。
图4.来自“钢之泪”的1080p 24 FPS的样本编码为5 Mbps(顶部)和1.5 Mbps(底部),以VBR模式(左)和CABR模式(右)编码
图4和5显示了来自编码剪辑的样本帧,左侧为VBR编码,右侧为CABR编码。顶部的两个图像是从源编码到5 Mbps码率的帧,而底部的两个图像是从1.5 Mbps编码得到的帧。如图所示,两种目标码率为5 Mbps的编码帧均保留细节,例如下唇的纹理或右眼上方额头上的两根头发的纹理,而在较低码率的编码帧中,这些细节有些模糊。这就是以不同目标码率开始编码时CABR不会收敛到相同码率的原因。但是,我们还看到,初始编码情况越好通常可以获得更多的码率节省。此示例表明,CABR不仅适应内容的复杂性,还适应目标编码的质量,并在提供可观节省的同时保留满足运动画面的感知质量。
图5.图4中的脸部特写视图,显示了以VBR模式(左)和CABR模式(右)进行编码的5 Mbps(顶部)和1.5 Mbps(底部)的嘴唇和额头细节。

LiveVideoStackCon 2019深圳讲师招募

12月13-14日,LiveVideoStackCon首次来到深圳,将全球前沿多媒体技术实践与深圳本地产业结合,触发技术与商业灵感。欢迎将你的技术实践、踩坑与填坑经历、技术与商业创业的思考分享出来。请将个人资料和话题信息邮件到 speaker@livevideostack.com 或点击【阅读原文】了解成为LiveVideoStackCon讲师的权益与义务,我们会在48小时内回复。

LiveVideoStack 秋季招聘

LiveVideoStack正在招募编辑/记者/运营,与全球顶尖多媒体技术专家和LiveVideoStack年轻的伙伴一起,推动多媒体技术生态发展。同时,也欢迎你利用业余时间、远程参与内容生产。了解岗位信息请在BOSS直聘上搜索“LiveVideoStack”,或通过微信“Tony_Bao_”与主编包研交流。

CABR:Beamer的内容自适应速率控制算法相关推荐

  1. 内容自适应编码中的不同粒度

    根据不同粒度的CAE,可以实现从粗犷和精确的内容感知编码,从而提升带宽利用率,为用户提供更好的观看体验. 文 / Dane Kottke 译 / 王月美 审校 / Ant 原文: http://euc ...

  2. tcpreplay 发包速率控制算法研究

    一.  序 1.1  tcpreplay历史 Tcpreplay 的作者是Aaron Turner,该项目开始于2000年,早期的功能是对tcpdump等抓包工具生成的网络包(即pcap文件)的回放, ...

  3. jQuery简单实现iframe的高度根据页面内容自适应的方法(转)

    本文实例讲述了jQuery简单实现iframe的高度根据页面内容自适应的方法.分享给大家供大家参考,具体如下:方式1://注意:下面的代码是放在和iframe同一个页面中调用 $("#ifr ...

  4. 解决 android 高低版本 webView 里内容 自适应屏幕的终极方法

    解决 android 高低版本 webView 里内容 自适应屏幕的终极方法 参考文章: (1)解决 android 高低版本 webView 里内容 自适应屏幕的终极方法 (2)https://ww ...

  5. as3 内容自适应容器大小

    package {importflash.display.Sprite;importflash.display.Bitmap;importflash.display.Graphics;/*示例内容自适 ...

  6. python PyQt5 adjustSize()(根据内容自适应大小)

    示例: adjustSize() 根据内容自适应大小 参考文章:pyqt5-QWidget坐标系统和大小和展示区域

  7. html页面根据分辨率缩放,html2Canvas根据不同分辨率,生成pdf内容自适应

    根据屏幕大小不同,页面内容自适应并一页展示,应该如何实现 // 导出页面为PDF格式 import html2Canvas from 'html2canvas' import JsPDF from ' ...

  8. 文本框根据输入内容自适应高度

    2019独角兽企业重金招聘Python工程师标准>>> jQuery实现 (function($){$.fn.autoTextarea = function(options) {va ...

  9. uilabel 自行撑开高度_textarea高度随内容自适应增高撑开

    一般情况下,就是为textarea设定为一定的高度的文本框,然后当输入的内容超过设定的高度的时候,就会出现滚动条,这样显示是不太美观的,因此就出现需要textarea随输入文本内容高度自适应的需求. ...

最新文章

  1. 英国皇家学会院士樊文飞:把大数据变小,突破企业资源限制
  2. 汉拓中国CRM评估报告简介
  3. 酷酷实训计划及测试计划
  4. String 字符串去除特殊字符和空格,正则表达式使用,%1$s
  5. java后台传一个对象到前台_前台判断对象中的一个布尔值_前后台分离的项目中,如何优雅的传输boolean类型的参数...
  6. 怎样在html中显示时间,如何在网页上显示当前时间
  7. Zookeeper的Leader选举-选举过程介绍比较清晰
  8. 二十个方法鼓励自己最有效
  9. hbase 特性与api
  10. Linux 下压缩与解压.zip和.rar
  11. 权威!盘点 100 个最受欢迎的 Java 库!绝对经典
  12. 如何与导师有效沟通你的论文选题?
  13. 浅谈低成本视频动作捕捉技术
  14. 无效的m3u8怎么办_你还在为m3u8文件如何转换而发愁?看了我就有答案了
  15. springmvc(2)处理器设配器和映射器
  16. 公司企业邮箱账号格式怎么填?
  17. 电脑计算机u盘启动不了桌面图标,电脑开机后没有桌面图标
  18. springcloud之简介
  19. 巴基斯坦:软件服务外包行业的后来者 (zz)
  20. 基于互联网的农产品销售平台的设计与开发

热门文章

  1. 腾讯云副总裁答治茜:移动互联网破局要借助“三张网”
  2. 惠普再“卖身”,软件业务卖给了这家鼻祖级公司
  3. LinuxUSB驱动程序调试--009:编写应用程序---验证协议【转】
  4. linux -- at命令
  5. Linq之隐式类型、自动属性、初始化器、匿名类
  6. jbpm系列之五--使用decision节点判断分支情况
  7. poj 3468 A Simple Problem with Integers(线段树区区)
  8. 我的WCF之旅(13):创建基于MSMQ的Responsive Service
  9. 剑指-二维数组中的查找
  10. vb编程软件_原创经验,如何安装vb编程软件