作者
,译者马赛克、模糊、扭曲的面孔和物体……糟糕的图像质量会大幅降低观众通过Netflix观赏喜爱的剧集或电影时的观赏体验。很多情况下,网络带宽不足或数据限流会导致我们无法为观众提供完美画质,为此Netflix视频算法团队一直在努力开发更高效的压缩算法,以便让Netflix能够在使用更少带宽的情况下提供相同甚至更出色的画质。我们还会与Netflix的其他团队合作,更新客户端应用以及流媒体基础架构,为新的视频流播技术提供支持,确保用户可以在任何设备上通过Netflix获得无缝播放体验。
为了进一步改善画质,我们早已于2015年开发并部署了Per-title编码优化技术(译注:该技术可针对每段视频的具体特征应用最优化的编码参数),并在一年后应用了针对移动设备视频下载进行优化的编码技术。在那之后,我们的目标是开发一种基于视频中每个分镜(Shot)进行编码的框架,该框架名为动态优化器(Dynamic Optimizer),借此可对视频流中的内容进行更细致的优化。本文将介绍为了在生产环境中运用该技术,我们所面临的挑战以及应对措施,以及这些技术对视频画质的改善情况。
在生产环境中实现动态优化技术
正如这篇博客文章中的细节所述,动态优化器会分析同一段视频在不同质量和分辨率下的效果,进而为整个编码过程提供更优的压缩轨迹,借此实现进一步的优化。在这一过程中,我们会使用Netflix的主观视频质量度量指标VMAF作为优化目标,毕竟我们的目的是在观众可感知的范围内提供最优的视频流播质量。
虽然也可以进一步完善核心消息系统,以应对消息数量的激增,但在当时看来,这并非最灵活有利的解决方案。于是我们为处理流程引入了合并序列这一概念。
图1:分镜通过合并序列组成的“块”。(A) 代表整个视频的时间轴,竖直虚线代表两个分镜的边界。(B) 一个分镜成为一个块:将每个分镜分配为一个块。(C) 将多个分镜合并为一个块:在一个目标块的时长内累积整数个分镜。
在一个合并序列中,我们会将多个分镜整理到一起,这样一系列连续分镜就可以组成一个块。随后,考虑到我们已经可以灵活地决定这种合并序列的组成方式,因此可将整数个分镜组合起来,形成时长大约为3分钟的块,这样的结果与最初所用的基于视频块的编码模式就较为类似了(图1,C)。通过配置,这些块可维持近似相同的大小,这样在由原本针对数分钟长的视频块进行编码而提供的计算实例进行处理时,可简化资源的分配工作。在每个块中,计算实例可独立对其中的分镜进行编码,并分别应用预先定义好的编码参数。
通过合并序列,对每个视频块中包含的分镜单独编码,还为系统带来了额外的好处,我们将其称之为检查点。以前,如果丢失一个计算实例(因为这些实例可能是借来的,但突然需要使用这些实例处理优先级更高的任务),随后就需要重新编码整个块。但在基于分镜的系统中,每个分镜都是单独编码的。一旦某个分镜编码完成,如果在对块中其他分镜进行编码的过程中实例丢失,已完成编码的分镜将无需重新编码。我们创建了这样的检查点系统(图2),借此确保分镜及其元数据可在编码完成后立即存储起来。通过这种方式,如果需要在另一个计算实例上重新处理同一个块,并不需要从头开始重新编码,只要从上次停止的地方开始处理即可,这样可以节约大量运算资源。
压缩性能
2016年12月,我们为供用户下载的视频使用了AVCHi-Mobile和VP9-Mobile编码器。对于这些面向移动设备的编码器,还通过各种改进让编码性能相对Per-title编码器进一步提高,例如更长的GOP、灵活的编码器设置以及每块优化机制。通过这种方式获得的视频流已经成为我们使用H.264/AVC和VP9编码器以及传统码率控制机制时的高质量基准线。
下图(图3)展示了将动态优化与基于分镜的编码方式配合使用后压缩率的改善情况。我们绘制了优化后的全新编码方式的码率-VMAF曲线(VP9-Opt和AVCHi-Opt),并将其与下列情况相比较:
- 供下载的每视频块编码(VP9-Mobile和AVCHi-Mobile)
- 供流播的每视频编码(AVCMain)
为了创建下图,我们从视频库中选择了数千个视频作为样本。每个码率用x(横轴)代表,每个视频选择码率≤ x时的最高质量编码方式(以VMAF得分来体现)。随后计算在特定码率x的情况下,所有视频的VMAF得分平均值,将其作为下图中每条曲线上的一个点。针对码率值x的不同视频进行计算后,最终获得了5条曲线,分别对应上述5种编码方式。假设网络状况稳定,下图便可代表不同带宽下,用户可以通过Netflix服务观赏的视频质量的VMAF平均值。
一起看看质量相等的情况下,码率的降低幅度,为此可以在VMAF=80(质量良好)处画一条横线,随后可以获得下列码率信息:
从中可见,相比AVCMain所代表的每视频编码方式,优化后的编码器只需要不到一半的码率即可实现相等质量。对于VP9-Opt,只需要相比AVCMain不足1/3的码率即可实现相同质量的流播。而如果使用AVCHi-Mobile和VP9-Mobile,分别也可以节约17%和30%的带宽。
我们还研究了带宽相同情况下视觉质量受到的影响。例如,手机蜂窝网络的带宽平均为250 kbps,这样的带宽可以获得下表所示的VMAF分数。相比AVCMain,优化后的编码器可以显著提升视频质量。
为了展现视频质量的差异,下文列举了主厨的餐桌(Chef’s Table)剧集中的一帧画面,不同图片为250 kbps左右码率下不同编码方式产生的视频截图。对比发现画面中的材质(砖块、树木、岩石、水面等)质量有了可观的提升。其中AVCMain(图4A,VMAF=58)和AVCHi-Opt(图4B,VMAF=73)的视觉差异最显著,VP9-Opt(图4C,VMAF=79)看起来最锐利。
图4 (A):AVCMain,250 kbps,VMAF=58
图4 (B):AVCHi-Opt,254 kbps,VMAF=73
图4 (C):VP9-Opt,248 kbps,VMAF=79
下文我们将以十三个原因(13 Reasons Why)剧集开场的一幕作为例子,展示码率同为250 kbps左右时的效果。使用AVCMain(图5A)时,图片上方的文字几乎不可辨认,而此时的VMAF得分为60分;使用AVCHi-Opt(图5B)时,画质已有较大改善,此时VMAF得分为74;使用VP9-Opt(图5C)时,文字和形状边缘变得非常清晰,同时画质有了显著提升,此时的VMAF得分为81。
图5:(A) AVCMain,260 kbps,VMAF=60;(B) AVCHi-Opt,257 kbps,VMAF=74;(C) VP9-Opt,252 kbps,VMAF=81
优化编码器的现场测试
上文介绍了优化后的编码器在压缩效果上相对于每视频编码方式的提升,借此可以用相同码率获得更高质量,或以相同质量降低码率。但真正的问题依然存在:这样的变化是否可以切实改善用户的观看体验?
在将新的编码算法部署到生产环境之前,我们在不同平台和设备上通过A/B测试对新算法的实用性进行了全面测试。A/B测试帮助我们用可控的方式,对对照组(使用新的编码方式)和控制组(使用原有方式)的体验质量(QoE)进行了比较。为了针对优化后的方式以及原有的AVCMain流播体验获得更准确的结果,我们的A/B测试涵盖了各种类型的设备和视频。借此也可以进一步针对不同平台优化编码算法并调整流播引擎。
通过不同的QoE指标对优化后编码方式的效果进行评估。根据A/B测试的结果,我们认为用户的观影体验可以获得下列改进:
- 对于低带宽连接的用户,我们可以用相同(甚至更低)码率提供更高质量的视频。
- 对于高带宽连接的用户,我们可以用更低码率提供相同质量的视频。
- 在网络吞吐率突降时,大部分用户遇到重新缓冲和质量降低现象的概率大幅降低。
- 支持VP9流播的设备可以用相同码率获得更高质量的视频。
此外我们很多用户所用的手机套餐数据流量有上限。在优化后的全新编码方式帮助下,这些用户无需调整数据流量上限,即可用相同甚至更高质量流播观看更长时间的Netflix视频。优化的编码器还可以让脱机下载功能获益。对于可下载的视频,用户以相同存储容量可以获得质量显著提高的视频内容。
重编码与设备支持
过去几个月来,我们已经对Netflix的整个视频库生成了AVCHi-Opt编码的内容,并开始将其用于很多平台的流播。现在,当用户通过iOS、Android、PS4以及Xbox One观看Netflix内容时,就已经在享受这项技术带来的好处。另外针对一些非常受欢迎的内容,我们也已提供了VP9-Opt流播,目前部分Android设备已经可以支持这个技术。同时我们也在积极针对其他设备和浏览器对这种新的流播方式进行测试。
无论你正在智能电视上通过最快速度的宽带连接观赏“主厨的餐桌”,或在移动设备上通过不稳定的蜂窝网络观看“杰西卡·琼斯”,Netflix都在致力于提供尽可能一流的观看体验。而此次发布的优化编码技术也很好地证明了将创新的研究成果,积极有效的跨团队合作,以及数据驱动的部署方式配合使用后,确实能为我们的用户提供更卓越的观影体验。
作者:Megha Manohara、Anush Moorthy、Jan De Cock、Ioannis Katsavounidis和Anne Aaron,阅读英文原文。
转自 http://www.infoq.com/cn/articles/optimized-shot-based-encodes-now-streaming