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 錄製視頻,美化,背景音樂等