首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【视频编码】 Content Aware ABR技术(五)

【视频编码】 Content Aware ABR技术(五)

作者头像
用户1324186
发布2018-03-06 09:36:09
1.1K0
发布2018-03-06 09:36:09
举报
文章被收录于专栏:媒矿工厂媒矿工厂

在本系列前面的帖子中,我们梳理了Netflix、YouTube、Beamr和EuclidIQ在ABR方面的一些进展,本文将简要介绍一下编码优化领域的另一位成员—Bitmovin的技术动态。

1 Bitmovin per-title encoding

早在六七年前,per-title encoding相关的概念就已经提出,不过大多数早期的研究基本上都认为per-title encoding仅在实验环境下有效,而并不适合商业应用,因为每个视频在编码前需要进行大量的编码测试分析才能得到每种分辨率下对应的最佳码率。直到近两年,Netflix团队通过多年的努力提出了一种视频复杂度分析开销较低的方案,使得per-title encoding进入大规模实际应用成为可能。

per-title encoding简单而言就是基于每个视频自身的复杂度找到对应每种分辨下的最佳码率,在这个码率下编码器编出的码流恰好具有可以接受的视觉质量。这个最佳码率因视频的类型而异,对于动作或体育类型的视频,一般包含更加复杂的场景内容,因此编码时需要更高的码率来保留这些信息。相反,对于场景简单的动画视频而言,使用较低的码率编码就可以保持近乎相同的视觉质量。(注:关于Netflix per-title encoding的详细内容请参考本系列之前的帖子)

我们知道,当原有的固定编码配置(即分辨率和码率组合)对于给定的视频类型并不适用时,重新获得一组最佳的编码配置是很耗时耗力的。因此,根据输入视频的复杂度将给定的编码配置进行自适应调整则是一个更好的选择。Bitmovin据此提出了以下思路,如图1所示。

图1 Bitmovin per-title encoding框架

在图1中可以看出,Bitmovin per-title encoding的第一步是进行复杂度分析,即根据输入视频的内容计算复杂度因子。在H.264中提供了一个CRF(Constant Rate Factor)选项,该选项用来确定输入视频的一个质量级别。编码前先通过CRF encoding得到平均码率,该码率能够反映输入视频整体的内容复杂度,进而可以确定出该视频的复杂度因子。一般情况下,复杂度因子分布在0.5到1.5之间,其中0.5到1属于低复杂度范围,1到1.5属于高复杂度范围。有了复杂度因子后,接下来就可以用它来调整给定的编码配置。

表1给出了一种编码配置的调整示例。对于低复杂的视频内容,可以使用更低的码率来编码。特别是在高码率配置中,码率调整的幅度更大一些,码率得到节省的同时不会对视觉质量带来明显的降级。而在低码率配置中,码率调整的幅度相对较小,避免产生明显的视觉失真。与之相反,对于高复杂度的视频内容,需要使用更高的码率来保证码流具有较高的视觉质量。特别是在低码率配置中,码率调整的幅度更大一些,因为在这些配置中增加一些码率就能带来明显的质量提升。而在高码率配置中,调整的幅度相对较小,此时码率的进一步投入不会带来明显的质量收益。因为根据相关研究可知,对于PSNR超过45dB的视频,码率的变化并不会带来视觉上的差异,而PSNR低于35dB的视频视觉差异会比较明显。

表1 编码配置调整示例

表2给出了上述Bitmovin per-title encoding方法的部分结果。对于低复杂度的视频,例如卡通类型的Glass Half,在高码率配置(width 1920)下码率降低了30%,而SSIM结果几乎相同。虽然PSNR从51.51dB降到了47.78dB,但根据上文分析可知不会出现明显的视觉差异。此外,图3展示了Bitmovin官网提供的demo效果对比,可以发现使用per-title encoding方案编码的码率更低,但视觉效果与之前几乎相同。

表2 Bitmovin per-title encoding的部分结果

图 2 编码效果示例(Glass Half)

以上部分介绍了Bitmovin per-title encoding框架:通过一次CRF encoding评估输入视频的复杂度因子,进而调整该视频不同分辨率下的码率配置。该方法相比Netflix per-title encoding更简单一些,如果针对每个分辨率都做一次CRF encoding,效果可能会有进一步的提升。(Netflix per-title encoding:先对输入视频进行测试编码获得各个分辨率下的rate-quality曲线,如图3所示。然后对这些曲线拟合得到凸包曲线,凸包曲线上的点即为各分辨率下的最佳码率点,但该方法相对耗时耗力 )

图3 Netflix per-title encoding方法示意图

2 Bitmovin per-scene adaption

虽然不同类型的视频整体的复杂度不同,但一般而言,在一个输入视频中不同的场景也具有不同的复杂度,即使是一个动作电影,其中也包含不少复杂度较低的场景。因此基于场景内容复杂度的per-scene encoding为ABR编码优化提供了一个新思路,并且这类方法处理视频的粒度更加精细,效果也更好。例如,对于视频内部的低复杂度场景可以采取更低的码率进行编码传输,而不会影响整体的视觉质量。据此,Bitmovin提出了以下per-scene adaption优化方法,整体框架如图4所示。

图4 Bitmovin per-scene adaption框架

从图4可以看出,per-scene adaption在编码中提取出了quality metadata数据,这使得客户端的自适应模块能够做出更加精确的预测和处理。具体而言,服务端首先对输入视频进行per-chunk编码并提取上述quality metadata数据。这些数据包括了由不同质量工具PSNR、SSIM、VMAF等组合产生的quality index,用以指示不同场景的复杂度和质量级别。之后,所有这些信息通过playlist/manifest或容器等方式随着码流传输到了客户端。在客户端接收到这些信息之后,其自适应模块能够根据上述信息(同时包括本地状态信息如数据吞吐率、缓冲区的充盈度、用户偏好等),对低复杂度的场景片段使用更低码率的码流版本,具体如图5所示。从图中可以看出,传统算法对简单场景仍然保持在2Mbps左右的码率,而Bitmovin的per-scene adaption方案自动将码流切换到了1Mbps,因此使用该自适应方案可以有效节省带宽。与此同时,在部分高复杂度场景,per-scene adaption方案自动切换到了较高码率的码流,因此这部分视频的视觉质量得到了提升。

此外,图6进一步给出了码率随时间变化曲线,可以看出传统算法在整个序列播放期间对于不同场景使用相同码率的码流,而per-scene adaption方案则根据场景复杂度的不同智能选择合适码率的码流进行播放,可见per-scene adaption方案降低码率的效果较为明显,此外还可以在网络带宽不佳的情况下有效避免播放卡顿。

图5 per-scene adaption码流切换示例

图6 码率变化曲线

参考资料:

1. https://bitmovin.com/per-title-encoding/

2. https://bitmovin-a.akamaihd.net/blog-contents/per-title/#

3. https://medium.com/netflix-techblog/per-title-encode-optimization-7e99442b62a2

4. https://bitmovin.com/per-scene-adaptation-going-beyond-bitrate/

5. https://bitmovin.com/higher-quality-lower-bandwidth-multi-codec-streaming/

6. https://bitmovin.com/quality-and-bandwidth-optimization-with-advanced-video-streaming-techniques/

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-01-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 媒矿工厂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档