专栏首页媒矿工厂【视频编码】 Content Aware ABR技术(十一)

【视频编码】 Content Aware ABR技术(十一)

在本系列前面的帖子中,我们连续梳理了Netflix、YouTube、Beamr、EuclidIQ、Bitmovin、Harmonic、V-Nova、Cisco、MediaMelon及AWS Elemental在CAE (Content Aware Encoding) for ABR领域的一些进展,本文将简要介绍一下编码优化领域的另一位成员 — Mux在这方面的技术动态。

什么是自适应比特率?

自适应比特率(ABR)流媒体是目前在线视频业务的关键技术。由于不同用户的带宽和设备差异很大,因此无法将同一个视频码流数据发送给所有用户(并非每个用户都有8Mbps的可用带宽来观看1080p视频,而且有些设备不支持1080p)。十年前通常采用的策略是让用户自己选择合适的视频流,如YouTube播放器中的质量选择器(下图左):

但这种方法表现不佳,因为用户并不总是知道他们可以播放什么样的视频而不会出现卡顿。 但ABR技术可通过让视频播放器根据用户端可用带宽和设备分辨率等因素自动决定要使用的播放格式来解决此问题。如果带宽状况较好,视频播放器可以选择播放更高质量的节目。如果带宽降低,播放器可以自动切换到较低质量的节目。例如,YouTube播放器上的“自动”选项设置(上图右)。

通常,编码时选择的分辨率和比特率称为比特率阶梯(bitrate ladder)。Apple提供了一种常用的分辨率比特率组合阶梯,作为其iOS设备视频编码推荐配置的一部分。下表是Apple推荐的静态(或固定)比特率阶梯。其中,第一列是推荐的分辨率,第二列是推荐的比特率,第三列是推荐的帧率。

静态的比特率阶梯其实是比较低效的。原因在于,不同视频内容在复杂度方面差异很大,因此针对不同类型的视频所采用的编码配置需要作出相应的调整。例如,家庭剧、动作片、游戏节目和足球比赛等需要完全不同的编码配置。此外,即使是对于同一类型的视频也可能会需要截然不同的编码配置。 什么是Per-Title Encoding?

如上所述,实际中如果对每个同类型的输入视频使用相同的比特率和分辨率配置,编码效率会很糟糕。在2015年,Netflix率先推出了Per-Title Encoding编码方案。其主要处理步骤如下: 1. 使用不同的比特率和分辨率组合对每个输入视频进行数十次测试编码 2. 采用新的质量测量工具(VMAF)对编码结果进行评估比较 3. 根据用户实际网络带宽和设备状况,选择最优的比特率和分辨率组合以提供最佳的视觉质量

Netflix以不同比特率和分辨率组合对输入视频进行编码测试,以便在比特率集合中的每个点上找到对应的比较合适的分辨率大小。对于一个视频,在1Mbps带宽下,最好的质量可能在编成720p时达到。类似地,对于其他视频,在相同的带宽下,360p或1080p可能会更好。可以预计这样做会有一定的提升效果。Netflix预估使用该方法后比特率可以降低20%(30%,如果能达到per-scene级优化)。较低的比特率意味着用户可以获得更佳的视觉质量、更快的启动时间(startup time)和更少的重新缓冲(rebuffering)。同时,可以减少流媒体成本开销。有关Netflix Per-Title Encoding的细节详见本系列之前的帖子。

这种方法在实际中确实取得了一定的效果,但也存在一些问题。Netflix提出的这种方法需要对工程时间和视频编码团队进行重大投资。大多数公司没有一个非常专业的视频编码专家团队,他们可能需要花费几个月的时间来构建Per-Title Encoding编码优化系统。在资源开销方面,Netflix的这种编码方式要比普通方法消耗20倍左右的资源成本。此外,Per-Title Encoding编码优化处理过程比较缓慢。使用标准方法进行完整的Per-Title Encoding编码优化需要几个小时。

目前,Mux 推出的Instant Per-Title Encoding编码技术改变了这一状况,可以在较短的时间内为每个输入视频提供较好的per-title ABR编码配置组合。下面将简要介绍Mux 的Instant Per-Title Encoding编码优化技术。 Instant Per-Title Encoding

解决上述这些问题的方法是利用机器学习。视频基础架构服务公司Mux(包含Mux Data和Mux Video等产品服务)在今年四月份宣布推出了Instant Per-Title Encoding编码优化技术。该技术提供了一种基于AI的视频编码方法,通过利用神经网络的强大功能,Instant Per-Title Encoding宣称能够最快在毫秒级的时间内为输入视频创建单独的自适应编码配置阶梯(encoding ladders)。Mux 的Instant Per-Title Encoding编码优化技术宣称相比其他Per-Title Encoding编码方法可将编码后的视频文件大小减少多达30%,视频质量提高约15%,有效降低各类成本开销,处理速度加快至少1000倍(数据来源于官网介绍)。对于Mux Video而言,这个处理速度至关重要,它使用的即时转码工具可以在数秒内发布新的视频流,而传统的Per-Title Encoding编码优化的方法通常需要几个小时的处理时间。

目前,视频数据已占网络流量的70%左右,而且到2021年在线视频数据流量预计将翻一番。随着互联网技术的发展和智能移动终端的普及,高性能的视频压缩技术变得越来越重要。Accel Partners的风险投资家Daniel Levine表示:“由于成本和复杂度的原因,到目前为止Netflix之前提出的Per-Title Encoding编码方案已经远远不能满足视频服务提供商的需求。目前利用机器学习的方法使得Per-Title Encoding编码方案适用于大规模视频编码处理是备受青睐的。”

Mux的联合创始人兼首席执行官 Jon Dahl表示,“Per-Title Encoding编码是过去几年视频编码应用领域比较重要的进展之一,我们所推出的Instant Per-Title Encoding成为了Per-Title Encoding编码方案第一个真正意义上对视频进行实时编码处理的方法。目前,观看视频已经是大多数网络用户上网的首要选项,因此高效实时的视频编码技术具有非常重要的意义。”

对于Instant Per-Title Encoding,Mux创建了数以万计的编码测试集,以便找到质量、比特率和分辨率的凸包。然后在这个数据集上训练了一系列神经网络。当一个新的视频输入到Mux Video时,它会通过AI模型进行快速分析,并输出最佳的编码阶梯。那么Instant Per-Title Encoding的AI模型准确度如何呢?Mux已经在该模型上测试了一些新的视频集,结果显示要比Apple的静态比特率阶梯更加准确。随着输入到训练模型的视频越来越多,模型精度和编码质量也会越来越高。

Instant Per-Title Encoding的处理步骤

Instant Per-Title Encoding编码通常由两个步骤组成:预测步骤和训练步骤。

第一步,每当有新视频输入Mux Video时,Instant Per-Title Encoding编码工具会提取一组视频帧作为一个序列并解码为RGB arrays。这些RGB arrays之后会送入Mux的基于AI的凸包生成器(convex hull generator)- Halfpipe。Halfpipe主要通过一个多层神经网络将这些帧数据进行处理,输出其per-title比特率配置阶梯,该配置遵循对应的最优分辨率、比特率和质量的凸包。所有这些处理操作都能最快在毫秒级的时间内完成,这意味着在Mux Video读入新视频时可以同步进行内容自适应编码处理。

第二步,输入到Mux Video中的新视频将会被用作训练集数据。Mux Video会对之前未接触过的具有新特性的视频应用完整的、高质量的Per-Title Encoding编码过程,并在此结果上训练Halfpipe模型。这意味着Mux的Instant Per-Title Encoding编码系统会随着时间的推移性能会变得更好,并能自动适应它所处理的视频内容。 测试结果

Mux使用Instant Per-Title Encoding在三个视频评估集上进行测试运行,并比较了基于AI的结果与实际测试得到的凸包的接近程度。其中,“Trailers”数据集由31个较短的电影预告片组成,“Broadcast”数据集是由4个较长的广播电视节目的片段组成,“Xiph”数据集是由Xiph.org Video Test Media [derf’s collection](https://media.xiph.org/video/derf/)的9个视频片段组成。根据Apple推荐的静态比特率配置阶梯,每个视频片段会被编码8次得到8种码率版本,总共有352个编码输出。以下两个表分别给出了Instant Per-Title Encoding和Static bitrate ladder各自得到的凸包与真正凸包的接近程度,以及两者编码质量的比较。可以看出,Mux Instant Per-Title Encoding的测试结果明显更好。 Root Mean Square Error: Mux and Static vs. full convex hull (lower is better)

Mux vs. Static: Quality (in VMAF)

随着时间的推移,测试结果会有一定的提高。在没有输入“Broadcast”数据集中的任何视频内容之前,AI方法的RMSE为0.73,比静态比特率阶梯的结果(0.94)好一些,但没有达到2倍。然而在读入“Broadcast”视频的几分钟后,RMSE下降到了0.50。随着更多训练数据的加入,可以预期Halfpipe的输出能够接近真正的凸包。

从以上结果的分析中可以知道,与使用静态比特率阶梯编码的视频相比,Instant Per-Title Encoding编码的视频效果更佳,并且为每个输入视频都能提供此优化。由于Instant Per-Title Encoding的优化几乎是实时的,Mux Video可以以更快的速度发布大多数视频(minutes of video in seconds, hours of video in minutes)。除了对视觉质量的提升外,也会影响流媒体传输性能的其他因素,如重新缓冲、启动时间等。由于 per-title optimization可以在较低比特率下获得更好的质量,加上视频加载速度更快、播放不会出现停顿,因而视频观看的整体体验会更佳。 关于Mux

Mux是一家为在线视频的开发者和发布者开发基础架构和监控工具的软件公司,总部位于加州旧金山。Mux最初由一些在线视频方面的专家于2015年创立,其中不乏互联网Web端最大的开源视频播放器(Video.js)、最大的视频云转码服务(Zencoder)以及视频技术工程师社区(Demuxed)的创建者和技术开发人员。Mux Data是Mux推出的一种QoE分析工具,可以衡量对用户观看体验有实际影响的视频性能指标,包括重新缓冲、启动时间、视频质量和解码错误等。Mux Data通过仪表板可以显示出一些重要的特征数据,包括性能分数,基于机器学习的预警以及对视频源的深入分析等功能。Mux Video是一种数据驱动的视频托管和流媒体API,由Mux Data提供支持,可针对大多数终端设备和网络带宽状况创建合适的视频格式,并为视频流提供实时性能分析。 参考资料 http://www.streamingmedia.com/PressRelease/Mux-Launches-Instant-Per-Title-Encoding-Improving-Video-Quality-For-Everyone_47002.aspx https://medium.com/netflix-techblog/per-title-encode-optimization-7e99442b62a2 https://mux.com/blog/instant-per-title-encoding/ https://mux.com/per-title-encoding/ http://www.streamingmedia.com/Sourcebook/Mux-6056.aspx

本文分享自微信公众号 - 媒矿工厂(media_tech),作者:王浩

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-05-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 基于权重图模型的VR视频比特分配方案

    背景介绍 近两年来,随着视频技术的快速发展,多种视频的新型载体孕育而生。VR视频,也称作是360视频,是一种新一代的视频显示技术。用户置于球形区域的中央,可以...

    用户1324186
  • IMF中的辅助视频轨道

    本文来自SMPTE 2019的演讲,演讲者是来自DPP的Rowan de Pomerai和来自Marquise Technologies的Dan Tatut。这...

    用户1324186
  • JPEG 最近在忙啥?

    第81届JPEG会议在加拿大不列颠哥伦比亚省温哥华举行,会议对下一代图像编码标准(称为JPEG XL)的提案征集的回应进行了大量工作,预计将提供解决方案用于提高...

    用户1324186
  • 20 newsgroups数据介绍以及文本分类实例简介基本使用将文本转为TF-IDF向量使用贝叶斯进行分类参考

    20 newsgroups数据集18000篇新闻文章,一共涉及到20种话题,所以称作20 newsgroups text dataset,分文两部分:训练集和测...

    致Great
  • C#集合类型大盘点

    C#集体类型( Collections in C#)   集合是.NET FCL(Framework Class Library)中很重要的一部分,也是我们开发...

    用户1153966
  • 记一次ssh.exec_command(cmd)执行后读取结果为空

    绿色背景的代码是修改后的逻辑,原先出问题的代码就是去掉这部分的。数据走的是黄色else的逻辑,每次走完return的结果都是'',调试的时候打印的result内...

    未来sky
  • 怎样简单的提高网站性能

    用户的耐心不是线性的。第1秒的时候基本上没有人会放弃这个站点。但是,1秒开外之后,如果没有适当的反馈的话(例如浏览器标头显示页面标题),用户开始以一个加速的比率...

    javascript.shop
  • MongoDB 操作配置

    老七Linux
  • 接口调试与文档生成工具ApiPost的发送超时时间设置方法

    有部分使用ApiPost的同学反应:发送接口调试时,响应超时时间设置的太短导致接口访问失败,怎么设置呢?

    骑马的少年
  • 【专业技术】Chromium浏览器的Content模块设计意图

    Content 模块概述 “content”模块放在src \content里面,并使用多进程浏览器沙盒模块来呈现页面所需的核心代码。它包括所有的网络平台功能(...

    程序员互动联盟

扫码关注云+社区

领取腾讯云代金券