短视频处理LanSoEditor-SDK之抠图和动画设计
(此介绍,是在和我们客户长期广泛交流的基础上,总结出大部分的客户使用的方法。如果您有新的思路,也可采用,毕竟我们主要是设计架构。
注释:我们的SDK每3周更新一次,以下功能是在2.8.2版本上列出的,可能不是最新的功能,请知悉;)
1,抠图类:
抠图就是把当前画面中的某一部分轮廓提取出来,比如把画面中的人物提取出来,然后放到特定的环境中。LanSoEditor-SDK当前抠图和其他滤镜一样,是基于整个单一帧画面进行的处理,暂时没有做人脸识别,人脸检测,背景分离等人工智能类的处理。
抠图类的滤镜有:
l 1.1,LanSongAlphaPixelFilter滤镜:
去除画面中绿色背景,从而把绿幕前的各种画面抠出来,常用的场景是:录制电影电视剧时, 演员在绿幕前表演,后期把绿幕扣除,把演员放到一个特定的环境中,
比如云彩上, 舞台上, 沙滩上, 高楼上等等
比如把一个表演者放到外太空的环境中。
支持实时抠图, 支持把抠图的画面叠加在其他图层中间,从而实时显示抠图后的场景;
(此滤镜需要用到绿幕, 网上有卖便宜的绿幕,但大部分用在特定的场合,比如特定的电子娱乐设备, 唱吧体验馆等场合)。
l 1.2,LanSongAlphaWhiteFilter滤镜:
把白色透明化, 比如人站在白墙边做各种舞蹈,把白墙透明,只保留人物,起到抠图的效果。相对扣绿色背景, 此滤镜使用场合更广泛, 毕竟白墙普遍存在,
l 1.3,LanSongMaskBlendFilter滤镜:
把当前的画面和一张白色图片向参考, 图片的白色部分显示正常的画面,图片的透明部分, 正常的画面也透明, 从而根据图片的透明区域,来确定当前画面的区域。 从而实现扣去画面的某一部分。后期我们会增加Canvas的输入, 从而您手指滑动哪里,把哪部分透明; 图片支持图片序列, 支持动态透明。
l 1.4, 父类Layer中的二种画面裁剪:
一种是基于XY轴的裁剪的矩形,
另一种是:基于某个中心为原点,设置半径的裁剪; 此方法也是扣去画面的某一部分,但实现较为简单。
l 1.5,采用第三方抠图SDK:
我们的DrawPadCameraView把数据拉出来, 输入到第三方SDK中, 识别后,得到特征关键点, 根据关键点来计算出当前坐标,从而提取出特定画面。 (在合作后,由我们收取少许费用帮您集成; 也可我们提供技术支持,你们自行集成)
l 1.6,我们计划中, 有直接抠图的技术,敬请期待,或联系我们。
2.叠加动画:
解释:是在一个视频的上面增加美工做的动画效果,类似直播中的刷火箭,类似舞蹈画面叠加一个桃花飘落的动画,类似增加一个闪电动画等等。
2.1,由于我们的SDK是基于容器和图层的架构, 类似一层一层的画面显示, 故所有的画面都可作为动画,叠加在另一个的上面。
2.2,比较常见的动画叠加有:
l 2.2.1 MV图层叠加,
让两个视频的组合成透明视频,作为一个图层,叠加到原视频图层上,好处是:制作简单,不受限制,任何效果都可实现,调用方便。
l 2.2.2 双视频图层
让一个黑底的效果视频,融合到另一个视频中,好处是只需要一个视频, 但有些效果在融合后颜色不对。
l 2.2.3 图片图层
采用多张PNG带透明的图片,在不同的时间来切换,形成动画。好处是方便控制,清晰易懂。
l 2.2.4 Gif图层
把Gif动画直接叠加在视频上。 建议小的动画可直接叠加,大的动画会造成Gif文件过大,浪费流量。
l 2.2.5 UI图层。
如果视频实时录制,可以把各种开源炫酷的UI动画叠加到视频中, 也可以采用Lottie(一个强大的开源库)直接把AE绘制好的动画叠加到视频中。
l 2.2.6 Canvas图层。
android的强大的绘制类Canvas,可以直接移植各种开源的canvas类过来,也可自行绘制。 Canvas图层在我们架构中是通过容器传递过来的时间戳主动绘制动画。
l 2.2.7 AE图层
我们后面计划是 优化Lottie库,让Lottie也能工作在后台, 以更方便一些动画的绘制。 采用Lottie+json的形式, 原来需要1M的效果资源,现在只需要50k甚至更少即可完成,让AE美工做好的文件, 直接导入到我们图层, 省去了工程师的移植开发过程。
3,画面本身动画:
解释:画面本身动画,是对当前图层的画面做一些动画效果,比如灵魂出窍,从四周到中间对齐,颜色渐变,飞入,淡出,抖动,展开,滤镜渐变等;这些动画,本质是对画面的每一帧做相关的操作;每一帧都操作了,随着时间戳连贯起来,就形成了动画。
3.1我们的父类Layer提供了10种的画面操作方法,这些方法可单独使用,也可多个一起使用,比如旋转着进入到容器中,是设置旋转+移动的两个方法;
3.2比如灵魂出窍, 是把当前画面克隆出一个子画面,对子画面做淡出+缩放的操作形成的效果。
3.3比如展开/闭合,是对画面逐渐做区域显示,然后显示到最大/最小。
3.4比如抖动, 是对每帧画面做左右的位置移动,间隔很小的移动, 就形成了抖动。
3.5有些滤镜,不断调节他们的参数值,也可以实现动画效果。比如GPUImageSwirlFilter,调节setRadius半径,可以实现把画面卷起来的效果(有举例)。
3.6另外,视频图层和音频容器,支持时间静止,时间拉伸,时间重复,调用这些也可以实现效果。 视频画面的倒序是另外一个单独类实现。