专栏名称: 狗厂
目录
相关文章推荐
51好读  ›  专栏  ›  狗厂

Netflix最新视频优化实践:用更少的带宽打造完美画质

狗厂  · 掘金  ·  · 2018-03-16 02:50

正文

马赛克、模糊、扭曲的面孔和物体……糟糕的图像质量会大幅降低观众通过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) 一个分镜成为一个块:将每个分镜分配为一个块。(C) 将多个分镜合并为一个块:在一个目标块的时长内累积整数个分镜。

在一个合并序列中,我们会将多个分镜整理到一起,这样一系列连续分镜就可以组成一个块。随后,考虑到我们已经可以灵活地决定这种合并序列的组成方式,因此可将整数个分镜组合起来,形成时长大约为3分钟的块,这样的结果与最初所用的基于视频块的编码模式就较为类似了(图1,C)。通过配置,这些块可维持近似相同的大小,这样在由原本针对数分钟长的视频块进行编码而提供的计算实例进行处理时,可简化资源的分配工作。在每个块中,计算实例可独立对其中的分镜进行编码,并分别应用预先定义好的编码参数。


图2:检查点

通过合并序列,对每个视频块中包含的分镜单独编码,还为系统带来了额外的好处,我们将其称之为检查点。以前,如果丢失一个计算实例(因为这些实例 可能是借来的 ,但突然需要使用这些实例处理优先级更高的任务),随后就需要重新编码整个块。但在基于分镜的系统中,每个分镜都是单独编码的。一旦某个分镜编码完成,如果在对块中其他分镜进行编码的过程中实例丢失,已完成编码的分镜将无需重新编码。我们创建了这样的检查点系统(图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平均值。







请到「今天看啥」查看全文