不良的图像质量-块状,模糊,面部和对象变形-可能使您脱离正在Netflix上观看的最喜欢的电视节目或电影。 在许多情况下,低带宽网络或数据上限使我们无法提供完美的画面。 为了解决这个问题,Netflix视频算法团队一直在研究更有效的压缩算法,这些算法使Netflix在使用更少带宽的同时提供相同或更好的图像质量。 并与Netflix的其他工程团队合作,我们更新了客户端应用程序和流媒体基础架构,以支持新的视频流并确保在Netflix设备上的无缝播放。
为了提高会员的视频质量,我们在2015年开发并部署了按标题编码,然后在一年后为下载提供了更好的移动编码。 我们的下一步是生产基于镜头的编码框架,称为动态优化器,从而在视频流中实现更精细的优化。 在本文中,我们描述了将此框架引入生产流程时克服的一些实现挑战,以及有关如何为成员提高视频质量的实际结果。
如本博客文章中所述,动态优化器会在多个质量和分辨率点上分析整个视频,从而在给定优化目标的情况下获得编码的最佳压缩轨迹。 尤其是,我们将Netflix主观视频质量指标VMAF作为我们的优化目标,因为我们的目标是以最佳的感知质量生成流。
我们在生产中实施Dynamic Optimizer框架时面临的主要挑战是对并行编码管道进行改造,以处理更多的编码单元。 首先,动态优化程序的分析步骤要求使用不同的分辨率和质量(QP)进行编码,从而要求复杂度提高一个数量级。 其次,我们从大约几分钟的视频块编码过渡到每次拍摄的视频编码。 例如,在原始系统中,一小时的“陌生人事物”情节导致20个3分钟的数据块。 使用基于镜头的编码,平均镜头长度为4秒,同一情节需要处理900张镜头。 假设每个块对应一个镜头(图1B),则新框架将每个标题的每个编码的块数量增加了两个数量级以上。 这增加了与在计算实例之间传递的消息数量有关的公开系统瓶颈。 为了解决这些限制,我们进行了一些工程创新,我们在这里讨论其中的两个: 排序规则和检查点。
尽管我们可以改进核心消息传递系统来处理消息量的这种增长,但它在当时并不是最可行,最方便的解决方案。 相反,我们通过引入排序规则来调整我们的管道。
在整理中,我们将镜头合在一起,以便一组连续的镜头组成一个块。 现在,考虑到我们可以灵活地进行这种整理,我们可以将整数个镜头组合在一起,以便在基于块的编码模型下产生与最初产生的大致相同的3分钟块持续时间(图1C)。 )。 这些块可以配置为大约相同的大小,这有助于为先前为几分钟编码的块而优化的实例分配资源。 在每个块中,计算实例使用其自己的一组定义参数独立地对每个镜头进行编码。
在块中整理独立编码的镜头可以带来额外的系统改进,我们称之为检查点 。 以前,如果我们丢失了一个计算实例(因为我们已经借用了它,并且突然需要更高优先级的任务来使用它),我们将对整个块进行重新编码。 在镜头的情况下,每个镜头都是独立编码的。 镜头完成后,如果在编码其余块时丢失实例,则无需重新编码。 我们创建了一个检查点系统(图2),以确保每个编码镜头和相关的元数据在完成后立即存储。 现在,如果在另一个计算实例上重试相同的块,则编码不是从头开始,而是从它停下来的镜头开始,从而节省了计算量。
2016年12月,我们推出了用于下载的AVCHi-Mobile和VP9-Mobile编码。 对于这些移动编码,一些更改导致了与按标题编码相比更高的压缩性能,包括更长的GOP,灵活的编码器设置和按块优化。 这些流用作我们具有传统速率控制设置的H.264 / AVC和VP9编码的高质量基准。
下图(图3)演示了动态优化与基于镜头的编码的结合如何进一步提高压缩效率。 我们将新优化编码(称为VP9-Opt和AVCHi-Opt)的比特率-VMAF曲线与
- 每块编码进行下载(VP9-Mobile和AVCHi-Mobile)
- 每标题对流进行编码(AVCMain)。
为了构建此图,我们从目录中抽取了数千个标题的样本。 对于每个比特率x(在水平轴上)和每个标题,我们选择比特率≤x的最高质量编码(由VMAF得分表示)。 然后,我们将给定x的所有标题的VMAF值取平均值,为下图中的每条曲线提供一个点。 扫过所有比特率值x,得到5条曲线,对应于上面讨论的5种编码类型。 假设网络条件稳定,这是在特定视频带宽下,您将在Netflix服务上获得的平均VMAF质量。
让我们通过在VMAF = 80(高质量)上画一条水平线来说明同等质量下比特率的降低,该水平线为我们提供了以下比特率:
我们可以看到,与使用AVCMain进行按标题编码相比,优化的编码需要少于一半的位才能达到相同的质量。 使用VP9-Opt,我们可以以不到AVCMain三分之一的比特率传输相同质量的视频。 与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)看起来最清晰。
在下面的示例中,我们以大约250 kbps的速率显示了13个Whys Why的开始场景的详细信息。 对于AVCMain(图5A),顶部的文字很难看清,VMAF值为60。对于AVCHi-Opt(图5B),我们看到质量大幅跃升到VMAF值为74。对于VP9 -Opt(图5C),文本和边缘变脆,并且质量得到另一个明显的提高,这也反映在VMAF值81中。
在上一节中,我们说明了优化的编码比按标题编码提供更高的压缩效率,从而在可比较的比特率下可获得更高的质量,而在相同的质量下可获得更低的比特率。 问题仍然在于,这是否会为我们的会员带来更好的体验。
在生产中部署任何新的编码算法之前,我们使用不同平台和设备上的A / B测试彻底验证流的可播放性。 A / B测试为我们提供了一种受控方式,可以将处理单元(我们的新编码)的体验质量(QoE)与控制单元(现有体验)进行比较。 我们在各种设备和标题上进行了A / B测试,以将优化的编码与现有的AVCMain流媒体体验进行比较。 这也使我们可以针对不同平台微调我们的编码算法和自适应流引擎。
我们评估了优化编码对不同QoE指标的影响。 根据A / B测试的结果,我们希望对会员的观看体验有以下改进:
- 对于具有低带宽连接的成员,我们将以相同(甚至更低)的比特率提供更高质量的视频。
- 对于具有高带宽连接的成员,我们将以较低的比特率提供相同的高质量。
- 当网络吞吐量急剧下降时,许多成员将遇到较少的重新缓冲和质量下降。
- 在相同的比特率下,支持VP9流的设备将受益于更高的视频质量。
此外,我们的许多会员在其蜂窝网络计划上都有数据上限。 借助新的优化编码,这些成员现在可以使用相同数量的数据以相同或更好的质量流化更多小时的Netflix。 优化的编码也可用于我们的离线下载功能。 对于可下载的标题,我们的成员可以在相同的存储量下观看高质量的视频。
在过去的几个月中,我们为整个Netflix目录生成了AVCHi-Opt编码,并开始在许多平台上流式传输它们。 当前,在iOS,Android,PS4和XBox One上观看Netflix时,您可以享受这些优化的流。 VP9-Opt流已可用于选择流行内容,并且可以在某些Android设备上进行流传输。 我们正在其他设备和浏览器上积极测试这些新流。
无论您是在智能电视上以最快的宽带连接观看Chef’s Table ,还是在移动设备上使用不稳定的蜂窝网络观看Jessica Jones ,Netflix都致力于提供最佳的图像质量。 新的优化编码的推出是将创新研究,有效的跨团队工程和数据驱动的部署相结合,为我们的会员带来更好体验的绝佳典范。