随着短视频成为人们竞相追逐的新风口,移动端音视频处理需求与日俱增。如何低成本、高效率地处理音视频,并且最大程度的适应移动互联网的不同应用需求成为至关重要的问题。本次分享以美摄SDK的音视频处理框架为依据,介绍在移动端高效处理音视频的解决方案,以及人工智能在音视频处理方面的应用。
文 / 刘路伟
整理 / LiveVideoStack
大家好,我是来自美摄科技公司的刘路伟,这次与大家分享的主题是美摄SDK如何帮助客户打造完善的音视频解决方案。我会分为两个部分来讲解,一个就是美摄能够做到什么事情;二是从技术层面如何实现这些事情。
首先来介绍一下我们公司,美摄原先是新奥特集团的一个子公司,是从新奥特集团中分划出来的,核心团队来自新奥特集团的一个项目的技术团队,拥有比较先进的广电研发经验,也取得过一些成就。美摄SDK成立的时间不长,从2016年到现在三年多的时间,但是服务了很多头部的客户,并且为客户进行定制化的解决方案。
1. 美摄SDK产品及服务方案
1.1 产品介绍
美摄SDK主要功能有图中所列的这些,但也不仅限于这几点。美摄SDK最基础的功能就是视频的拍摄&编辑,在拍摄时从采集端加入滤镜、特效、贴纸等效果。粒子特效能在直播的时候模仿下雪、火山喷发等效果。AI智能视频处理模块是今年重点研发的一个功能,它根据用户提供的一些视频素材,识别视频素材中比较有意义的视频片段,然后通过模仿剪辑师的手法生成一个视频,比如抖音、火山等。除此之外,在用户的vlog中可能有旅行中比较精彩的片段,它可以自己去识别出来这些片段,并且组成一个成片。VR视频编辑模块是针对于某些有特定需求的客户,比如家居类、游戏类,他们可能需要一个360°的视频展示,VR视频编辑模块就可以支持他们进行这样的操作。特效的定制设计包括很多,比如字幕、贴纸,主题等特效,它允许用户自己去定制化设计,只要用户满足一定的规则,就能提供定制化的工具。
1.2 服务案例介绍
接下来简单分享两个我们今年服务的客户,每个客户都会有自己独特的要求。首先是小米手机,他们需要图片混编的视频,构成回忆相册。还有跟音乐节奏相关的一个卡点的主题,能够去识别音乐当中特殊的点,然后对视频进行处理。
还有一些客户像vivo他们可能会有一些推镜的特效,比如镜头的拉远、拉近。Boomerang特效也是一个比较新潮的玩法,还有漫画特效可以把视频中的每一帧变成漫画的形式。
1.3 方案应用领域
美摄SDK虽然推出不到三年时间,但服务了较多的头部客户,并得到了一些好评。由于AI和5G是今年比较热门的话题,所以各家都在想如何把产品与AI和5G的相关技术去做一个融合。今年我们就尝试了在完全脱离人工操作下,通过一定的算法,把用户的素材导入进来,对视频进行剪辑。对于普通用户来说,将所拍摄的部分旅游视频或者家居的视频达到跟剪辑师制作出来的视频效果相同,这会是一个比较新颖的玩法。
2. 技术介绍
2.1.1 流媒体SDK的基本结构
下面从宏观架构的层面,来给大家分享一下美摄SDK的一些技术。美摄SDK技术分为两种,一种是流媒体SDK,它支持用户对音视频的所有操作的一个包装化处理,用户无论是从采集、编辑到视频输出、音频输出,都可以用美摄流处理SDK来处理。流处理SDK的架构是先有一个单例的流媒体的上下文,所有的函数的发起点都是由流媒体上下文发起的。
这里介绍一下时间线,首先时间线在整个视频的编辑、采集和生成阶段贯穿始终的,相当于整个媒体的生成跟时间线有一个关联性,在时间线上,可以添加想要的所有素材、基本的视频和音频。其次在一个时间线上,可以添加多个视频和音频,就有了视频轨道和音频轨道的概念,每一个视频资源和音频资源只是其中的一个的片段。在时间线上加多个的视频轨道和音频轨道以达到混音效果,还可以做到画中画等玩法。在每个视频轨道上可添加多段的视频和音频,每个视频片段中可以添加各种转场,以达到比较炫酷的效果。字幕、动画贴纸是一个资源包的概念,我们可以将其添加到我们想要添加的地方,以达到一个不错的效果。
2.1.2 流媒体SDK的基本结构
关于流媒体处理的基本结构,开始由数据源进来,数据源会是一个视频的片段或一个音频的片段,并且它们的格式会有很多种。接下来就从宏观的角度来讲,每一部分需要面临的问题。首先需要建立一个时间线,在其上面加视频轨道或音频轨道,调用对应的函数。在视频轨道上面,可以加转场、字幕、动画贴纸等。主题是整个资源包的组合,是一个集合的概念,主题中加片头、片尾能够达到较好的包装效果,其内部会有音乐、转场,主题内部包括字幕、动画、贴纸等滤镜的效果。建立好时间线和轨道,可以在其中添加所需要的视频资源和音频资源,并截取想要的部分,最终生成一个文件,这些都是SDK所支持的。
2.2 流媒体引擎的组件架构
关于流媒体引擎的组件架构这部分内容从视频源开始,会遇到解码、空间转换、加速等问题,如何够达到实时渲染,这也是要面临的问题。然后将处理的视频帧发送到视频输出端,音频帧发送到音频输出端,就可以实时地在界面上预览。预览的同时,可以把生成的文件写入到对应的视频文件中,最终获得一个包装过的视频文件。
2.2.1 视频源组件
这里涉及视频片段和视频轨,需要多线程的实时处理。在预览视频的过程中,会遇到卡顿的问题,解决这样的问题,就需要引入Video Reader的预加载,可以在当前seek的位置往前预加载几帧,就能实现实时流畅地观看视频。然后解码出来的视频帧反馈到下一个单元做处理。
2.2.2 音频源组件
同样的音频也是如此,相应的涉及音频轨和音频片段。除此之外,解码出来的每个音频文件,可能有多个音频流,要分别读出来每一个音频流并作一个混音,达到最终音频的输出。
2.2.3 视频处理组件
关于处理流媒体引擎组件的节点,它的内部有一个对应的拓扑结构,转场、主题等资源在拓扑结构中有对应的source node。在处理推进的过程中会遇到不同的资源节点,要进行相应的处理,一步一步完成后就会生成最终的结果,然后输出到最终渲染的单元,达到渲染的目的。
2.3 可配置的模块化结构
美摄SDK可以对于不同的客户进行不同的定制化的处理,是因为SDK的这些功能是松耦合的,可以对不同的客户的需求做定制化的包装,只保留需要的功能,达到满足不同用户需求的目的。这部分就涉及到了SDK的一些功能,比如最基本的图片编辑、视频编辑等。这里说一下人脸检测,它通过人脸检测去适配不同的人脸贴纸,这在直播中运用较多。
2.4 特效的可扩展性
特效的可扩展性体现在以下几点:首先,特效包括字幕、贴纸等,美摄SDK可以支持客户定制化开发。其次,LUT滤镜是一种设计上色彩映射的一种滤镜,比如可以把一个人暗淡的皮肤通过滤镜变成比较饱和的效果。然后,customVideoFX是我们引入的一个概念,它可以支持用户自己包装滤镜,不仅限于用户自己制作资源包,用户可以通过代码的形式把所制作的资源加载进来。最后,storyboard特技是一种复合型特技,比如它可以将分割效果、扭曲效果、调色效果等制作到一个storyboard特效当中,安装并应用这个特技就能得到多个效果组合的效果。
2.5 资源包的可创作性
这里主要介绍资源包从完成到安装都经过了哪些步骤。我们所有的资源都是以包裹的形式存在的,它们会有不同的后缀名,用户拿到资源后进行安装,然后就变成了ABK特定的素材。在加载的过程当中要校验素材是否满足SDK的功能,再解析这个资源,分析它的内部语义,这就建好了拓扑结构。按照拓扑结构,引擎内部就去渲染加载,最终就达到了一个不错的效果。
2.6 Effectsdk
前面介绍美摄SDK主要包括两个,一个是流媒体SDK,主要介绍它具体是怎么实现的以及它的架构。另一个是Effectsdk,它们的区别在于,Steamsdk是一站式处理,就是用户从采集或导入素材开始到资源的输出,完全都是由Steamsdk去处理的。Effectsdk用于客户需求只是在某些特定的帧或者特定片段上,才运用其内部的特技和特效。根据客户的需求,我们就研制出了Effectsdk,它实际上相当于渲染的一个中间介,支持纹理入纹理出的方式,用户采集或者通过解码得到的纹理输入到Effectsdk当中,然后就能套用刚刚提到所有的资源,生成一个比较好的效果,再以文立形式输出,最后用户就可以在任何场合去运用。同样的,Effectsdk的架构,也需要有Effectsdk单例的上下文,创建一个特辑,在内部按需加上刚才提到的特效,最终就会渲染出来对应的视频帧和视频纹理,让用户去做二次的开发。
3. 全新玩法
前面大概介绍一下美摄的整个SDK架构,接下来与大家分享我们最新研发出的一些新的玩法。
3.1 人脸贴纸
首先是人脸贴纸,我们今年推出的人脸贴纸与其他家的区别,也就是创新在于我们支持物理引擎的概念,就是用户在做一定的人物动作的过程中,人脸贴纸可以满足物理的规律,达到对应的效果,就如视频中所展示的一样。上述视频当中,我们的同事在做一些面部的晃动,视频中所呈现出的狐狸耳朵,实际上跟人物晃动的幅度而产生对应的摆动。这是我们最新研制的一个特效,还有可以根据人物眨眼、挑眉等动作进行对应变动,这在今年将会逐步完善起来。
3.2 Vlog复合字幕
Vlog复合字幕是我们今年新推出的,相比于传统的字幕中每一个字都是一致的,没有办法在字幕的每一个字当中去做一定的效果来说,vlog复合字幕就达到了这样的目的,就能得到电影级的包装的效果。
相对于传统的字幕,vlog复合字幕加入字幕的运动,以及字幕不同的渲染的效果。它多用于客户在这种旅行中的使用,或者电影中的应用,这四张图就是美摄科技复合字幕可以达到不同的字幕效果。
3.3 AI智能剪辑
最后为大家介绍AI智能剪辑,首先筛选用户的素材,删除质量不达标的视频素材,经过初筛之后,将已经选好的视频进行识别,识别出想要的视频素材对应的片段,然后根据不同剪辑师的手法对这些视频进行不同的拆分、组合、调换位置等,这个过程中就会运用到流媒体SDK中一些基础的编辑功能最终得到一个整合的片子。