通过AVMutableVideoComposition和CAAnimation输出的黑色视频



我正在构建能够录制视频并在录制的视频上添加动画叠加的iOS应用程序AVFoundationCAAnimation。所有子功能都工作正常,但在播放动画时视频背景的结尾是黑色的。它不是渲染我选择的背景视频。我用AVAssetWriter录制视频,它在相机胶卷上播放得很好。但是,如果我使用此录制的视频添加叠加层,则视频背景的结尾是黑色的。有趣的是,如果我通过本机iOS相机应用程序录制视频并使用它来添加叠加层,它就可以完美运行。我已经检查了这个问题,但对我不起作用。黑色视频CAAnimation和AVFoundation AVAssetExportSession

任何帮助将不胜感激。谢谢

您需要

更正资产的首选项转换,因为对于某些视频文件,它具有空的tx和ty参数(默认情况下它们是0.0):

        ...
        if let clipVideoTrack = asset.tracks(withMediaType: .video).first {
            var preferredTransform = clipVideoTrack.preferredTransform
            var videoSize = clipVideoTrack.naturalSize.applying(preferredTransform)
            preferredTransform.tx = (videoSize.width < 0) ? fabs(videoSize.width) : 0.0
            preferredTransform.ty = (videoSize.height < 0) ? fabs(videoSize.height) : 0.0
            videoSize = CGSize(width: fabs(videoSize.width), height: fabs(videoSize.height))
            ...
            let transformer = AVMutableVideoCompositionLayerInstruction.init(assetTrack: clipVideoTrack)
            transformer.setTransform(videoTransform, at: kCMTimeZero)
            ...

最新更新