Netflix提出了一种基于感知视频编码优化框架,在非峰值流时间期间,将此编码系统应用于AVC-High和VP9数据流,提高了用户的视频质量的同时并节省了带宽。LiveVideoStack对本文进行了编译,感谢英特尔资深软件开发工程师赵军对本文的审校。
文 / Loannis Katsavounidis,Netflix视频算法高级研究科学家
译 / 王月美
审校 / 英特尔资深软件开发工程师 赵军
动机
视频编码推动了过去25年的学术研究,并且推出了引人注目的产品与服务。众多公司都围绕视频编码和传输而构建--- Netflix和Google的YouTube是两个最好的例证。
多年以来,视频编码的基本原理改变不多。产生现代视频流的编码参数类型自MPEG-1视频标准[1]发布时后就甚少改动;选择特定的帧分辨率,连同一组 (GOP)结构,并在该结构(GOP)上应用周期性的帧内(Intra picture)图片;通过在输入视频帧上的单遍(single pass)或双遍(two pass)来(近似地)满足目标比特率。
这些公司努力微调视频编解码器中的附加参数,从而创造业界通常称赞为良好“配方”的内容。这些配方通常是通过人为检查一组选定主题上的编码结果而创立和定制,且多年未变。
与此同时,核心视频编解码器工具的改进导致了比特率上的惊人节省 —一个HEVC [2]编码器仅需MPEG-1所用比特的小部分(约30%)就可以达到与之相同的画面质量。但是,衡量这些改进通常使用均方差(MSE)方法,MSE在由人来观察评估时,结果并不总是令人印象深刻。而当一个新的编解码器被开发时,这个被要求的神奇数字已经是“50%”。H264/AVC [3] 声称比MPEG-2 [4] 节省50%的比特,HEVC 声称比AVC节省50%的比特。然而,在实际的系统中,这些节省从未实现过-对视频编解码器增量变化带来的效益的最佳评估是接近40%[5]。
在ISO和ITU标准化工作的同时,Google一直在开发他们自己的一系列免版权税的视频编解码器;其最新研发的VP9[6],于2013年首次推出,2014年完成。VP9是基于早前成功的VP8以及Google在2010年收购的On2 Technologies公司开发的“True Motion”系列编解码器。
要牢记,大多数的视频编解码器的改进给解码器和----更多的是编码复杂度上带来非常繁重的计算开销。一个已被弄清楚的是,为了能在商业视频传输服务中被部署,更新更高效的编解码器需要不断增加的复杂度。很明显,每一代视频编解码器都伴随5-10倍的编码器复杂度的增加,而解码器复杂度的增加通常是2倍。
如果接受了更新更高效的编解码器带来的复杂度增加,那么更大的问题是:我们在系统级别可以做什么?例如将视频帧作为输入连接到编码器的方式,或者我们如何使用视频解码器的输出来呈现在屏幕上,以进一步提高视频质量,而这些提升将会被现在这些花费大量时间在视频上的人所感知。
这里介绍的新方法中的关键词如下:
-
感知:视频编解码的整体目标是以一种令人赏心悦目的方式压缩视觉信息;通常而言用于编码器决策的均方差(MSE)并不总是一个与人类感知关联匹配得很好的数字。
-
复杂度:就像我们增加了视频编解码的复杂度,我们也可以减少复杂度。
-
预见性:VOD与广播电视不同,广播电视需要及时的或在最小延迟中进行编码决策,而在视频点播服务中,视频序列在整个过程均是可用的,这就可以被预先分析多次以提高视频质量。
基于镜头(Shot-based encoding)的编码
对于这个技术博客的余下部分,我们假设读者熟悉自适应流媒体的基础知识,例如:
-
使用基本处理单元,以不同分辨率和/或质量,对相同视觉内容进行多重编码表示,称为“流式传输段”
-
为了适应不同的通道条件(比特流切换),按照流媒体客户端的要求,从服务器传送编码的段属于不同的表示方式。
-
相同视觉内容的不同编码表示之间的段的时间对齐以允许比特流切换。
有兴趣的读者可以参考一些可用的自适应流媒体教程,例如this Wiki page [7]。
分块编码(Chunked encoding)
在Netflix 2015年12月发布的技术博客[8]中,我们介绍了分块编码对云编码的巨大益处。这意味着打碎了一个长的视频序列,例如持续1小时,以多个组块,每个组块持续一定时间 - 例如20个组块,每个组块3分钟时长。然后我们用特定的编码配方,独立地编码每个块,连接或“组合”编码块,从而获得整个视频序列的编码版本。
在分块编码的众多优势中,最重要的是它允许使用视频编码软件在云上构建一个强大的系统。如果云实例未能完成某个编码,它只需要重新处理相应的块,而不是重新启动整个长达几小时大的视频编码程序。因为可以并行编码不同的块,人们还可以看到端到端的延迟的减少, 从而在整个编码系统中实现几乎无限的可扩展性。
当然,分块编码也带来一些弊端-即运行在整整一个小时的序列上,尤其是在两通模式下的视频编码器,可以预览随后的内容并做出更好的长期的比特率分配; 从而以相同的比特率实现更好的整体质量。然而,分块编码的利大于弊。
按主题和按块编码的优化(Per-title and per-chunk encode optimization)
Netflix一直在不断提高全球会员的视频质量。期间一个重要的里程碑是发布于2015年12月[9] 的“按主题编码优化”,在我们的技术博客上有详细介绍。按主题编码优化引入了根据复杂度定制编码的概念,这转换为我们目录中每个视频序列的正确分辨率和比特率选择。相对于我们以前的固定分辨率/比特率梯形图,通过考虑视频的特征,产生显著的改进。特征包括: 运动量、细节水平、色彩,以及选择更适合每个主题的编码参数来优化编码效率,。另一个重要的里程碑是2016年12月推出的“按块编码优化”,作为我们“移动编码下载”计划的一部分,这个在Netflix技术博客[10]中有更详细的介绍。 在下一节中将更详细地讨论的均衡R-D斜率的概念也用于这项工作,并提供了重大改进。 事实上,人们可以将当前的工作视为“按主题编码优化”和“按块编码优化”的自然延伸; 我们可以称之为“感知per-shot编码优化”。
从块编码到shot编码
在理想的世界中,人们希望将视频分块,并赋予每个块不同的参数集合,以优化最终组合的视频。实现这种完美比特分配的第一步是以自然而原子的方式分割视频,把彼此非常相似的帧组成一个序列,因此编码参数的变化类似 - 这些就是构成长视频的“shot”序列。这些shot是持续时间相对较短的视频部分,它来自相当恒定的照明和环境条件下的同一台相机。它捕获相同或相似的视觉内容。例如,一位站在树前演员的脸。最重要的是,当更改编码参数时,其变化是一致的。shot的自然边界由相对简单的算法确定,即称为shot变化检测算法。该算法检查属于连续帧的像素之间的差异量以及其他的统计量。当该差异量超过某个固定的或动态调整范围的阈值时,一个新的shot边界被确定。有些可以在两个连续shot之间的边界上应用交叉渐变或其他视觉效果,这类情况则可以通过更复杂的算法来处理。
shot变化检测算法的最终结果是shot列表和它们的时间戳。人们可以使用这些生成的shot作为基本编码块,而不是固定长度的块。这提供了一些非常独特的机会:
-
现在Intra帧的放置可以“始终不规则”,这个术语意味着:
(a)Intra帧可以放置在“随机”的位置。例如前4帧I帧可以是在时间0,2,5,7秒。
(b)然而,时间位置总是在相同主题的编码之间对齐,换言之,前4个intra帧的位置保持在0,2,5,7秒。对于这个主题的所有编码都是这样。
-
Intra帧的不规则位置会带来最小的编码开销;请记住,在视频编码所使用的3种不同类型(I / P / B)的帧中,intra帧的效率最低,因此希望在编码视频中尽量减少它们的存在。
-
在一个很长的视频序列中寻找产生的自然兴趣点,这些兴趣点标记出了shot边界。
-
当独立编码各shot时没有预测惩罚:如果将一intra帧放置于shot中间,则会将shot分割成若干部分。当独立编码而非单个单元编码时,则需要更多位数。这是因为Intra之后的像素无法在Intra帧之前的帧中参考它们的类似对应物。
-
连续拍摄之间的任何重要的编码参数变化都不太可能被人眼察觉,这是因为不同shot中的不同视觉内容所引起的中断对人类视觉系统的破坏比任何可能的编码参数的变化(例如分辨率和质量)都要大得多。
-
由于非常简单的编码方案,例如固定量化参数(“fixed QP”)模式,被几乎现在所有的视频编码器所支持,且提供了非常一致的视频质量,具有几乎最小的比特率变化。故而在同类帧集合内,如属于同一shot的那些帧,使用速率控制的需求就少得多。事实上,在视频编解码器开发过程中一直使用“fixed QP”,因为在MPEG,ITU和其他标准机构中用于测试的所有序列几乎都由单shot视频块组成。
图一:“始终不规则”放置在shot边缘的intra 帧(关键帧)。关键帧在时间上与所有编码的镜头边界对齐。
VMAF作为感知视频质量指标
在2016年6月发布的另一个Netflix技术博客[11]中,我们解释了视频多方法评估融合(VMAF)质量指标,VMAF是由内部开发,后为整个视频社区获益而开源。
VMAF的主要特征如下:
-
它是一个完整的参考指标,这意味着它可以应用于任何原始的、未失真的或已失真视频序列的版本。
-
它考虑到压缩和向上/向下缩放的影响,通过上采样解码视频帧到一个普通的参考帧大小(1920x1080)。这样,就可以使用VMAF来评估不同分辨率的编码视频的质量,尤其可以用来比较不同分辨率下相同内容的编码版本,并帮助判断出哪一个编码效果更好。
-
它依赖于现有的图像质量指标(VIF, DLM),且经过适当修改以覆盖多个分辨率,以及视频序列中连续视频帧之间的移动量,这些移动量作为输入到机器学习权重集中的特征。最后的得分是在支持向量机(SVM)回归器中结合这些基本特征所得的结果。
-
在VMAF中使用的权重校准和训练是通过收集实际观察者的主观数据来进行的,而观察者提供的是VMAF当时适合的基础真实数据。用于training VMAF的内容是Netflix目录的一个有代表性的子集,因此我们了解到它的性能与我们的使用情况一致。然而,VMAF框架是通用的,并且允许其他人根据自己的情况对其进行再training。事实上,大量的研究人员已经使用他们自己的主观数据集验证了VMAF的准确性。
图2:VMAF的工作原理:将像素级数据汇聚以生成帧级特征;利用SVM回归方法融合不同时空特征,来建立帧级质量分数;连续帧的分数被汇集以产生最终的视频序列VMAF分数。
率失真曲线的凸包
Ortega和Ramchandran [12]在1998年的一篇开创性论文展示了在处理图像和视频编码中的多种选择时如何解决最优性问题。
假设图像由N个需要编码的单元组成
-
分别编码每个单元,为每个可能性获取的(速率,失真)对,称之为“工作点”;
-
将所有可用的工作点放在率失真图上;
-
提取它的凸包和边界轮廓;
-
可以从每个单元的凸包上选取一个点,以便不同单元的点具有(大致)相同的distortion-rate斜率。
图3:工作点、R-D凸包的示例,以及源R-D曲线。转载自[12]
组合
因此可以考虑以下系统:
-
一个长的视频序列在shot中分割开
图4:来自“El Fuente”测试序列代表性镜头的缩略图;这个主题包括96个镜头。
-
每个shot使用不同的编码参数进行多次编码,如分辨率和质量(QP等)
-
每个编码都使用VMAF进行评估,并与其比特率一起生成(R,D)点。 可以使用不同的映射将VMAF质量转换为失真; 我们针对线性和反比例映射这两种进行了测试。将在下一节讨论这些映射产生的不同的时间聚合策略。
图5:使用一组参数如分辨率和QP对一个shot进行编码,并获得一个单独的(R,D)点。
-
计算每个shot的(R,D)点的凸包。 在以下示例图中,失真是(VMAF + 1)的倒数。
图6:使用VP9(libvpx)以各种编码分辨率和量化参数(QP)获得的来自“El Fuente”的特定shot的多个(R,D)点。
图7:使用VP9(libvpx)从“El Fuente”拍摄同一shot的(R,D)操作点的凸包
-
来自每个shot的凸包中的点,通过遵循恒定斜率原则并在Trellis中构建端到端路径来组合,为整个视频序列创建编码。
图8:结合shot编码以产生最佳编码; 示例网格路径显示固定的QP编码,针对给定的平均质量来最小化比特率或针对给定的平均比特率来最大化编码质量。 选定的shot编码在(R,D)空间中具有大致相等的斜率。
-
为了能够覆盖到期望的比特率/质量范围,要根据需要来改变R-D曲线的斜率参数,以便产生尽可能多的聚合编码(最终动作点)。
-
最终结果是整个视频序列的完整R-D曲线或速率-质量(R-Q)曲线。
图9:对于整个“El Fuente”视频序列获得的最终的R-Q曲线。 基线则是最好的fixed-QP编码;在这种情况下,动态优化器将比特率平均降低了30%。
这个完整的系统被称为“动态优化器”,该框架产生了Netflix最新一代的编码。
测试方法-结果
使用VP9-libvpx视频编解码器并编码了来自Netflix目录的10个代表性主题。
就时间聚合而言,我们实施了各种池化方法,其中两种方法对应于前面已介绍的质量与失真映射,即线性和反比例映射。 我们称它们为算术平均平均VMAF(LVMAF)和调和平均平均VMAF(HVMAF)。
这两种方法即LVMAF和HVMAF时间质量聚合,产生了非常高质量的编码序列 - 允许分别在组合的视频序列中更激进或更保守的时间质量波动。
VP9编码方法
在VP9-libvpx中使用的编码参数取自以前的研究; 其研究结果发布于2016年10月举行的Netflix的“免版税编解码器开放日”。基于该研究,使用的最佳配置是“fixed-QP, AQ-mode=0, CPU=0, best”,在PSNR和VMAF质量度量方面显示出最高质量。我们在附录中重现该研究的主要结果。
我们将动态优化器获得的结果与VP9-libvpx的最佳固定QP编码的结果进行了比较。 下表总结了所采用的方法和本实验所选择的各种参数。
表1:用于动态优化器实验1的参数
动态优化器获得的相应增益,在以相同视觉质量下的%比特率节省方面以及在相同平均比特率下HVMAF分数改善方面的表示如下:
表2:实验1的结果。在动态优化器和最佳的固定qp编码之间大约256kbps在Netflix目录的10个代表性主题。
当使用HVMAF作为质量指标时,结果是整个视频序列的平均比特率比最佳固定的QP编码节省了17.1%。 而当使用PSNR时,改进甚至更高:平均节省22.5%的比特率。
在这个比较中,由于为整个序列获得固定QP编码的凸包,需要与动态优化器相同的复杂性,所以基线和动态优化器结果之间的计算复杂度保持不变。 因此,这代表了动态优化器带来的改进量的下限。
如果我们使用更常见的基线,如VP9-libvpx中,拥有CPU=1, good, AQ-mode=2编码配方的2-pass VBR配置,则动态优化器的改进要更高:就HVMAF而言,平均节省50%以上的比特率。尽管如此,需要记住的是动态优化器解决方案的计算复杂度也非常高。
其他视频编解码器有多好?
根据前面介绍的内容,可立即明白动态优化器框架中并没有特殊的编解码器。为了证实这一点,一组较短的剪辑使用了H.264 / AVC,HEVC和VP9-libvpx进行编码,实验设置如下:
表3:用于动态优化器实验2的参数
图10:实验2 的结果。在VMAF和PSNR方面,动态优化器相对于AVC-High(x264),VP9(libvpx)和HEVC(x265)的固定QP / CRF编码提高了BD-rate。
表4:实验2 的结果。使用不同的视频编解码器和质量度量,相对于固定QP / CRF编码,动态优化器提高了BD-rate。
可以看到,动态优化器将这三种编解码器的编码效果均提高了大约28-38%。 请牢记,这些改进并不是比较编解码器之间的性能,而是通过使用动态优化器框架来改进各编解码器的性能。在即将到来的几周内,将使用动态优化器作为高级编码框架来对最先进的视频编解码器进行更彻底的比较。
动态优化器总结
动态优化器是对视频编码的优化框架。 其主要特点如下:
-
基于shot的编码
-
在不同分辨率和质量参数下进行多重编码
-
通过使用VMAF作为其核心指标进行感知评估和质量调整
-
大规模并行处理,非常适合基于云的视频编码软件流水线
其主要优势如下:
-
它可以应用于任何现有的或未来的视频编解码器,将它视为视频编码优化框架
-
它可以通过对每个测试视频序列的编码分辨率和质量(QP)进行识别“感知相关”范围来帮助未来的编解码器开发,这也可以在开发和评估新编码工具的性能时使用
-
它消除了视频编解码器实现中的很多速率控制因素,从而实现视频编解码器更公平地比较
-
它与shot编码配方的改进是正交的,如更好的I-B-P编码结构,空间自适应QP选择; 在shot级别执行的任何改进都是动态优化器带来的
-
根据计算资源的数量,其复杂性可以放大或缩小,在复杂性和率失真效率之间提供权衡
-
它生成完全兼容的比特流
-
它可以与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 “Information technology — Coding of moving pictures and associated audio for digital storage media at up to about 1,5 Mbit/s — Part 2: Video”
[2] ISO/IEC 23008–2:2013 “Information technology — High efficiency coding and media delivery in heterogeneous environments — Part 2: Video”
[3] ISO/IEC 14496–10:2014 “Information technology — Coding of audio-visual object — Part 10: Advanced Video Coding”
[4] ISO/IEC 13818–2:2013 “Information technology — Generic coding of moving pictures and associated audio information — Part 2: Video”
[5] J. De Cock, A. Mavlankar, A. Moorthy and A. Aaron, “A large-scale video codec comparison of x264, x265 and libvpx for practical VOD applications”, Proc. of the SPIE 9971, Applications of Digital Image Processing XXXIX, 997116 (27 Sep. 2016)
[6] A. Grange, P. de Rivaz, and J. Hunt, “VP9 Bitstream and Decoding Process Specification”, Google, 2016
[7] “Adaptive bitrate streaming”, Wikipedia — The Free Encyclopedia, https://en.wikipedia.org/wiki/Adaptive_bitrate_streaming
[8] A. Aaron and D. Ronca, “High quality video encoding at scale,” The NETFLIX tech blog, Dec. 9, 2015, link: http://techblog.netflix.com/2015/12/high-quality-video-encoding-at-scale.html
[9] A. Aaron, Z. Li, M. Manohara, J. De Cock and D. Ronca, “Per-title encode optimization”, The NETFLIX tech blog, Dec. 14, 2015, link: http://techblog.netflix.com/2015/12/per-title-encode-optimization.html
[10] A. Norkin, J. De Cock, A. Mavlankar and A. Aaron, “More Efficient Mobile Encodes for Netflix Downloads”, The NETFLIX tech blog, Dec. 1, 2016, link: https://medium.com/netflix-techblog/more-efficient-mobile-encodes-for-netflix-downloads-625d7b082909
[11] Z. Li, A. Aaron, I. Katsavounidis, A. Moorthy, and M. Manohara, “Toward a practical perceptual video quality metric,” The NETFLIX tech blog, June 5, 2016, link: http://techblog.netflix.com/2016/06/toward-practical-perceptual-video.html
[12] A. Ortega and K. Ramchandran, “Rate-distortion methods for image and video compression: An overview,” IEEE Signal Processing Magazine, vol. 15, no. 6, pp. 23–50, 1998
[13] A. Park, D. Derlinger and C. Watson “Creating your own EC2 spot market,” The NETFLIX tech blog, Sep. 28, 2015, link: http://techblog.netflix.com/2015/09/creating-your-own-ec2-spot-market.html
[14] R. Wong, D. Derlinger, A. Shiroor, N. Mareddy, F. San Miguel, R. Gallardo and M. Prabhu “Creating your own EC2 spot market — part 2,” The NETFLIX tech blog, Nov. 23, 2015, link: http://techblog.netflix.com/2015/11/creating-your-own-ec2-spot-market-part-2.html
附录:VP9配方测试
在VP9-libvpx中使用的编码参数取自以前的研究; 其研究结果发布于2016年10月举行的Netflix的“免版税编解码器开放日”。基于该研究,使用的最佳配置是“fixed-QP, AQ-mode=0, CPU=0, best”,在PSNR和VMAF质量度量方面显示出最高质量。下图显示了在VP9-libvpx编码中选择不同参数时,对平均BD速率损失的影响。
图11:VP9-libvpx编码中AQ-mode = 0/1/2的作用; AQ-mode = 0效果最佳(摘自2016年10月Netflix的“Open House on Royalty Free Codecs”的 “VP9 Encoding Opportunities @ Netflix”演示文稿)
图12:VP9-libvpx编码中CPU0 / best的影响; CPU0 / best是最慢的,但提供的结果始终优于其他设置(2016年10月发布的关于““VP9 Encoding Opportunities @ Netflix”,摘自Netflix“Open House on Royalty Free Codecs”)
图13:VP9-libvpx中2-pass VBR/ fixed-QP的BD率损失(2016年10月,Netflix的“Open House on Royalty Free Codecs”的节选,“VP9 Encoding Opportunities @ Netflix”演示文稿)
-
英特尔
+关注
关注
61文章
9953浏览量
171696 -
编码器
+关注
关注
45文章
3639浏览量
134430 -
视频编码
+关注
关注
2文章
113浏览量
21018
原文标题:动态优化器—一种感知视频编码优化框架
文章出处:【微信号:livevideostack,微信公众号:LiveVideoStack】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论