马赛克、模糊、扭曲的面孔和物体……糟糕的图像质量会大幅降低观众通过 Netflix 观赏喜爱的剧集或电影时的观赏体验。很多情况下,网络带宽不足或数据限流会导致我们无法为观众提供完美画质,为此 Netflix 视频算法团队一直在努力开发更高效的压缩算法,以便让 Netflix 能够在使用更少带宽的情况下提供相同甚至更出色的画质。我们还会与 Netflix 的其他团队合作,更新客户端应用以及流媒体基础架构,为新的视频流播技术提供支持,确保用户可以在任何设备上通过 Netflix 获得无缝播放体验。
为了进一步改善画质,我们早已于 2015 年开发并部署了 Per-title 编码优化技术(译注:该技术可针对每段视频的具体特征应用最优化的编码参数),并在一年后应用了针对移动设备视频下载进行优化的编码技术。在那之后,我们的目标是开发一种基于视频中每个分镜(Shot)进行编码的框架,该框架名为动态优化器(Dynamic Optimizer),借此可对视频流中的内容进行更细致的优化。本文将介绍为了在生产环境中运用该技术,我们所面临的挑战以及应对措施,以及这些技术对视频画质的改善情况。
在生产环境中实现动态优化技术
正如这篇博客文章中的细节所述,动态优化器会分析同一段视频在不同质量和分辨率下的效果,进而为整个编码过程提供更优的压缩轨迹,借此实现进一步的优化。在这一过程中,我们会使用Netflix 的主观视频质量度量指标 VMAF 作为优化目标,毕竟我们的目的是在观众可感知的范围内提供最优的视频流播质量。
在生产环境中实现动态优化的过程中,我们遇到的最大挑战之一在于需要调整原本使用的并行编码流程,以便顺利处理数量大幅激增的编码单位。首先,动态优化的分析环节中,需要使用不同分辨率和质量(QP)进行编码,这导致编码工作的复杂度以指数形式增加。其次,我们也改变了具体的编码操作,原本会将视频按照时长拆分为几分钟一个的块进而编码,但现在需要将视频按照分镜进行拆分并编码。例如在原本的系统中,怪奇物语(Stranger Things)剧集每一集时长 1 小时,可以拆分为 20 个,每个 3 分钟的视频块。但在基于分镜的编码方式下,平均每个分镜的长度为 4 秒,同一部剧集就需要处理 900 个分镜。假设每个视频块对应一个分镜(图 1,B),新方式会让每个视频每次编码所要处理的视频块数量增加两个以上的数量级。这也会增大整个系统在计算实例之间传递消息时遇到与消息数量相关瓶颈的概率。为了解决这个问题,我们在工程方面实现了很多创新,下文将主要介绍其中的两点:合并序列(Collation)和检查点(Checkpoint)。
虽然也可以进一步完善核心消息系统,以应对消息数量的激增,但在当时看来,这并非最灵活有利的解决方案。于是我们为处理流程引入了合并序列这一概念。
图 1:分镜通过合并序列组成的“块”。(A) 代表整个视频的时间轴,竖直虚线代表两个分镜的边界。(B) 一个分镜成为一个块:将每个分镜分配为一个块。© 将多个分镜合并为一个块:在一个目标块的时长内累积整数个分镜。
在一个合并序列中,我们会将多个分镜整理到一起,这样一系列连续分镜就可以组成一个块。随后,考虑到我们已经可以灵活地决定这种合并序列的组成方式,因此可将整数个分镜组合起来,形成时长大约为 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 ©: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;© 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,阅读英文原文。
感谢蔡芳芳对本文的审校。
评论