GPUImage是一个基于GPU图像和视频处理的开源iOS框架,
提供各种各样的图像处理滤镜,并且支持照相机和摄像机的实时滤镜;
滤镜介绍百度一下有很多,这里就不做介绍了。
开始采集视频数据 初始化预览的view等操作
fileprivate func conifgCamera() {
//创建预览的View
view.insertSubview(preView, at: 0)
//设置camera方向
camera?.outputImageOrientation = .portrait
camera?.horizontallyMirrorFrontFacingCamera = true
///防止允许声音通过的情况下,避免录制第一帧黑屏闪屏
camera?.addAudioInputsAndOutputs()
//获取滤镜组
beautifulFilter = getGroupFilters()
//设置GPUImage的响应链
camera?.addTarget(beautifulFilter)
beautifulFilter.addTarget(preView)
//开始采集视频
camera?.startCapture()
}
分段视频的录制,增加暂停功能,合成时,将每一段视频的视频轨道和音频轨道合成即可合成为一个视频,下面分段合成的重要代码
for i in 0..<urlArray.count {
do {
let options = [AVURLAssetPreferPreciseDurationAndTimingKey:true]
let asset = AVURLAsset.init(url: urlArray[i], options: options)
//视频轨道
let assetVideoTrack = asset.tracks(withMediaType: AVMediaTypeVideo).first
let videoRange = CMTimeRange.init(start: kCMTimeZero, duration: asset.duration)
try videoTrack.insertTimeRange(videoRange, of: assetVideoTrack!, at: totalTim)
//获取AVAsset 中的音频
let assetAudioTrack = asset.tracks(withMediaType: AVMediaTypeAudio).first
//因为视频比音频短,所以直接用视频的长度
let audioRange = videoRange //CMTimeRange.init(start: kCMTimeZero, duration: asset.duration)
try audioTrack.insertTimeRange(audioRange, of: assetAudioTrack!, at: totalTim)
totalTim = CMTimeAdd(totalTim, asset.duration)
}catch{
print("有错")
}
}
基本注释都已经写了,UI部分的注释没有写,仔细看看应该可以懂的
希望能有所帮助吧
项目地址:iOS GPUImage 录制视频,美化,背景音乐等