问题描述
我正在通过AVMutableComposition将CGImage覆盖在视频上,并且效果很好(请参见下面的屏幕快照A)。问题是当我使用AVAssetExportSession导出视频时,我得到了一些奇怪的轮廓和颜色(请参见屏幕快照B)。如何导出保留CGImage正确颜色且没有奇怪的黄色/黑色轮廓的视频?
这是我要导出的代码:
func saveVideo(composition: AVMutableComposition,vidComp: AVMutableVideoComposition,audioMix: AVMutableAudioMix) {
let preset = "AVAssetExportPreset1920x1080"
guard let exportSession = AVAssetExportSession(asset: composition,presetName: preset) else {
return
}
let videoSize: CGSize = vidComp.renderSize
let parentLayer = CALayer()
parentLayer.isGeometryFlipped = true
parentLayer.frame = CGRect(x: 0,y: 0,width: videoSize.width,height: videoSize.height)
let videoLayer = CALayer()
videoLayer.frame = CGRect(x: 0,height: videoSize.height)
parentLayer.addSublayer(videoLayer)
let url = URL(fileURLWithPath: Bundle.main.path(forResource: "Fire1",ofType: "mov")!)
let asset = AVURLAsset(url: url)
let generator = AVAssetImageGenerator(asset: asset)
generator.appliesPreferredTrackTransform = true
generator.requestedTimeToleranceBefore = .zero
generator.requestedTimeToleranceAfter = .zero
do {
let cgImg = try generator.copyCGImage(at: CMTime(seconds: 0.5,preferredTimescale: 1000),actualTime: nil)
let imgLayer = CALayer()
imgLayer.contentsGravity = .resizeAspect
imgLayer.contents = cgImg
imgLayer.frame = parentLayer.bounds
parentLayer.addSublayer(imgLayer)
} catch {
print("No thumbnail")
}
vidComp.animationTool = AVVideoCompositionCoreAnimationTool(postProcessingAsVideoLayer: videoLayer,in: parentLayer)
exportSession.videoComposition = vidComp
exportSession.audioMix = audioMix
exportSession.outputURL = self.uniqueURLForSave()
exportSession.outputFileType = AVFileType.mov
exportSession.shouldOptimizeForNetworkUse = true
exportSession.exportAsynchronously {
switch exportSession.status {
case .completed:
UISaveVideoAtPathToSavedPhotosAlbum(exportSession.outputURL!.relativePath,self,nil,nil)
default:
print("Error")
}
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)