通过 AVMutableVideoComposition 和 CAAnimation 输出黑色视频

gst*_*m79 0 avfoundation caanimation ios avassetwriter avmutablecomposition

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

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

小智 5

您需要更正 asset 的 PreferredTransform,因为某些视频文件的 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)

            ...
Run Code Online (Sandbox Code Playgroud)