在过去的25年中,视频编码推动了学术研究,并启用了引人注目的产品和服务。 许多公司都是围绕视频编码和传输而建立的-Netflix和Google的YouTube是以视频为中心的公司的两个主要示例。 这些年来,视频编码的基本原理一直没有改变,因为现代视频流使用的是与自MPEG-1 [1]开始使用的相同类型的编码参数:选择特定的帧分辨率以及一组-图像(GOP)结构,可施加周期性的帧内图像,并且输入视频帧上的单次通过或两次通过(近似)满足的目标比特率。
公司一直在努力调整视频编解码器中的其他参数,从而创建了业界通常所说的“食谱”。 这些配方通常是通过人工检查几个标题的选定集合上的结果编码来创建和定制的,并且已经很长时间保持固定。
同时,核心视频编解码器工具的改进已导致节省的比特率显着降低-使用HEVC [2]编码器可以达到相同的质量,而仅使用MPEG所需比特的一小部分(约30%) -1。 尽管一直使用均方误差(MSE)进行测量,但这种改进并不总是伴随着同样令人印象深刻的结果,而这种变化是在人类观察者对编码进行评估时得出的。 开发新编解码器时要声称的不可思议的数字是“ 50%”。 H264 / AVC [3]要求比MPEG-2 [4]少50%的比特,HEVC要求比AVC少50%的比特。 然而,在实际系统中,这些节省从未实现过-关于从视频编解码器增量变化中看到的好处的最佳估计接近40%[5]。
与ISO和ITU的标准化工作并行,Google一直在开发自己的免版税视频编解码器系列; 它的最新成员是VP9 [6],于2013年首次推出,并于2014年完成。VP9建立在VP8的早期成功和On2 Technologies开发的“ True Motion”编解码器系列的基础上,该编解码器于2010年被Google收购。
请记住,大多数视频编解码器改进在解码和(主要是在)编码复杂性上都带来了非常沉重的计算开销,人们已经了解到,更新和更高效的编解码器需要不断增加的复杂性才能部署在商业视频中传输服务。 人们通常会看到,随着每一代视频编解码器的增加,编码器复杂度会增加5-10倍,而解码复杂度的相应增加通常会增加2倍。
如果人们接受更新和更高效的编解码器带来的日益增加的复杂性,那么一个更大的问题是:例如,在将视频帧作为输入连接到编码器的方式或如何使用输出时,我们可以在系统级做什么?视频解码器如何将其呈现在屏幕上,以进一步提高视频质量,就像今天观看这些小时视频的人类观察者所认为的那样?
下面介绍了这种新方法中的关键字:
- 感知性的 :视频编码的全部目的是以一种使人眼愉悦的方式压缩视觉信息; 均方误差(MSE)通常用于编码器决策,该数字并不总是与人类的感知很好地关联。
- 复杂性 :就像我们在视频编解码器中花费越来越多的复杂性一样,我们也有能力在它之外花费一些。
- 前瞻性 :与广播电视不同,在广播视频电视中,人们必须即时或以最小的延迟做出编码决策,而在视频点播服务中,视频序列是全部可用的,因此可以进行多次预分析提高质量。
在本技术博客的其余部分中,我们假定读者熟悉自适应流式处理的基础知识,例如
- 使用基本处理单位(称为“流片段”),以不同的分辨率和/或质量对相同视觉内容进行多种编码表示
- 根据流客户端的请求,从服务器传送属于不同表示形式的编码段,以适应变化的信道条件(比特流切换)
- 相同视觉内容的不同编码表示形式之间的片段时间对齐,以允许位流切换
有兴趣的读者可以参考许多可用的自适应流式教程,例如此Wiki页面[7]。
分块编码
在2015年12月发布的Netflix技术博客中[8],我们描述了云编码如何从“块式”编码中受益匪浅。 这意味着将多个视频块(例如,一个小时的持续时间)分成多个块,每个视频块都具有一定的持续时间,例如20个块,每个3分钟。 长。 然后,我们使用特定的编码方式独立地对每个块进行编码,并连接或“组合”编码,从而获得整个视频序列的编码版本。
在分块编码的优点中,最重要的是,它允许使用软件视频编码在云上构建健壮的系统。 如果云实例无法完成某个编码,则仅需要重新处理相应的块,而无需重新启动一个小时的完整视频编码。 人们还可以看到端到端延迟的减少,因为可以并行编码不同的块。 从而在整个编码系统中实现了几乎无限的可扩展性。
分块编码会带来一些不利影响-即,在一个整小时的序列(特别是在两遍模式下)下运行的视频编码器可以预览接下来的内容,因此可以更好地进行长期比特率分配; 从而以相同的比特率获得更好的整体质量。 但是,分块编码带来的好处超过了这些损失。
按标题和按块编码优化
在Netflix,我们一直在不断提高世界各地会员的视频质量。 我们不断努力的一个重要里程碑是“每标题编码优化”,我们在2015年12月发布的技术博客中对它进行了详细描述[9]。 字幕编码优化引入了根据复杂度自定义编码的概念,这转化为我们目录中每个视频序列的正确分辨率和比特率选择。 通过考虑视频的特性(运动量,细节水平,色彩鲜艳度),并通过选择更适合每个标题的编码参数来优化编码效率,这比我们以前的固定分辨率/比特率阶梯生成技术有了显着改善。 另一个重要的里程碑是“每块编码优化”,它是我们“下载的移动编码”计划的一部分,于2016年12月推出,在Netflix技术博客中有更详细的介绍[10]。 在随后的部分中将更详细地讨论均衡速率失真斜率的概念,该概念也得到了重大改进。 实际上,可以认为当前的工作是“每标题编码优化”和“每块编码优化”的自然延伸。 我们可以将其称为“感知每镜头编码优化”。
从大块到镜头
在理想的世界中,人们希望对视频进行分块,并对每个块施加不同的参数集,以优化最终的组合视频。 实现这种完美位分配的第一步是将视频分割成自然原子,这些原子由彼此非常相似的帧组成,因此其行为与更改编码参数相似-这些是组成长视频的“镜头”顺序。 镜头是持续时间相对较短的视频部分,是在相当恒定的光照和环境条件下,来自同一台摄像机的镜头。 它捕获相同或相似的视觉内容,例如,站在树前的演员的脸,并且-最重要的是-更改编码参数时其行为是统一的。 镜头的自然边界是通过相对简单的算法(称为镜头变化检测算法)建立的,该算法可检查属于连续帧的像素之间的差异量以及其他统计信息。 当该差异量超过某些固定或动态调整的阈值时,将宣布新的射击边界。
在某些情况下,例如交叉淡入淡出或其他视觉效果可以应用在两个连续镜头之间的边界上,这可以通过更复杂的算法来处理。
镜头更改检测算法的最终结果是镜头列表及其时间戳。 可以将结果镜头用作基本编码块,而不是固定长度的块。 这提供了一些真正独特的机会:
- 现在可以将Intra框架的位置设置为“始终不规则”,这意味着(a) Intra框架可以放置在“随机”位置,例如前4个Intra框架可以位于时间0、2、5、7秒。 ( b )然而,时间位置总是在相同标题的编码器之间对齐,以顺序词来说,前4个帧内帧的位置保持在0、2、5、7秒。 该标题的所有编码。
- 帧内帧的不规则排列可将编码开销降至最低; 请记住,在视频编码中使用的3种不同类型(I / P / B)中,帧内帧的效率最低,因此,人们希望将其在编码视频中的存在最小化。
- 现在,以较长的视频序列进行搜索会导致自然的兴趣点,这些兴趣点由镜头边界发出信号。
- 独立编码镜头时没有预测损失:如果将一个Intra帧放置在镜头中间,则将镜头分成多个部分,当独立编码而不是单个单位编码时,需要更多位,因为Intra之后的像素帧不能在“内部帧”之前的帧中引用它们的相似副本。
- 连续镜头之间的任何重大编码参数变化都不太可能被人眼注意到,因为与任何可能的编码参数相比,不同镜头中不同视觉内容所引起的破坏对人类视觉系统的破坏性要大得多,例如分辨率/质量-变化。
- 在同类的一组帧(例如属于同一镜头的帧)中,几乎不需要使用速率控制,因为支持非常简单的编码方案,例如固定量化参数(“ fixed QP”)模式实际上,几乎所有现有的视频编码器都能提供非常一致的视频质量,并且几乎没有比特率变化。 实际上,在视频编解码器的开发过程中一直使用“固定QP”,因为几乎所有用于MPEG,ITU和其他标准机构的测试序列都由单发视频块组成。
在2016年6月发布的另一个Netflix技术博客[11]中,我们解释了视频多方法评估融合(VMAF)质量指标,该指标是内部开发的,然后开放源代码供整个视频社区使用。
VMAF的主要功能如下:
- 它是一种全参考指标,这意味着可以在视频序列的原始,未失真版本以及失真的任何位置使用它。
- 通过将解码后的视频帧上采样到共同的参考帧大小(1920×1080),它同时考虑了压缩和上下缩放伪影。 这样,可以使用VMAF来评估不同分辨率下的编码视频质量。 特别是,它可以用来比较相同标题在不同分辨率下的编码版本,并帮助确定哪个更好。
- 它依赖于现有的图像质量指标(VIF,DLM),这些指标经过适当修改以涵盖多种分辨率,以及视频序列中连续视频帧之间的运动量作为输入到机器学习的权重集中的特征。 最终分数是在支持向量机(SVM)回归器中组合这些基本特征的结果。
- 通过从实际的观察者那里收集主观数据,对VMAF中使用的砝码进行校准和训练,他们提供了VMAF所依据的真实数据。 用于训练VMAF的内容是Netflix目录的代表性子集,因此可以理解,其性能已根据我们的用例进行了调整。 但是,VMAF框架是通用的,并允许其他人针对自己的用例对其进行重新培训。 实际上,许多研究人员已经使用他们自己的主观数据集验证了VMAF的准确性。
Ortega和Ramchandran [12]在1998年发表的开创性论文显示了在处理图像和视频编码的多种选择时如何解决最优性。
假设一个图像由N个单位组成,需要进行编码
- 您分别对每个单位进行编码,为每种可能性获得一个(速率,失真)对,称为“工作点”
- 您将所有可用的工作点放在速率失真图上
- 提取其凸包,即轮廓边界的外壳
- 在每个单位的凸包上选择一个点,以使不同单位的点具有(大致)相等的失真率斜率。
因此,可以考虑以下系统:
- 较长的视频片段被分成几张
- 使用不同的编码参数(例如分辨率和质量(QP))对每个镜头进行多次编码
- 每种编码均使用VMAF进行评估,VMAF及其比特率共同产生一个(R,D)点。 可以使用不同的映射将VMAF质量转换为失真; 我们针对以下两个线性和反比例映射进行了测试,这些映射产生了不同的时间聚合策略,在后续部分中进行了讨论


- 计算每次射击的(R,D)点的凸包。 在以下示例图中,失真是(VMAF + 1)的倒数
- 通过遵循恒定坡度原理并在网格中建立端到端路径,将凸包中的点(每个镜头中的一个点)组合起来以为整个视频序列创建编码
- 通过覆盖所需的比特率/质量范围,可以通过改变RD曲线的斜率参数来产生尽可能多的聚合编码(最终工作点)
- 最终结果是整个视频序列的完整RD或速率质量(RQ)曲线
这个完整的系统称为“动态优化器”,该框架可生成Netflix最新一代的编码。
从Netflix目录中选择了10个代表性标题,并使用VP9-libvpx视频编解码器对其进行了编码。
在时间聚集方面,我们已经实现了各种池化方法,其中两种方法对应于较早引入的质量-失真映射,即线性映射和反比例映射。 我们将它们称为算术平均平均VMAF(LVMAF)和谐波平均平均VMAF(HVMAF)。


LVMAF和HVMAF时间质量聚集这两种方法产生了非常高质量的编码序列-分别允许组合视频序列中更具侵略性或更保守的时间质量波动。
VP9编码配方
VP9-libvpx中使用的编码参数取自先前的研究; 其发现已在2016年10月举行的Netflix“免版税编解码器开放日”上发表。根据该研究,最佳使用配置为“固定QP,AQ模式= 0,CPU = 0,最佳”,在PSNR和VMAF质量指标方面均显示出最高的质量。 我们在附录中复制了该研究的主要结果。
我们将动态优化器获得的结果与最佳的固定QP VP9-libvpx编码进行了比较。 下表总结了所采用的方法以及为该实验选择的各种参数。

动态优化器获得的相应增益,以相同视觉质量下的比特率节省百分比以及相同平均比特率下的HVMAF分数提高表示:

当使用HVMAF作为质量指标时,与整个视频序列的最佳固定QP编码相比,平均节省了17.1%的比特率。 使用PSNR时的改进甚至更高:平均可节省22.5%的比特率。
在此比较中,基线和动态优化器结果之间的计算复杂度保持不变,因为要获得整个序列的固定QP编码的凸包需要与动态优化器相同的复杂度。 因此,这代表了动态优化器引入的改进量的下限。
如果我们使用更通用的基准,例如在VP9-libvpx中使用CPU = 1的2遍VBR配置,良好的AQ-mode = 2编码方式,则动态优化器的改进要大得多:节省超过50%的比特率平均而言,就HVMAF而言。 需要记住的是,在那种情况下,动态优化器解决方案的计算复杂度要高得多。
根据前面介绍的内容,可以立即了解动态优化器框架中没有特定于编解码器的内容。 为了确认这一点,一组较短的剪辑使用H.264 / AVC,HEVC和VP9-libvpx进行了编码,并具有以下实验设置:


可以注意到,动态优化器将所有三个编解码器的性能提高了约28–38%。 请记住,这些改进不是在比较编解码器之间的性能,而是在通过使用动态优化器框架来改进其中每个编解码器。 使用动态优化器作为高级编码框架的最新视频编解码器的更全面比较将在未来几周内发布。
动态优化器是用于视频编码的优化框架。 其主要功能如下:
- 基于镜头的编码
- 具有不同分辨率和质量参数的多种编码
- 使用VMAF作为核心指标的感知评估和质量调整
- 大规模并行处理,非常适合基于云的视频编码软件管道
其主要优点如下:
- 它可以应用于任何现有的或将来的视频编解码器,这使其具有视频编码优化框架的资格。
- 通过为每个测试视频序列确定“感知上相关的”编码分辨率和质量(QP)范围,它可以在开发和评估新编码工具的性能时使用,从而有助于将来的编解码器开发。
- 它消除了视频编解码器实施中的大部分速率控制因素,从而可以更公平地比较视频编解码器
- 它与可以引入镜头编码方式的改进正交,例如更好的IBP编码结构,空间自适应QP选择; 在快照级别执行的任何改进都可以补充动态优化器带来的改进
- 可以根据计算资源的数量来放大或缩小其复杂度,从而在复杂度和速率失真效率之间进行权衡
- 它产生完全兼容的比特流
- 它可以与VMAF,PSNR或任何其他视频质量指标一起使用。
- 它既有利于用于下载和脱机使用的独立比特流创建,也适用于用于调整流的全比特率阶梯创建
我们已经在编码管道中实现了动态优化器框架,并在非高峰流时间[13],[14]中利用了可伸缩的云基础架构和未充分利用的云实例。 我们已将此编码系统应用于AVC-High和VP9流,从而改善了成员的视频质量并节省了带宽。 请继续关注另一个描述我们实施和结果的技术博客!
这项工作是整个Netflix视频算法团队的共同成果。 我要亲自感谢Anne Aaron,Chao Chen,Jan De Cock,Rich Gerber,Liwei Guo,Zhi Li,Megha Manohara,Aditya Mavlankar,Anush Moorthy,Andrey Norkin,Kyle Swanson和David Ronca所做的所有贡献。
[1] ISO / IEC 11172–2:1993“信息技术–数字存储媒体的运动图像和相关音频的编码,速度约为1.5 Mbit / s-第2部分:视频”
[2] ISO / IEC 23008–2:2013“信息技术-异构环境中的高效编码和媒体传递-第2部分:视频”
[3] ISO / IEC 14496–10:2014“信息技术—视听对象的编码—第10部分:高级视频编码”
[4] ISO / IEC 13818–2:2013“信息技术-运动图像和相关音频信息的通用编码-第2部分:视频”
[5] J. De Cock,A。Mavlankar,A。Moorthy和A. Aaron,“针对实际VOD应用的x264,x265和libvpx的大规模视频编解码比较”,Proc。 SPIE 9971,数字图像处理的应用XXXIX,997116(2016年9月27日)
[6] A. Grange,P。de Rivaz和J. Hunt,“ VP9比特流和解码过程规范”,Google,2016年
[7]“自适应比特率流式传输”,维基百科—免费百科全书,https://en.wikipedia.org/wiki/Adaptive_bitrate_streaming
[8] A. Aaron和D. Ronca,“大规模高质量视频编码”,NETFLIX技术博客,2015年12月9日,链接:http://techblog.netflix.com/2015/12/high-quality -video-encoding-at-scale.html
[9] A. Aaron,Z。Li,M。Manohara,J。De Cock和D. Ronca,“按标题编码优化”,NETFLIX技术博客,2015年12月14日,链接:http:// techblog .netflix.com / 2015/12 / per-title-encode-optimization.html
[10] A. Norkin,J。De Cock,A。Mavlankar和A. Aaron,“更高效的Netflix下载移动编码”,NETFLIX技术博客,2016年12月1日,链接:https://medium.com / netflix-techblog /更高效的移动编码-netflix-downloads-625d7b082909
[11] Z. Li,A。Aaron,I。Katsavounidis,A。Moorthy和M. Manohara,“迈向实用的感知视频质量指标”,NETFLIX技术博客,2016年6月5日,链接:http:// techblog.netflix.com/2016/06/toward-practical-perceptual-video.html
[12] A. Ortega和K. Ramchandran,“图像和视频压缩的速率失真方法:概述”, IEEE信号处理杂志 ,第1卷。 15号 6,第23-50页,1998年
[13] A. Park,D。Derlinger和C. Watson“创建自己的EC2现货市场”,NETFLIX技术博客,2015年9月28日,链接:http://techblog.netflix.com/2015/09/ creation-your-own-ec2-spot-market.html
[14] R. Wong,D。Derlinger,A。Shiroor,N。Mareddy,F。San Miguel,R。Gallardo和M. Prabhu“创建自己的EC2现货市场-第2部分”,NETFLIX技术博客,11月。 2015年3月23日,链接:http://techblog.netflix.com/2015/11/creating-your-own-ec2-spot-market-part-2.html
VP9-libvpx中使用的编码参数取自先前的研究; 其发现已于2016年10月在Netflix的“免版税编解码器开放日”上发表。根据该研究,该测试使用了与早先报道的第一个实验选择的10个全称相同的字幕,这是最佳配置使用的是“固定QP,AQ模式= 0,CPU = 0,最佳”,显示出在PSNR和VMAF质量指标方面均产生最高质量。 下图显示了在VP9-libvpx编码中选择不同参数时,平均BD速率损失的影响。