Press "Enter" to skip to content

百度媒体云智能编码技术实践

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

 

随着视频行业的蓬勃发展,提升视频质量,降低带宽成本成为各平台的首要挑战目标。本文来自百度云资深工程师邢怀飞在LiveVideoStackCon 2018大会的精彩分享。在分享中其对百度云智能编码技术进行了深入介绍,并结合具体实践进一步介绍AI技术在云转码中的应用探索。

 

文 / 邢怀飞

 

整理 / LiveVideoStack

 

大家好,我是来自百度云的邢怀飞。毕业后一直在从事多媒体方面的工作,从最初的网络音乐播放器设计与实现到视频编码相关的技术研发工作,目前主要负责百度媒体云的编码、转码算法方面的优化工作。

 

本次为大家带来的分享是百度媒体云智能编码的技术实践,其主要内容分为以下几个方面,首先简单介绍下云转码技术及其优化,接下来重点介绍智能转码技术能够给公有云服务带来怎样的提升,最后介绍我们的下一步云技术探索工作。

 

1. 云转码技术简介

 

1.1概述

 

 

云转码是一个比较基础、成熟的服务,它包括格式的转码,协议的转码和封装的转码。各种各样的视频源转码成不同格式、不同协议、不同分辨率的码流后在不同网络中分发到不同终端用户上,从而使得每个终端上的用户都能有更好的体验。我总结了移动端云转码的一些特点,首先互联网视频的内容量非常大,海量视频需要转码;第二点就是视频格式多种多样,需要对其进行规一化;最后非常重要的一个特点是分布式的并行转码,即利用计算资源换取计算的转码时间和质量。转码服务通常具有一定的服务目标,比如高可靠性、高速的转码和高容错性。转码最终的目标是在相同的带宽条件下,或者相同的码率条件下,能够最大程度上提升视频的质量和用户体验。

 

1.2百度FEED应用案例

 

百度在视频方面的投入也非常大,在这里列出了当前百度在视频FEED流里上线的三款产品。百度APP,与之前版本最大的不同之处在于其首页中存在一个短视频的入口。另外两个APP是好看视频和全民小视频。

 

1.3百度媒体云支持视频FEED

 

 

接下来了解一下云服务在整个视频FEED流端到端的解决方案中处于什幺位置。首先我们内容主要来自于UGC或PGC,比如PGC方面有百家号平台,UGC则是每个端上都会有用户自己上传到云平台的内容,流媒体部分包括视频的存储,转码,处理以及视频水印、黑边处理等。其中比较有意思的是黑边处理,比如在PC上播放视频通常为横向,由于目前大多数人选择用手机看视频,而手机界面呈现的视频是竖直形式的,如果把手机上的视频传到PC上观看时会产生黑边,这是非常影响用户体验的,有些作者会选择加一些特效、黑边的处理。其中包括了智能检测黑边,裁剪黑边等一些技术。在整体piepline中我重点列出了两部分内容,一部分是VOD平台对整体视频的处理,另外一部分是视频内容的理解,其中包括视频标签,视频质量,视频审核等,经过审核之后视频会统一录入到视频物料库,进一步加工,接着会进入视频推荐系统根据用户的兴趣与关注点进行视频FEED流的推荐。

 

1.4技术挑战

 

 

客户提出的要求也可以看做是我们做云转码技术所面临的挑战。首先需要有一个完善的功能,用四个字概括就是”多、快、好、省”。”多”,即功能多;”快”,即转码的速度快,保证视频服务的时效性;另外就是在功能上要集成更多的AI能力,以应对客户其它定制化的需求,而且我们可以用工作流的方式来满足不同客户的要求。”好”,即实现好的用户体验,或者是在压缩之后有好的质量。”省”,即要节省用户的运营费用。接下来就了解一下如何实现这些需求。

 

1.5技术架构

 

 

这里介绍下我们云转码技术的技术架构,首先用户会发送一个转码的请求,这个请求通过API后会有各种各样的参数和模板的设置。然后把用户请求放在一个负载均衡和任务调度的队列里进行智能的调度。这里最根本的一个特点就是我们的转码实例(Worker实例)也都是通过分布式的计算资源处理的。我们将Worker类型分为三种,首先要实现海量的转码需要进行视频检测,检测原视频是否有问题以及预期的转码效果是怎样的,接着制订一些转码策略。第二个Work实例就是分片转码。转码实例就是整个真正执行转码操作的运算单元,在所有的分布式的机型中完成转码后还有一个视频合并的环节。另外视频AI的计算也放到了整个分布式的计算单元里。在分布式转码里会因为中间存储的一些结果,比如分片的每个中间结果都会存到分布式的文件系统上。介绍这个技术架构是为了后面介绍如何将智能转码融合到我们现在的云转码的基础设施里。

 

2. 视频转码优化

 

2.1资源管理&任务调度

 

 

前面介绍了基本的架构,接下来会重点介绍我们的资源管理和调度的情况。我们现在用的计算资源大部分是CPU利用率不是很高的机器,把它进行虚拟化之后可以供转码的服务进行调度,但问题是无法保证服务质量。因为有的机器的计算资源是不均衡的,这时我们就需要对计算资源进行一个比较智能的调度。本质上来说,一个转码的任务如何给它更合理的,或者更智能的实现资源的分配呢?这时候我们就提出了基于复杂度预测的调度算法。一个转码任务的复杂度与很多的因素有关系,其中包括时长,分辨率,Codec类型,质量要求以及实效性要求。于是我们通过设置一个海量的视频模型,根据原视频的信息训练出一个大的模型,根据这些参数就可以预测复杂度。我们就通过这个模块调度到相应的计算资源,包括CPU、GPU集群和FPGA的集群。

 

2.2工程优化之分片策略

 

 

接下来我会介绍如何对视频进行分割,首先给大家介绍一下分片策略。一个视频是随着时间的不断变化的场景,这是最简单的一个策略,也就是按照时间的均匀分片。但是这种策略会遇到各种各样的问题,有可能你按照时间进行分片了,然后经过视频转码之后发现时长多了或者有其它的问题。后面我们针对一些场景包括智能转码的场景对分片的策略进行了一些优化,比如分片的精度到达了浮点数的精度。然后我们会根据视频的场景进行分类,同时保证每一个分片的边界是在一个GOP的边界上。基于场景的分片的好处将在下面的智能编码环节做进一步的介绍。

 

2.3视频容错

 

 

在整个转码的工程里也会遇到各种各样的问题。由于原视频是多种多样的,所以会存在各种各样的语法问题,用户视频上传不完整,视频质量问题以及时间戳问题。这些是在转码里非常需要解决的问题,但是却并没有特别好的方法去解决,只能当遇到问题时,用户反馈的问题,或者我们自身发现有问题,然后逐一分析解决。我们能做的事情是在转码后进行一个完整性的检查,比如在时长上是否和预期的一致,在质量上我们还会加入质量后检测这个环节,当然用什幺样的指标去检测,这在后面还会有介绍,到底用PSNR,SSIM或者是VMAF都是可以。

 

2.4 Codec参数调优

 

 

在视频编解码参数Codec调优方面,我们目前采用的是一些比较常规的开源技术方案,当然最重要的目标是实现编码复杂度与质量的折中。视频的预处理就是优化的一个方向,也就是在视频的序列送到编码器之前,如何让人眼看到的效果更好,这样就能使得编码后的效果更好。其中就包括运用AI技术实现视频增强的效果,实现超分辨率技术。在人眼主观质量优化方面也是一个优化的方向,比如基于人眼感兴趣的一些区域可以多分配一些比特,同时在服务器选择,或者是在其它的的模块中可以用一些HVS相关的指标进行历史数据优化。

 

2.5码率控制方法

 

 

接下来再介绍一下码率控制方法。实际上视频内容类型非常多,图中列出了四种不同的场景,一个是非常简单的PPT场景;比较复杂的如NBA等体育比赛场景;室内访谈场景或者是室内电视剧场景。场景不同,那幺在相同质量下码率也是不同的。在这里列出了几种码率控制的方式,但是如何去选择它呢?不同码率对带宽和质量的要求是不一样的, CBR码率非常恒定,但是它的质量波动比较大;VBR的码率有波动,但是它的质量相对来说要好一些。这时我们就会区分是带宽方面,还是质量方面的要求。

 

3. 智能编码技术

 

3.1内容自适应编码

 

 

下面主要介绍我们的最重要的目标,比如我们做内容自适应编码时目标是在人眼主观上实现一个恒定质量的用户体验。那幺接下来引入我们的智能编码技术。上面的第一张图是对传统的ABR的介绍,这种传统的方法首先在同一时间要编出几种不同码率的流出来,然后根据终端用户网络带宽情况的探测推荐一条最合适的码流。但是它的缺点是,比如上图中Apple TN 2224推荐的一个标准,它认为在一定的分辨率条件下就应该采用对应的码率。2015年Netflix提出内容自适应编码,名为Per-Title的技术。在上图中,横坐标表示码率,纵坐标表示质量,可以看到越往上质量越高,越往下质量越低。图中的线证明每一个视频都有自己唯一的一条曲线的特性,从编码角度来说这是一条RD(率失真)曲线。如何在这些曲线上找到针对于Title本身的一条最优的曲线,这就是我们要解决的问题。

 

3.2内容自适应编码CAE

 

 

我们在做CAE的时候可以在不同的粒度上做,从上图可以看到最初的一个粒度是视频类别,它的做法是用AI的一些方法或者是通过图像里的内容本身或者其他方式分析出视频内容是PPT还是球赛等。第二个级别是实现一个Title级别,它的做法是对一个片子进行分析,但是这个片子有长有短,即便是同一视频类型,比如一个动画片,它可能有运动剧烈的动画片,有运动缓慢的动画片,这都是有很多区别的。再更精细一点就到了分片场景,这个就跟云转码结合起来。我们可以在Chunk 级别上做内容自适应,但是在Chunk阶段也可能做得不会那幺好。那幺接下来就是场景级别,我们认为在一个场景里的视频的复杂度变化不是特别快。因为我们做场景检测的时候就会区分出不同场景之间的边界。大家做的最深入的就是帧级别,它牵扯到对Codec本身的一些优化,也就是需要根据内容本身的程度做码率的分配。而我们的方案还是选择场景级别,也就是做与Codec无关的方案,但是也不是绝对的无关,因为每个Codec都有自己的特性。

 

3.3视频源特性分析

 

 

那幺我们就要对内容特性进行分析,我们做Codec时候,视频序列是多种多样的,视频源的复杂度也是不一样的,传统的都是基于分辨率@码率的配置。上图中的四幅图是比较典型的,在测试序列里假设分为ABCD四类,A类是几乎静态的;B类是一些室内的场景;C类是一些比较动态的,比如足球比赛;D类的在测试序列里是非常难的一种,这种场景是非常难编的。介绍这个的原因是在我们的服务里,比如现在最热的短视频,小视频,甚至长视频等等,给我们提供一些思路来在这里面进行应用。

 

3.4视频源复杂度的表征

 

 

内容的复杂度在ITU的建议书里很早就给出了一个公式。右边这张图是我从最新的MSU的Codec对比里摘出来的,这幅图在选择测试序列的时候会对测试序列进行一些分类,获取时间复杂度信息,空间复杂度信息,然后再评判Codec好坏。做这个分析是为了智能编码做一些准备。我们所要解决的最根本的问题是如何从视频内容的复杂度,视频质量,还有视频码率中找到他们之间的关系,或者是从曲线上选择一个最优的参数。当然这里的视频质量也有专题介绍,它相关的因素也很多。

 

3.5、码率与质量的关系

 

 

视频质量相关的因素有很多,首先是视频分辨率,现在到了4K,8K,大家也是在无止境的往高处追求。第二个就是视频帧率,帧率就是每秒24帧以上,那是对人眼的最基本的应用,也是越高越好。视频码率,在本质上来说,在相同的条件下视频码率是决定视频质量最关键的一个因素。第四个因素就是我们今天讲的视频内容本身,因为内容不一样复杂度也不一样。另外不同Codec类型也是视频质量相关的。但是如何进行评价呢?可能这个话题比较大了,但是我们在具体做自适应的时候会选择适应自己的一个指标,比如我们现在选择的还是比较传统的方法,即PSNR。至于主观的指标上的要求,我认为得看优化方向是什幺,并不是一定要根据潮流选择最新的评价指标。但是我们最重要的目的是要在曲线上能够针对内容找到最优的一个点出来。如何找到这个点呢?这里有两种方法,第一种是我们可以基于参数模型的方法,就是无参考的质量评估的一个问题。第二种就是基于机器学习的方法,因为现在是一个海量视频的时代,如何从一个海量视频里利用海量视频的特性,再结合现在最潮流的AI的技术从而找到一些关系。

 

3.6无参考质量评估方法

 

 

这里对无参考的质量评估进行简单介绍。在国际标准里有很多不同的模型,这些模型也是有好有坏的,但是一直在不断的进行优化。下面我举一个例子,这个工作是由国内上海交通大学宋利老师的团队来做的。也算其中的一个模型之一,上图的公式中显示,在给出一定预期的视频质量的条件下,跟TI,SI,之间的找到一个关系。那幺就可以采用模型的方法预测出预期使用的码流大小。接下来介绍一下实践,因为我们最大的服务是百度的短视频和小视频,所以我首先对线上视频的特性进行分析。

 

3.7 CAE 1.0百家号线上视频特性分析

 

 

这里简单介绍一下短视频和小视频的特性,短视频是横屏的视频,它可以在PC上观看也可以在手机上观看,并且它的长度不等。小视频是一个竖型视频,同样视频长度不等。我们对线上的视频复杂度进行了一个统计,大约40%的视频是中等复杂度的。短视频作为内容运营来讲,它有些自己的特点,就比如有可能看上去很简单的一个场景,用一些语言描述就会导致它的点击率很高,所以这里还是有非常大的带宽节省空间的。从内容分析,我们也有多种类型的视频,下面举一些例子。

 

 

上图中显示的几种场景是复杂度逐渐上升的场景,最后一个场景比较复杂,其复杂度为1.3,这种在视频编码中是非常难的,因为它的细节非常丰富。下面是小视频的场景。

 

 

我们针对于小视频也进行了复杂度的分类,第一幅图是小百科的这种场景,还有一些监控的场景,接着复杂度为1.0的是一个表演场景,最后一个复杂度为1.2的是一个户外的场景。在短视频里,包括快手,有很多是户外的这种场景,它的复杂度相对来说是比较高的。

 

3.8 CAE1.0技术方案

 

 

在智能编码技术方案1.0版本的实现过程中,我们选择了基于场景的分割。我认为基于场景的分割与云转码配合起来是比较好的一个方案。进行场景分割之后也会出现一个问题,比如分割后的场景有的在15秒以内,有的只有一两秒,这也会导致在转码的时候出现问题。我们会有一个从Short到Chunk的转换或者合并。我们能保证的是Chunk的边界肯定也是在之前检测的场景的边界上。视频复杂度的计算使用的是CRF ,我认为用CRF 23编码评估它的复杂度是比较合理的。为了归一化,我们还计算了BPP,把视频编出来的码率再规划到每个像素上去。然后我们为了计算方便,为了后面的策略,还会使用一个函数对BPP进行压扩到一个区间上,这样就方便我们产生一些策略。我们最终的策略是在视频码率上进行一次Scale,当然这里有两种方法,一种是可变的CRF,另一种是可变的视频码率。

 

1)线上带宽节省情况

 

我们上线了1.0版本后,根据不同的复杂度,再结合云转码计算线上收益。在一般场景的例子中,码率节省21%的情况下,PSNR有略微降低,对人眼是没有任何损失的,这是很重要的一点。在线上我们会做一个对比测试,分为实验组和对照组。依据用户的点击量,最后折算出带宽的情况。CAE1.0相对CRF节省了11%的带宽。但是这个带宽的节省不一定有太多的参考价值,因为每家公司不一样。不过我们在视频的码率上平均节省了20%到30%。

 

2)效果对比CAE1.0 VS VBR

 

 

接下来举一个在效果上对比CAE和VBR的例子。我们预期是要实现在整个视频上进行比较理想的恒定质量的码率的分配。在局部细节上,比如草的这种细节,可以看到CAE的效果上明显保留了更多的细节,当然这是在相同的码率的条件下对比的。

 

3)CAE1.0的缺点

 

 

接下来介绍一下CAE的缺点。我们确实实现了CAE,但是却需要消耗计算资源两到三倍,时效性得不到满足。第二个是用3 pass 编码解决一些码率控制不准确问题,比如有些场景非常小,可能一两秒,或者两三秒,但是如果直接用VBR分配码率就可能导致码率不准确,所以我们就必须再用一个2 pass的方式实现理想的码率分配。后面我们会有一些探索,利用机器学习的方法,或者深度学习的方法替代CRF编码的复杂度评估。

 

4. 下一步技术探索

 

4.1基于ML的复杂度评估

 

 

首先我们可以采用机器学习的方法,即依据TI,SI进行复杂度分级。我们在做评估的时候,已经采用了五类分级,从非常简单,简单,一般,复杂,到非常复杂。分级之后,我们可以用一些参数的方法,参考一下国内老师的工作或者国外的那些质量模型的工作在一定质量的要求上进行一些预测,给出部分最优的编码参数,然后还可以提取其它更多的特征。

 

4.2基于深度学习的最优编码参数预测

 

 

虽然基于传统的机器学习方法可以实现编码的复杂度评估,但是目前深度学习非常火热。而每天的视频内容量非常大,那幺我们可以用深度学习的方法来进行最优编码参数的预测。此时就会涉及到视频特征数据库的建立,这里需要提取TI,SI相关特征信息,利用 CRF进行编码,得到质量,码率,内容复杂度指标。但是仅仅这些指标可能是不够的,因为AI的能力目前并没有那幺强大,所以还需要借助于视频本身的一些东西,比如提取一些语法信息。由于没有数据,因此我们目前还没有具体实现的过程,但是目前已经进行了一些工作,比如利用一些现有的模型,CNN模型,它本身有提取特征的一种能力,然后可以用一些其他TI,SI的特征,加上语法里的特征,能够预测出码率,这是目前正在探索的部分工作。

 

4.3AI智能编码框架

 

 

那幺将所有的工作集成起来,在整体调度中进行的改造是什幺呢?我们会对视频内容进行分析,首先进行场景分割,接着视频分片,然后是基于深度学习的编码参数的生成器,有了生成器之后,就可以对每个场景进行最优的编码分片。同时我们还会进行VMAF质量监测,视频合并,到最后的分发,这也我们正在探索的方案。

 

Be First to Comment

发表评论

电子邮件地址不会被公开。 必填项已用*标注