视频编辑分为两部分:Camrea Engine(视频资源采集)Video Edit Engine(后期视频编辑)。在Camrea Engine采集的时候我们也可以做一些编辑操作,这叫预处理,比如说加滤镜。等到把采集到的资源交给Video Edit Engine时就是后处理。

Camera Engine是通过把被摄对象的光信号转变成相应的电信号,这时候还是模拟信号,经过采样、量化、编码,形成数字信号,计算机就可以用0和1来记录它,最终保存到磁盘上。

这里先阐述一下基本知识:
滤镜是怎么加上去的呢?这要从图片说起。其实视频就是很多张图片连续播放形成的。人眼为什么可以看到东西,物体通过漫反射把光子打到视网膜上,而这个影像在视网膜上消失需要一段时间,这就是残影。经过试验只要两张图片的切换在1/24秒人眼是分辨不出来的,那么对人来说它就是连续的。

在胶卷时代是每秒要求24张,数字时期是达到了每秒30张,就算中间丢了6张图片我们也是不知道的,增加了视频处理的容错率,下面我们专业一点,用帧来代表一张图。那么一帧是怎么构成的呢,每帧上的色彩都是通过RGB三原色各种不同的组合呈现给我们的。在我们的日常生活中经常会听分辨率1080920类似的词,它说的就是在这个屏幕上有横向有920个像素,纵向有1080个像素,每个像素就是一个色点。把图片放大,你就可以清晰的看到图片是由一个个小方块构成的,每个方块都有自己的颜色。这里的颜色就是通过RGB三原色叠加而成的,而RGB每个都有256种亮度,从0到255。那么总共就能组合出256256*256=16777216种颜色,很多吧。

到这里基本知识我们铺垫的差不多了
再回到加滤镜的话题,在业务层开发中我们加滤镜其实是加入了一种可以让Camera Engine识别的描述,它描述了每一帧上的每一个像素如何被“修改”,这里的“修改”可以是直接修改像点的RBG值,也可以是在这一帧上叠加一层(当然也可以叠加多层)。肉眼就会看到和原来视频不同的滤镜效果。有的滤镜亮,有的滤镜暗等等,其实最终就是通过调整GRB的亮度来实现的。到这里就是是视频的预处理。

Video Edit Engine设计到一下几个部分:storyboard、clip、stream、producer、effect和player。

storyboard相当于一个画布,这是一个抽象的概念,便于我们理解视频编辑,所有的编辑操作我们都在这上面进行。上面放的就是视频、图片,这里并不是指视频、图片的原文件,而是对原文件的描述。比如视频的起始时间和终止时间、视频的路径,方向等等。这种描述是通过一种面向对象的类clip体现的。一个storyboard上可以有很多段描述文件clip,它们是有序的,可修改的。这时候我们也可以为clip添加effect。effect可以理解为修改视频的描述文件的抽象类(我们使用的素材template就是effect更上层的抽象)。在storyboard导出成视频或图片的时候,它告诉Engine怎么修改视频的,最终也是通过修改每一帧上的像素点来实现的。

在导出的时候需要经过进一步封装,把storyboard封装成stream,它会将文件进行解码,根据effect对clip的描述,通过producer生成一个用户想要的视频。只有通过stream才能压缩编码成本地的文件或者解码成比特流让播放器player来使用。所以stream起到了一个对VF(视频)和AF(音频)编解码的作用。这里就是视频的后处理。

到这里就是一些视频相关的厂视频图片编辑的大概思路。