心随手动,驱动短视频热潮的引擎

欢迎你们前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~性能优化

做者:常青, 2008 年毕业加入腾讯,一直从事客户端研发相关工做,前后参与过 PC QQ、手机QQ、QQ物联 等产品项目,目前在腾讯视频云团队负责音视频终端解决方案的优化和落地工做,帮助客户在可控的研发成本投入之下,得到业内一流的音视频解决方案,目前咱们的产品线包括:互动直播、点播、短视频、实时视频通话,图像处理,AI 等等。微信

前言

在 AlphaGo 名声大噪以前,围棋是一项少有人问津的娱乐项目,不信你能够在记忆里细数一下,当时身边有多少个朋友会下围棋(AlphaGo 出名后一时兴起下两把的我们就不算数了)。相比之下,德州扑克的普及程度就要好的多,以致于咱们团队有一次年会就放弃传统抽奖方式,而是靠德州扑克决定奖品名单的。编辑器

为何高大上的围棋比不上德州扑克受欢迎呢?规则太复杂吗?工具

真正的缘由是围棋的门槛过高了。在围棋里,水平的高低说带来胜率差别是碾压式的。对于两个围棋选手而言,若是棋艺差一级,那么对弈时弱者几乎没有赢的可能。这就让围棋变成了一群高智商玩家的小圈子游戏,刚入门的进来感受就是找虐。而德州扑克则不是,无论你是否是行家,运气的成分总仍是起了很大的做用,这就让它自己适合成为一款全部人都容易接受的游戏。性能

视频编辑也是如此,在电脑可以处理多媒体工做以后不久,就出现了不少的视频编辑软件。好比我过年回家,就能在长辈的书架上看到一本《会声会影 从入门到精通》。长辈退休了在家搞搞摄影,想要给本身拍的照片和视频加点特效或者作个剪辑,就会用到这类专业软件。我随手翻了几页,很快就没兴趣了,里面太多流程化的操做,须要我花很多的时间去研究和练习,而我缺少学习这款软件的动力。学习

因而可知,入门门槛的高低,决定了一项活动或是一款产品,是被大众所广泛接受,仍是停留在一个很小的专业圈子里。优化

就在不久以前,视频编辑仍是一个小圈子的活动,纵使不少人有兴趣创做本身的小视频,在专业工具的入门门槛面前,也就选择洗洗睡了。直到快手和抖音的出现,让你们的入门门槛一会儿变低了,你只要会用手机,就能快速的给本身拍的视频加一些特效,作一些个性化的编辑,进而引爆了“北快手,南抖音”这两款现象级的 APP。动画

但我想告诉您的是,从会声会影式的专业软件到普罗大众的快手抖音,毫不是交互层面的一个简单调整,而是一个复杂的故事。今天,我就带您一块儿来看一看,这背后的技术故事。ui

编辑的原理

下图简单的展现了视频编辑的一个大致流程,这在全部的视频编辑软件里都是相似的:编码

img

第一个须要了解的细节是,手机上的影片(好比 mp4 或者 mov) 都是不能直接拿来作特效编辑的,由于里面的数据都是通过压缩的。直接编辑这些编码后的影片是很困难的,咱们在不解码影片文件的状况下,最多也就是作一下简单的裁剪和拼接。

举个现实生活中的例子,好比说你刚搬了新家,带着你的爱人去宜家挑选家具,宜家的服务很人性化,他们会在你进门的时候会给你一张卡片和一支铅笔,这样你就能够把想买的家具或则配件的编号记录下来,以后你能够去仓库一件件的取货,或者去办理送货上门服务。这一切都很方便,直到买单时你发现预算超了,因而决定要把一些比较贵的型号换成比较便宜的型号。但这个时候困难也出现了,由于只有编号你是作不到的,你得回到展现区按商品编号对号入座,而后才能知道有没有心仪的便宜款商品可选。不然你能作的也就只有从商品列表里把一些型号划掉。

视频编辑也是同样,已经通过编码的影片,再不通过解码的状况下,即便计算机也没法解读文件里蕴含的画面和声音,咱们所能作得事情就颇有限。这也就解释了上图复杂性的由来:

要作音视频的特效编辑,原始的影片(好比 mp4 或者 mov)必须先被拆解成独立视频流和音频流。以视频流为例,咱们要先对视频流进行逐帧逐画面的视频解码,这样解码出来的内容才是一副计算机能够显示的画面。在这幅画面的基础上,计算机才能够理解每个像素点对应的色彩数值和亮度大小。进一步地,计算机才能够在画面上添加字幕,作动态特效,或者叠加挂件。声音也是同样,编码后的 AAC 文件只适合传输和存储,计算机也是须要先将其解码成 PCM 格式的波形文件,才能知道每个点的音调高低,进而可以编辑。

视频特效和声音特效都加完以后,还不算结束,由于用户真正想要的是编辑后的视频影片,而不是一幅幅的画面和一段段的声音,因此解码出的画面在通过特效叠加和处理以后,还要再一次地送给视频编码器进行编码,进而跟音频流一块儿,组合成新的视频影片。

预览功能

上述的流程看似复杂,但它只是视频编辑的最后一步,也就是编辑器的“最终生成”的这一步,在这一步以前,必需要有人经过编辑器决定在哪一段时间加什么类型的特效。

但没有人能够凭空知道在影片的第几秒把一个什么特效恰到好处的放置进去,用户须要根据影片的具体内容进行即兴的创做和发挥,因此,咱们须要把预览功能做为 P0 特性加入进去。

img

如上图所示,简单的预览在原理上是一个彻底没有技术难度的工做,咱们只须要将通过特效处理的画面和声音播放出来便可。这里真正的难点是要优化好画面特效的性能,同时作好音画同步的校对。

由于影片的预览跟单张图片的预览不一样,预览过程必须是一个很流畅的体验,不然用户在编辑影片时就会有很明显的卡顿感,致使用户在使用时如骨鲠在喉,难以有好的产品体验。

而性能优化和音画同步也都很好解决,真正困难的是逐帧的画面预览,也就是用户想要看哪一帧的效果,就能马上如愿,也就是标题里所谓的“心随手动”。

这里,咱们将面对一个在技术原理上就很难逾越的困难:

逐帧预览

虽然手机芯片的进步这两年可谓神速,可是功耗的限制决定了 PC 机的性能依然能够碾压手机。但不知你有没有发现,即便在性能这么好的 PC 电脑上,看电影时也会遭遇“拖拽卡顿”现象,也就是当你用鼠标拖拽进度时,能明显感受卡顿感。

这是由于简单的视频卡顿背后,有一个巨大的性能陷阱,也便是解码器的解码规则,我经过下图来解释一下:

img

假设你将鼠标从第3幅画面拖拽到第13幅画面,按照表面上的理解,计算机只须要读取第13幅画面的内容,把画面显示出来就好了,这并无什么难度。

但实际上,编码器在处理第13幅画面的时候,为了减小这幅画面的存储空间,只会保留第13幅和第12幅画面的差别部分。这也就意味着,要想看到第13幅画面,计算机须要先把第12幅画面解码出来。照此类推,要想看到第12幅画面,计算机就须要先把第11幅画面解码出来...

最终,计算机须要解码出第7幅画面,才能将上述这个循环打破,由于第7幅画面比较特殊,编码器在处理这一副画面的时候,并无参考其它画面,因此这幅画面的内容在还原时,不须要依赖其它画面的内容(也正是由于如此,这幅画面在硬盘上的存储空间比其余画面都要大)。

固然,这里说的都是最简单的状况,因为技术的进步,如今广泛使用的编码器都已经在用 main profile 和 high profile 这种高级的编码模式,画面与画面之间的参考关系更加复杂,不只仅参考前面的画面,也会参考后续的画面,进一步提高了复杂度和计算量。

这就解释了为何拖拽自己的等待时间不肯定,有时候你可能运气好,正好拖到了上图中的第7幅画面,那么如你所愿,画面马上就切到第7幅;但也有可能,你拖拽到了第14幅画面,那么计算机只能认倒霉,它要把前面的7幅画面全都解码完成,才能切到你想要的那一幅画面上。

视频预处理

为了解决这个问题,咱们只有两条路能够走:

一条路是等待摩尔定律进步处处理十几幅画面也只需弹指一挥间的事情,但安迪比尔定理也告诉你,摩尔定律所带来的那点进步会瞬间被 4K、8K 给吃掉。

另外一条路就是工程思惟解决问题了,咱们的作法是:若是是编辑一个已经生成好的 MP4 或者 MOV 影片,咱们会先对影片进行一轮预处理,也就是影片在送给编辑器以前,先要通过一轮提早的加工处理,把视频处理的更加易于编辑。

img

固然,若是你认为仅仅是为了提高逐帧预览的性能就要耗费这么大的精力是不值得的,那实际上是多虑了。由于咱们的工程师团队会充分利用这段新引入的时间,把不少耗时但又必需要作的事情在这个阶段也完成了,好比,下面图中的预览工具条,就是在预处理过程当中每隔一段时间截图拼接实现的。

img

特效的制做

咱们都知道动画的原理自己就是一幅画面到另外一幅画面的快速变化,画面之间的微小差别通过累加,令人产生画面运动的错觉。画面变化的越快,人越不容易察觉,由于画面的流畅性也就越好。

咱们在短视频编辑器上说添加的各类特效也是遵循这两个原则:

  • 特效自己是逐帧变化的,每一幅特效跟上一幅特效均有细微的差异。
  • 特效的变化跟影片原来的画面变化进行叠加,这样可以确保特效的流畅性天然而不生硬。

以咱们在Demo中提供的第三个视频特效为例,它是这样实现的:

(1)取原始画面第一幅图像,对其作1.1倍的图像放大,以后截取中心的部分,而后去掉 50% 的透明度,这样就能获得一张新的半透明图片,这张新的半透明图片是用来造成虚影效果的。它会被叠加在原始图像上,这样一来,咱们就获得了处理后的第一幅图像(带虚影特效)。

(2)照此步骤,咱们对第二幅图像也作一样的处理,但此次稍有不一样的是,再也不作 1.1 倍放大,此次咱们把放大倍数改为1.2倍,这样叠加出来的图像,50%透明度所造成的虚化部分,就相比于上一幅就要扩大了一圈。这扩大出来的一圈若是叠加起来,就能够制造出一种画面向外放射的错觉。

(3)对第三幅画面也是相似的操做,此次咱们将放大倍数改成 1.3 倍,所以虚影部分又扩大了一圈...

(4)如此逐步作下去,处理后的图像就会造成一组新的连续动画,而这组新的动画已经包含了咱们所指望的视频特效。

img

相比于其余的部分,特效自己的技术难度是比较简单的,尤为是视频特效的实现。

真正的困难则是来自于定制上的灵活性,因为抽象能力比价若,咱们目前尚未把视频特效的制做能力开放出来供开发者自行设计,而是只能用更直接的办法,想到一个作一个。真正要作到客户随意定制,还须要一段时间的努力。

广告时间

好,说了这么多,都尚未给本身团队的产品打广告的,为了不引发各位看官的不是(^—^),这个部分留在最后了:

若是您想给本身的产品快速添加短视频功能,同时又不但愿重复造轮子,请访问 腾讯视频云-短视频官网,快速获取你想要的零部件。

此文已由做者受权腾讯云+社区发布,原文连接:https://cloud.tencent.com/developer/article/1148310?fromSource=waitui

欢迎你们前往腾讯云+社区或关注云加社区微信公众号(QcloudCommunity),第一时间获取更多海量技术实践干货哦~

相关文章
相关标签/搜索