VideoAnimationWhileMerging-watermark

补一下上一篇文章中的视频动画。
上文:http://www.jianshu.com/p/fe3caca8a220

  1. AVMutableComposition会在最终合成的时候需要制定目标视频文件的宽高,那么hack思路就来了,如果我的AVasset的源视频大小和目标文件的大小不一样,我是不是可以只截取/显示源视频的一部分。
  2. 当前IOS版本不能直接访问AVasset所指向的源视频的宽高,不过可以变通:
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #00b1ff}span.s1 {font-variant-ligatures: no-common-ligatures}span.s2 {font-variant-ligatures: no-common-ligatures; color: #ffffff}span.s3 {font-variant-ligatures: no-common-ligatures; color: #8b87ff}

AVAssetTrack * curTrack = [[curAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0];

由curTrack.naturalSize来获取到视频的真实宽高。
  1. 假设我创建了track1,track2来合成视频,对应于layer1,layer2,并且track1和2从开始到结束都是有画面的。那么所谓的videoAnimation其实就是layer的动画。
    layer的可变属性有opacity,CGAffineTransform,CropRectangle
    opacity,对用的方法
69071607-B2A5-40A2-AB41-46E1A4829151.png

transform则对应一下方法

Paste_Image.png

而所谓的CropRectangle指的是源视频的可见区域

Paste_Image.png

仔细体味下上述三个可变属性,那么简单的视频动画也就出来了:
比如在特定的时间点将track1的透明度设置为0,而将track2的透明度设置为1,同时赋值一个小的时间段,也就有了淡入淡出的效果;
再比如适当的设置transform,可以使得两个不同的track并列显示或者重叠显示;
视窗那个属性比较有趣,大家有兴趣可以用我在上一篇文章中提到的代码试一试。

总结下关于直接使用AVMutableVideoCompositionLayerInstruction来构建视频动画的缺点:

  1. 在最初的时候我犯过的错误,如果我是简单补个水印(动态),而给目标视频加一个track-layer,还需要按照时间去计算变换的时间点,其实非常不值得。
  2. 上述的layer很多属性都无法修改,也就导致了可见区域始终是边角分明的,无法出现圆角之类的。
  3. 视频的最底层背景色为黑色,如果最底下的那个源视频没有覆盖整个屏幕,那么变换的过程会很丑。
  4. 所以上述的一些方法其实最适合的场景就是加一个静态的水印或者补一行文字什么的。

明天继续写,关于如何比较有效率的在视频中加入图片,并且动态的显示图片的思路。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,223评论 4 61
  • 转载:http://www.jianshu.com/p/32fcadd12108 每个UIView有一个伙伴称为l...
    F麦子阅读 11,501评论 0 13
  • Core Animation Core Animation,中文翻译为核心动画,它是一组非常强大的动画处理API,...
    45b645c5912e阅读 8,176评论 0 21
  • 每个UIView有一个伙伴称为layer,一个CALayer。UIView实际上并没有把自己画到屏幕上;它绘制本身...
    shenzhenboy阅读 8,316评论 0 17
  • 人家女厨子也叫厨娘,我也自称厨娘,因为我是一个下厨房的娘。 在我从小到大的成长经历中,我一直坚信君子远庖厨,也没把...
    苗苗的插秧大棚阅读 3,214评论 6 4