最近这两年视频剪辑非常火,很多APP都内置了视频剪辑功能。
IOS视频剪辑主要依赖AVFoundation实现。
1、AVMutableComposition
视频剪辑需要创建一个工程,这个工程只负责把来自不同素材的视频和音频重新组合到自己的轨道track上,等于在内存里把不同素材重新构建成一个新的视频素材。因此你可以直接在AVPlayer上播放这个工程,就像播放一个正常的视频,AVMutableComposition可以等同于AVAsset被使用。
如果你只想把不同的素材拼接起来,仅使用AVMutableComposition就足够了。
composition结构
1.1 插入视频轨道
let composition = AVMutableComposition()
let track = composition.addMutableTrack(withMediaType: .video, preferredTrackID: kCMPersistentTrackID_Invalid)
1.2 插入素材
var path = Bundle.main.path(forResource:"clip", ofType:"mp4")
let asset =AVURLAsset(url:URL(fileURLWithPath: path!))
let assetTrack = asset.tracks(withMediaType: .video).first
var assetTimeRange = CMTimeRangeMake(start:CMTime.zero, duration: assetA.duration)
var startTime = CMTime.zero
trystack.insertTimeRange(assetTimeRange, of: assetTrackA, at: startTime)
插入音频的方法大同小异,如果只是为了拼接视频,到这里就足够了。
2、AVMutableVideoComposition
如果你想对合并后的视频素材进行处理,例如转场、特效、滤镜、文本、贴图这样的操作,你需要在AVMutableVideoComposition里完成。
video composition结构
2.1 直接创建
let videoComposition = AVMutableVideoComposition(propertiesOf:composition)
当在composition上创建videoComposition之后,会自动创建AVMutableVideoCompositionInstruction和AVMutableVideoCompositionLayerInstruction。
2.1.1 AVMutableVideoCompositionInstruction
一个等待处理的视频剪辑composition会根据插入素材的情况被自动划分为多个可剪辑的区域,例如0-1秒或者2-5秒,你不需要去思考,当你直接创建videoComposition的时候instruction会被自动的创建出来,每一个instruction代表一个