通过AVAssetExportSession导出时,为什么CGImage会更改颜色?

问题描述

我正在通过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")
        }
    }
}

屏幕截图A(正确的图像):

enter image description here

截屏B(带有黄色和黑色轮廓的故障图像):

enter image description here

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...