现在越来越多的人在手机、平板、笔记本等移动终端设备上观看在线视频。对于视频服务提供商而言,视频的存储和带宽资源的消耗在持续增加。如何为成千上万的终端用户高效地传输高质量的视频流是各大视频服务提供商正在研究的热点问题。
1 传统的ABR编码技术
当前网络上传输的视频主要使用自适应码率(Adaptive Bitrate, ABR)视频流技术来优化终端播放的质量,例如HLS,MPEG-DASH等等。一个ABR视频流中包含了同一视频切片的多份不同类型的版本,即不同的码率和分辨率组合。当终端设备开始请求视频流时,播放器会收到该视频流的包含各种码率分辨率版本的清单。而播放器会根据多个因素,例如当前网络允许的带宽、缓冲区的充盈度、播放窗口的大小等等,来选择合适的视频切片进行播放。在视频播放期间,当这些因素发生变化时,播放器会自动切换到更高质量或更低质量的视频流,来确保用户在最小的缓冲时间内获得较好的观看体验。
视频服务提供商通常会使用一个事先确定好的通用的ABR编码配置来处理几乎所有的视频内容。在服务端预先应用最优的编码配置编出不同目标码率的视频流,而在用户端采用自适应的算法能够快速选择质量最好的视频流,从而避免了因为缓冲所带来的重播或中断。但如何选取最优的编码配置来编视频并非易事。例如,假定有1Mbps的带宽,采用H.264/AVC编码器编码,是应该编成480p的,720p的,还是1080p的码流?如果编成480p,1Mbps的码流几乎不会出现一些类似块效应或振铃效应的编码失真,但如果用户正在使用HD播放设备,经过上采样的视频内容可能不会显得那么锐利。另一方面,如果编成高分辨率的1080p视频,给定的带宽可能会有点低,会使许多视频帧不可避免地出现失真。
Netflix在2010年晚些时候开始应用H.264/AVC编码器,那时视频团队研究出了在不同类型的视频上都表现不错的通用编码配置。经过测试不同的编码参数以及开展各种主观视觉测试后,得到了比较通用的编码器配置。例如下表给出了当时得到的不同码率和分辨率最优组合,在某一分辨率下,其对应的码率足以编出几乎没有明显失真的视频流。
在给定码率限制下,这组配置对于绝大多数视频内容而言都可以编出较好的质量。然而对于一些特殊情况,例如如果出现较多的摄像机噪声或者颗粒噪声,像最高5800kbps的码流也会在噪声区出现明显的块效应。另一方面,对于类似卡通动画等简单视频场景,用5800kps的码率编1080p又显得太过充足。此外,对于带宽只有1750kbps的用户而言,足以观看分辨率较高的720p动画内容,而不是上表指定的480p。
一般情况下,这种通用ABR编码配置中的码率分辨率组合并不是最优的,不能应对所有的情况,包括复杂度各异的视频内容,种类各异的终端播放设备。例如,对于一些动画类型的视频,不超过2500kbps就能轻松编出45dB以上质量的码流;对于一些复杂非常高的动作类视频可能需要8000kbps才能勉强编出能接受的38dB的码流,如下图所示。
因此,传统的ABR编码技术不能对所有类型的视频内容都产生比较好的效果,在不同类型的视频之间不可避免地产生很大的不一致性。编码高复杂度的视频,例如体育比赛场景(质地细节丰富,运动剧烈),通常要比低复杂度的动画类视频需要更多的码率,来达到一个可接受的观看质量。如果调整通用的ABR编码方案倾向于提升高复杂度视频的编码质量,那么对于低复杂度的动画类视频而言,就会浪费存储和带宽资源,在实际应用中会带来更多的成本开支。例如,对于内容复杂度较小的动画类视频,通常可以用更低的码率来编。
2 感知内容的ABR编码优化技术
感知内容的ABR编码优化研究更加关注视频用户体验以及计算、存储、带宽等资源之间的平衡。下表列举了不同码率模式的特点。可以看出,比较理想的Content Aware ABR方案突出了不同视频内容的差异性,针对不同视频类型量身打造了符合其内容特性的编码模式,兼顾了编码质量和带宽等资源的消耗。
目前,基于内容特性的ABR编码优化主要有以下思路:
1. 基于一种符合人眼视觉特性的视频质量评价指标失真评价的测度(比如SSIM),以此作为编码优化的方向,使得编码后的视频在主观体验上更优,该方法主要用在RDO模式判决计算中。
2. 多pass编码,通过预分析收集符合该视频内容特性的编码参数,缺点是复杂度过高。
3. 根据预测模型分析源视频的内容特性,得到关键编码参数,该方法需要大量的训练数据集。例如,下图展示了一种根据预测模型分析视频内容特性的自适应编码框架【1】。
在这个系列中,我们将围绕Content Aware ABR(CA-ABR),对目前工业界和学术界的实现技术进行梳理。让我们先从视频界的翘楚——Netflix开始探究之旅。
3 Netflix的相关研究
早在两年前,Netflix团队根据大量实验结果提出了Per-Title编码优化技术【2】。Per-Title编码技术主要解决了以下问题:给定一类视频,需要编出多少个具有区分度的质量级,每个质量级对应的最优码率分辨率组合是多少,要达到较好的视觉质量至少需要多少码率。相比于之前传统的ABR编码方案,Per-Title编码技术更加注重不同类型视频之间的区分度。
考虑一个内容场景较为简单的动画视频,大多数帧都是由平坦区域组成的,没有任何的摄像机或颗粒噪声,帧和帧之间的运动变化也很小。下图对比了通用编码配置和基于内容特性编码配置的编码结果。
如上图所示,用2350kbps编码的1080p视频(A点)具有较高的编码质量。而当码率增加到4300kbps(B点)或5800kbps(C点)时,编码质量的提升在主观视觉上显得微乎其微,因为质量在45dB以上的码流存在的失真几乎无法察觉。若使用原来的固定编码配置,2350kbps的码率只能编成720p(D点),在相同带宽下用户此时被限制只能观看720p的画质而不是更高质量的1080p。
另一方面,考虑一个动作电影视频,相比动画视频在时域和空域上都具有非常高的复杂度,例如快速运动的物体,快速的场景切换,爆炸场景,水波纹场景等等。下图给出了动作视频的质量码率曲线。
编码高复杂度的1080p视频场景,例如在A点,4300kbps的码率编出的视频流会产生明显的编码失真,例如出现块效应,振铃效应以及轮廓线。一个更好的选择是编成720p(B点),可以在很大程度上避免这些失真,代价就是要进行空间上的采样。但是编码前下采样和用户端上采样所导致的内容模糊比起直接编1080p所带来的那些显而易见的失真而言,观看体验会更好一些。如果条件允许的话,对于高复杂度的视频,直接用7500kbps(E点)编1080p可以基本上完全消除这些编码失真。
3.1 per-title复杂度分析
为了设计最优的基于视频内容特性的编码配置,根据一些实际工程上的限制和需要,选出所有的质量级,以及每一质量级下的码率分辨率组合。例如,为了后向兼容之前的设备,分辨率集合包含:1920x1080,1280x720p,720x480,512x384,320x240。而且码率也限制在一个有限的集合内,相邻码率大概增加5%。
最优化配置的几点考虑:
1. 选取的码率分辨率组合应该是充裕的,在给定的码率下能编出尽可能高的质量。
2. 相邻码率点应该有视觉质量上的差异。理想情况下,两个相邻码率点的质量差异应恰好具有区分度(一个JND级)。这就确保了在切换码率时视频流质量能够平滑过渡,而且保证了在给定视觉质量范围内划分出最少数量的质量级。
考虑下面这个例子,对于三个分辨率版本的同一视频源,使用不同的码率来编。
在各个分辨率下,编码质量随着码率的增加而单调上升。当码率达到一定阈值后,曲线开始变得平缓,如点A和点B。这是因为在每个分辨率下都有一个所能达到的视觉质量上限。另一方面,较高分辨率视频编出的质量(点C)可能还不如同一码率下低分辨率视频的质量(点D)。这是因为粗糙地编码具有更多像素的高分辨率视频,与精细地编码像素数较少的低分辨率视频相比,后者的重建效果会更佳。进一步而言,在低码率下每一个编码单元的编码开销开始成为码率消耗的主要部分,而留给真正视频信息的编码比特数已经很少了。因此使用低码率来编码高分辨率的视频就会产生诸如块效应、振铃效应等编码失真。
基于上述讨论,下图展示了任意一个视频源在不同分辨率下码率和质量之间的关系。
可以发现,每一个分辨率下都存在一个码率区域,在该区域内编码质量效果要优于其他分辨率。如果收集所有的可用分辨率下的这些区域,就形成了一个边界,即凸包。从经济学的角度而言,这个凸包就是所有码率点所能达到的帕累托最优。理想情况下,希望编码后的点可以落在凸包曲线上,但由于实际情况的限制,只能选取有限的码率分辨率组合来逼近这个凸包。
实际中,在整个质量范围内为每类视频构建这个曲线是不可能的。为了在使用中有一个可行的解决方案,可以在有限的分辨率集合上用不同的Constant Rate Factor (CRF)【3】点试验。CRF点的选择应使得编码质量恰好具有JND区分度。对于每次试验,得出实际的码率和质量。基于这些离散点,插值出每个分辨率下的曲线。最终,per-title最优码率分辨率组合通过选取最逼近凸包的点来获得。
实际处理时,对于由不同复杂度场景组成的电影或电视节目,为了得出最优的编码配置,在分析时仅使用了高复杂度场景片段。因此得出的编码配置对于视频中复杂度较高的场景是适用的,但对于低复杂度场景而言码率可能过于充足。
3.2 两种编码方案
3.2.1 per-title编码
在完成该视频类型的内容复杂度分析之后,就会得到per-title最优的分辨率码率组合,从而启动编码过程。对于每个特定分辨率码率组合的视频,通过下述基于云的编码流水线【4】完成,如下图所示。视频源被分割成固定长度的片段,每个片段在并行编码流水线上单独编码。等所有片段编码完成之后,组合成完整的视频码流。通过在每个片段上采用two-pass码率控制,使得每个片段具有相同的平均码率,最终编出来的码流符合目标码率要求。
3.2.2 per-chunk 码率设置与编码
对于每一个编码片段,码率的选择依赖于该片段的复杂度。如上所述,复杂度分析能够得到per-title最优的分辨率码率组合(Ri,Bi),而这个组合与用来进行测试编码(3.1节末尾提及)的CRF值相对应Ci。因此这个CRF值代表了第i个配置点的目标质量。per-chunk码率自适应的目的就是为了在Bi码率下编出质量为Ci分辨率为Ri的视频流。由于得到per-title最优的分辨率码率组合时使用的是比较复杂的场景片段,因此per-chunk码率自适应会使得平均码率低于Bi。
在实际操作中,使用multi-pass编码。对于每个片段n,第一个pass编码时使用CRF值Ci,得到该片段的码率Bi,n。基于此码率,进行以下两个操作:
1. 当Bi,n不超过最大的码率Bi时,Bi,n作为第二个pass编码的目标码率。第二个pass编码中使用第一个pass编码得到的per-frame统计信息。与第一个pass相比,第二个pass改善了比特分配过程并保持整体的质量一致性。
2. 如果per-chunk的码率超过了最大码率,就会启动一个新的two-pass编码,码率为Bi。因此对该片段而言,最终会变成three-pass编码。
3.3 实验结果
3.3.1 per-title与fixed-ladder(固定配置组合)比较
下图a展示了中等内容复杂度下的per-title与fixed-ladder编码结果的码率和分辨率曲线。可以看到,per-title编码方案可以使得播放端在更合适的码率下切换视频流的分辨率。例如使用per-title方案可以在更低的码率切换到高分辨率的视频流。从图中可以看出,以前只能在2350kbps码率切换720p,现在就可以在1050kbps码率切换到720p。
下图b展示了较高复杂度视频的编码曲线。在低分辨率情况下,增益同样较为明显,证明了在凸包曲线附近编码的优势。另外对于高分辨率1080p,低码率下无明显优势,除非码率充足时在更高的码率下(如7500kbps)可以使得主观视觉质量更优。
3.3.2 per-title与per-chunk比较
下面两幅图展示了per-title与per-chunk编码结果比较。图中每个点表示10秒长度片段。编码结果表明per-chunk方案的效果要优于per-title方案,per-chunk编码平均PSNR值为38.11dB,per-title为37.98dB。per-chunk的平均VMAF(3.4节介绍)值为72.29,per-title为71.26。另外,per-chunk总体上每帧质量的方差比per-title的小得多,质量一致性更好。
3.4 最新的视频质量评价指标VMAF
近期,Netflix团队又提出了一种新的视频质量指标VMAF(Video Multimethod Assessment Fusion)来更好地评估视频编码质量,这将更好地支持基于内容的ABR编码技术研究【5】。VMAF由多种基本的视频质量指标融合而成,可以更加精确地预测编码视频的主观质量。由于每一个基本的视频质量指标在评估视频内容特性、编码失真类型以及失真程度等方面具有各自的长处和不足,Netflix基于自己的视频数据集,采用机器学习算法(SVM回归)将这些不同的质量指标融合为了一个综合性的质量指标VMAF。其中每一个基本指标被设定有不同的权重,最终的VMAF则保留了各个指标的特性,因此可以更加精确地预测编码质量。下表对比了不同视频质量指标与主观DMOS之间的相关性,可以看出VMAF表现最优。
此外,下图直观展示了部分测试结果,结论同上。
参考文献
1. Y. Zhu, Li Song, etc. “SJTU 4K Video Subjective Quality Database for Content Adaptive Bitate Estimation without Encoding”, BMSB2016
2. https://medium.com/netflix-techblog/per-title-encode-optimization-7e99442b62a2
3. L. Merritt and R. Vanam, “Improved rate control and motion estimation for h.264 encoder,” in IEEE International Conference on Image Processing (ICIP). IEEE, 2007, pp.309–312.
4. https://medium.com/netflix-techblog/high-quality-video-encoding-at-scale-d159db052746
5. https://medium.com/netflix-techblog/toward-a-practical-perceptual-video-quality-metric-653f208b9652
6. J. De Cock, Z. Li, M. Manohara and A. Aaron, "Complexity-based consistent-quality encoding in the cloud," 2016 IEEE International Conference on Image Processing (ICIP), Phoenix, AZ, 2016, pp. 1484-1488.