蓝松短视频SDK开发手册
合成容器:ConcatComposition
字面意思是:拼接合成. 是以图片和视频的拼接的总时长作为最终导出视频的时长, 容器有3大层, 分别是:背景图层 , 拼接类图层 , 叠加类图层. ˙
背景层: 给容器整体增加一个背景图层, 支持:颜色背景, 图片背景, 如果你要给不同的图层设置不同的背景,则可以用图层的画布/背景功能来分别设置;
拼接层: 把用户选中的图片和视频前后拼接在一起,是前后叠加. 可以在开始前增加, 也可以做预览过程中插入, 可以指定时间点插入, 可复制, 可删除, 可调节每个图层的前后位置, 支持手势调节, 支持图层的各种方法.
叠加类图层: 在拼接层上面,叠加多个其他图层, 是上下叠加. 比如叠加水印, 叠加文字, 叠加动画等等这些称之为叠加类型的图层, 图层可调节上下位置, 可设置显示开始时间点, 可设置显示时长;可叠加, 可删除, 支持手势,旋转移动缩放滤镜马赛克等等, 可执行父类图层的所有方法.
这些API 的关键词是: 在LSOConcatCompositionView中;, 拼接:(concat), 叠加:(overLay), 背景(backGround);
视频和图片的混合编辑
当前大部分视频编辑是拼接编辑, 比如您选中了几个视频和几个图片, 则是视频和图片混合的前后拼接合成的编辑.
可以是单个视频, 也可以是多个视频, 也可以是一张图片或多种图片, 或者图片和视频混合编辑.
视频增加后,当前默认是整个视频时长增加进去, 增加后, 你可以设置视频时长, 容器的总时长会改变, 得到图层对象,可执行图层的各种方法.
图片增加后, 默认每张图片显示3秒, 可调节显示时长, 可复制,删除,插入图片, 拼接图片不可以循环, 得到图层对象,可执行图层的各种方法.
如果设置了转场,则前一个层和后一层有部分画面是重叠, 重叠时间可设置. 设置转场后,
最终容器的总长度是各个图片和视频的长度之和 ,如果有转场或视频变速,则对应的时长会改变;
图层之--时间调节
素材本身的的时长. 比如视频时长,声音时长, 图片在放入后, 默认是显示3秒; 图片序列和gif等是其本身的时长; 这个时长是素材本身的, 我们称之为AssetDuration 是资源时长, 只能读取,不能修改, 但你可以修改素材在容器中的显示时间和从什么时间点开始显示;
可以修改的有: 素材在容器中的显示时间点, 是否循环, 显示时长, 如果循环,则会从显示时间点开始, 一直循环到整个容器尾部, 时间可以实时设置, 实时调节, 实时获取,当显示时长改变后, 如果你要获取对应的缩略图,则缩略图中图片数组也会相应的改变;
如果是视频素材, 则支持裁剪视频长度, 两个方法是: setCutStartTime和 setCutEndTime,从视频的什么时间开始裁剪,和裁剪到什么地方; 视频裁剪当前没有约束, 但建议你最小裁剪值是1秒;
这些API的名字是:资源时长(assetDuration), 当前图层的显示时长( displayDuration), 从容器的什么时间点开始显示:(startTimeOfComp);
图层之--手势 + 移动/缩放/旋转
容器在创建时设置了宽度和高度, 素材增加进去后, 会默认放到容器的中间, 即容器的宽度/2和高度/2;
每增加一个素材, 会得到一个图层对象, 图层都支持用手指直接操作屏幕 来完成 移动缩放旋转的touch事件,, 你可以单指移动, 双指缩放和旋转; 当选中一个图层时, 它的周边会出现一个红色的方框, 表示选中当前图层, 为了避免在操作时误触别的图层, 你可以把别的图层锁定, 我们提供丰富的API让你设置或获取相关的坐标, 我们甚至定义了一个类LSORect来让你获取相对应当前预览窗的相对坐标 和 相对于容器中的绝对坐标;
我们另外定义了各种常见的枚举类型, 比如4种缩放类型, 和上/下/左/右/中/左上/左下/右上/右下这9个位置点供您选择; 提供缩放系数, 缩放到实际大小,设置具体位置, 相对屏幕位置等
如果你要用代码的形式设置, 则设置的位置是当前图层中心点的位置. 可以缩放到指定大小, 旋转则0度则是正上方为0点, 角度是0--360度;
这些API的关键词是: 缩放大小(scaleSize), 缩放类型(scaleType) , 缩放系数(scaleFactor), 位置类型( positionType) , 位置中心点(centerPoint), 位置相对预览窗口坐标(positionInView), 旋转 (rotation)
图层之--贴纸/水印/文字
贴纸, 水印, 文字, 在我们图层处理架构里, 是以图像的形式呈现的, 因为手机GPU处理的是图像, 贴纸, 水印, 文字在底层是一个意思, 认为是一个图像或一组连续的图像做处理.
文字在SDK内部会各种转换方法, 让你方便的以文字图层操作, 操作完毕后底层会转换为图像来处理,如果我们提供的绘制文字不够详细, 你也可以自己绘制,然后转换为图片或图片数组,设置到容器中.
贴纸和水印是一个意思,我们提供了单个图片的图层,多张联系图片组成的图层, Gif图层等, 这些你可以方便的设置, 可以设置一个,也可以设置多个.
图层的增加是通过容器Composition的方法实现的, 增加后, 得到对应的图层对象;
这些API 的关键词是: android的图片图层(BitmapLayer) , android的图片序列图层(BitmapListLayer), ios的图片图层(ImageLayer), ios的图片序列图层(ImageListLayer), Gif图层.
图层之--颜色调节/滤镜/美颜
滤镜是对图层的画面做调节, 和图层的缩放移动一样是图层的一个属性, 颜色调节和滤镜和美颜, 都是滤镜的不同效果. 当前我们的美颜是仅对整体画面做磨皮和美白处理,没有做脸识别后的各种功能.
当前支持的颜色调节包括: 亮度/ 对比度/ 饱和度/ 锐化/色温/白平衡/色调/曝光度
当前支持80种滤镜, 包括常见的17种滤镜,当前建议你使用这17种滤镜, 这些滤镜在我们demo里可以看到.
这些API 的关键词是: 设置滤镜(setFilter,设置会把上一个替换掉),增加滤镜(addFilter), 移出滤镜(removeFilter),删除所有滤镜(removeAllFilter);
图层之--转场设置
转场是两个素材前后拼接时播放时的一种过渡效果, 比如上一段淡淡的消失, 下一段逐渐出现等.
当前的转场是AE设计师在PC端用after Effect 设置好的, 然后按照我们的格式,导出为json文档,SDK还原出来在PC端设计的效果. 这样的好处是: 开发人员不用自己用代码实现各种效果,只需要根据不同的效果,把对应的json送到SDK中, SDK就实现了这样的效果, 简单高效, 并可以做到Android和ios的统一.
PC端用Ae软件制作规范: 用一张小于等于544x960的图片创建一个合成, 然后对其做旋转缩放透明处理, 形成动画; 或对其做mask遮罩处理,形成动画; 当前不支持同时做旋转缩放透明+ mask的效果; 合成的分辨率应小于等于544x960, 时长建议不大于3秒, 以实际效果为准;
当前支持各种遮罩转场和基础的移动旋转缩放转场; 转场设置是通过每个具体的图层设置的, 比如有图层ABC3个, 要在AB之前增加转场,则设置A的transition; 要给BC之间加转场,则设置B的transition;
转场的时间可以设置,默认在是设置路径后, 会默认是1秒钟, 最大可设置为5秒钟; 当前仅支持遮罩转场, 即各种形式的透明.
这些API 的关键词是:转场(transition); 设置转场时间:(transitionDuration) , 播放转场(playTransition), 取消(cancelTransition);
执行步骤是: 你需要先设置转场路径, 设置后,默认转场时间是1秒钟, 如需预览,则playtransition; 调用cancelTransition取消转场; 在设置路径后, 你可以设置转场时间; 设置后, 如需要播放则playTransition; 如果你要应用到全局,则需要把一个json文件循环设置到每个图层对象; 我们内部会共用同一个json内容;
图层之--入场动画/出场动画/指定时间点动画
入场动画, 出场动画, 和转场一样, 也是Ae设计师在PC端设计好后, 导出为json,送入到SDK中. SDK解析还原出对应的效果.
PC端用Ae软件制作动画规范: 用一张小于等于544x960的图片创建一个合成, 然后对其做旋转缩放透明处理, 形成动画; 或对其做mask遮罩处理,形成动画; 当前不支持同时做旋转缩放透明+ mask的效果; 合成的分辨率应小于等于544x960, 时长建议不大于3秒, 以实际效果为准;
因入场动画和出场动画从技术上讲,仅仅是插入到图层的时间点不同,SDK可以设置开始从图层的哪个时间点开始, 当前入场动画默认是0, 出场动画默认最后json的时间时长; 你可以调节这个出入场的持续时间, 持续时间调节后, 会把调节后的时长作为整个动画走完的时间, 如果你设置的短,则动画走的快; 如果设置的长,则动画走的慢; 入场动画和出场动画是setXXX的方式, 每次设置后, 会把之前的动画移出;同一时刻只能有一个入场或出场动画;
指定时间点动画, 是你可以指定一个时间点增加动画, 可以实时设置开始时间点,也可以设置动画时长, 可以增加多个, 每个素材最大支持20个动画。在每次设置后, 可预览或移除;
这些API的关键词是: 动画:(Animation) ; 入场动画/出场动画:(setAnimationAtLayerHead/End),指定时间点动画:(addAnimationAtCompTimeUs)预览动画 playAnimation; 移除removeAnimation;
执行步骤是: 增加json文件, 会得到LSOAnimation对象,用这个对象可以playAnimation来预览; removeAnimation删除; 对象里有设置开始时间点和播放时长的方法;. 等要删除时,用removeAnimation; 当一个图层从容器中释放后, 我们会销毁里面的所有的对象;
图层之--特效
和动画一样的制作步骤, 唯一不同的是: 动画是从开始播放到结束, 如果设置的时长不等于json中的默认时长,动画平均分配不同的动画快慢来达到设置的长度; 而特效的效果时间是固定的, 如果设置的时长json中的默认时长,则会循环播放特效;
特效可设置当前图层的任意时刻点开始,我们举例了从头(head) 和尾(end)的两种方式;
这些API的关键词是: 特效:(Effect), 指定时间点增加特效:(addEffectAtCompTimeUs); 预览特效(playEffect), 移除特效:(removeEffect),
执行步骤, 和动画步骤一致;
图层之--画布(背景)/去水印/透明/镜像
画布是对当前每个图层做的操作, 是无论图层缩放多少, 画布都会铺满整个容器, 画布可以是颜色, 图片, 或画面的虚化做背景;
去水印当前支持马赛克去水印, 我们在图层类中举例了最大4个去水印的API, 可以设置位置,设置大小,设置马赛克像素的大小; 如果你有更多个马赛克的需求,还是用LanSongMosaicRectFilter自行增加;
透明我们描述为:不透明度, 这样更好理解一些, 和调节RGB一样,可以直接设置; 参数1.0是完全不透明, 0.0是完全透明;
镜像:是把整个画面的左边镜像到右边, 把右边镜像到左边; 如果你打算把左边的一半镜像到右边,则用我们的LanSongMirrorFilter滤镜;
这些API的关键词是: 背景(backGround), 去水印(mosaicRect),不透明度(opacityPercent) , 镜像(mirror).
图层之--获取缩略图
缩略图是每秒钟一帧, 大小是等比例缩放到192x192附近, 比如视频是1080x1920,则会返回的每张缩略图片大小是199x355;
可以多次获取, 每次获取时, displayThumbnail得到的是当前画面可以显示的缩略图, 如果可显示的范围是2.5秒到--4.5秒; 则 显示时长是 显示第三秒, 第四秒, 第5秒的缩略图传递过来.
图片图层的缩略图, 返回是同一张图片对象组成的数组;
声音图层
外界输入的各种音效, 无论是wav格式的音效, 还是mp3,m4a, 或者录音 或者带有声音的视频, 我们统称为声音. 这些声音是同一个API输入到SDK中, 然后得到对应的声音图层.
声音图层, 可以指定时间点增加, 可以设置循环, 设置把声音的那一段裁剪后增加, 设置音量大小, 设置淡入淡出效果
声音音量范围是0---5.0 , 1.0是默认声音. 0.0是关闭声音; 5.0是放大5倍; 声音裁剪最小是300毫秒, 最大是声音的原始长度;
这些API的关键词是: 音频图层:(LSOAudioLayer); 裁剪时长(setCutStartTime/setCutEndTime) 音量:(volume)
联系我们
网站:http://www.lansongtech.com/
email:support@lansongtech.com
网友评论