iOS 视频剪切、旋转,视频添加音频、添加水印,视频导出

1241 查看

概述

视频处理主要是用到以下这几个类
AVMutableComposition、AVMutableVideoComposition、AVMutableAudioMix、AVMutableVideoCompositionInstruction、AVMutableVideoCompositionLayerInstruction、AVAssetExportSession 等。其中 AVMutableComposition 可以用来操作音频和视频的组合,AVMutableVideoComposition 可以用来对视频进行操作,AVMutableAudioMix 类是给视频添加音频的,AVMutableVideoCompositionInstruction和AVMutableVideoCompositionLayerInstruction 一般都是配合使用,用来给视频添加水印或者旋转视频方向,AVAssetExportSession 是用来进行视频导出操作的。需要值得注意的是当App进入后台之后,会对使用到GPU的代码操作进行限制,会造成崩溃,而视频处理这些功能多数会使用到GPU,所以需要做对应的防错处理。

在这里我会使用Apple的官方Demo “AVSimpleEditoriOS” 作为讲解案例,该案例采用Command设计模式来组织代码,其中基类的AVSECommand包含了一些各个子类Command共用的属性。本文就视频相关操作做简要介绍,说明一些相关的操作,并标注一些重点代码,希望本文可以起到抛砖引玉的效果,让大家对视频剪辑处理有个初步印象,然后可以根据Apple官方Demo的内容进行相应的修改。大家可以下载相应的Apple官方Demo运行查看结果。

@property AVMutableComposition mutableComposition;
@property AVMutableVideoComposition
mutableVideoComposition;
@property AVMutableAudioMix mutableAudioMix;
@property CALayer
watermarkLayer;

 

656644-0fb3d7619e3753d1

Command设计模式

视频剪切

656644-f717fbfa050cf02c
 视频头部剪切代码图
  1. 拿到视频和音频资源
  2. 创建AVMutableComposition对象
  3. 往AVMutableComposition对象添加视频资源,同时设置视频资源的时间段和插入点
  4. 往AVMutableComposition对象添加音频资源,同时设置音频资源的时间段和插入点

视频旋转

在查有关视频旋转的资料的时候查看了一篇很不错的参考资料,在这里给大家安利一下
http://blog.csdn.net/likendsl/article/details/7595611 讲的是矩阵运算的原理,对视图的矩阵操作的相关内容。

656644-453d640315d32b92

视频旋转代码图1

656644-5cb7fed3bea48ca1

视频旋转代码图2

656644-86615d2b66b33c82

视频旋转代码图3

  1. 拿到视频和音频资源
  2. 创建AVMutableComposition对象
  3. 往AVMutableComposition对象添加视频资源,同时设置视频资源的时间段和插入点
  4. 往AVMutableComposition对象添加音频资源,同时设置音频资源的时间段和插入点
  5. 设置旋转矩阵变换
  6. 创建AVMutableVideoComposition对象
  7. 设置视频的渲染宽高和Frame
  8. 创建视频组合指令AVMutableVideoCompositionInstruction,并设置指令在视频的作用时间范围和旋转矩阵变换
  9. 创建视频组合图层指令AVMutableVideoCompositionLayerInstruction,并设置图层指令在视频的作用时间范围和旋转矩阵变换
  10. 把视频图层指令放到视频指令中,再放入视频组合对象中

这里给出不同旋转角度的案例代码,希望能够对你起帮助,节省你的时间。

视频添加音频

656644-0171d7dbc5400a4e

视频添加音频代码图1

656644-2714b046789821e4
视频添加音频代码图2

  1. 拿到视频和音频资源
  2. 创建AVMutableComposition对象
  3. 往AVMutableComposition对象添加视频资源,同时设置视频资源的时间段和插入点
  4. 往AVMutableComposition对象添加音频资源,同时设置音频资源的时间段和插入点
  5. 往AVMutableComposition对象添加要追加的音频资源,同时设置音频资源的时间段,插入点和混合模式

视频添加水印

656644-3956a4d9160d407a

视频添加水印1

656644-e6f63d2aeb3c9cc8

视频添加水印2

  1. 拿到视频和音频资源
  2. 创建AVMutableComposition对象
  3. 往AVMutableComposition对象添加视频资源,同时设置视频资源的时间段和插入点
  4. 往AVMutableComposition对象添加音频资源,同时设置音频资源的时间段和插入点
  5. 创建视频组合器对象 AVMutableVideoComposition 并设置frame和渲染宽高
  6. 创建视频组合器指令对象,设置指令的作用范围
  7. 创建视频组合器图层指令对象,设置指令的作用范围
  8. 视频组合器图层指令对象 放入 视频组合器指令对象中
  9. 视频组合器指令对象放入视频组合器对象
  10. 创建水印图层Layer并设置frame和水印的位置,并将水印加入视频组合器中

视频导出

656644-a8d123c300234c03

视频导出
  1. 创建输出路径
  2. 根据AVMutableComposition对象创建AVAssetExportSession视频导出对象
  3. 设置AVAssetExportSession的AVMutableVideoComposition对象,AVMutableAudioMix对象,视频导出路径,视频导出格式
  4. 异步导出视频,根据导出结果做对应处理。

http://blog.csdn.net/likendsl/article/details/7595611

如果你觉得本文对你有帮助,请在下方给个 ,让我知道这文章起了它该起的作用!