使用AVMutableCompositionTrack在AVMutableComposition中合并视频和图像,而不是AVVideoCompositionCoreAnimationTool?

问题描述:

以下代码使用AVMutableComposition导出视频。但是在导出的视频中,如果要在源视频结束后显示图像3秒钟,是否有办法通过AVMutableCompositionTrack来做到这一点,或者您需要添加图像图层并在视频结束后为其外观设置动画效果吗?使用AVMutableCompositionTrack在AVMutableComposition中合并视频和图像,而不是AVVideoCompositionCoreAnimationTool?

最终目标是将任意数量的图像和视频合并为一个主视频。

不幸的是,在测试过程中好像AVVideoCompositionCoreAnimationTool严重减慢导出过程(从< 1秒10-20秒),因此我们的目标是避免AVVideoCompositionCoreAnimationTool如果可能的话。

// Create composition object 
    let composition = AVMutableComposition() 
    let compositionVideoTrack = composition.addMutableTrackWithMediaType(AVMediaTypeVideo, preferredTrackID: CMPersistentTrackID(kCMPersistentTrackID_Invalid)) 
    let compositionAudioTrack = composition.addMutableTrackWithMediaType(AVMediaTypeAudio, preferredTrackID: CMPersistentTrackID(kCMPersistentTrackID_Invalid)) 
    var insertTime = kCMTimeZero 

    // Extract tracks from slice video 
    let videoURL = NSURL(fileURLWithPath: videoPath) 
    let videoAsset = AVURLAsset(URL: videoURL, options: nil) 
    let sourceVideoTrack = videoAsset.tracksWithMediaType(AVMediaTypeVideo)[0] 
    let sourceAudioTrack = videoAsset.tracksWithMediaType(AVMediaTypeAudio)[0] 
    do { 
     try compositionVideoTrack.insertTimeRange(CMTimeRangeMake(kCMTimeZero, videoAsset.duration), ofTrack: sourceVideoTrack, atTime: kCMTimeZero) 
     try compositionAudioTrack.insertTimeRange(CMTimeRangeMake(kCMTimeZero, videoAsset.duration), ofTrack: sourceAudioTrack, atTime: kCMTimeZero) 
    } catch { 
     print("Error with insertTimeRange while exporting video: \(error)") 
    } 

    // Export composition to video 
    let outputURL = getFilePath(getUniqueFilename(gMP4File)) 
    let exporter = AVAssetExportSession(asset: composition, presetName: AVAssetExportPresetHighestQuality) 
    exporter!.outputURL = NSURL(fileURLWithPath: outputURL) 
    exporter!.outputFileType = AVFileTypeMPEG4 
    exporter!.exportAsynchronouslyWithCompletionHandler({ 
     self.exportDidFinish(exporter!) 
    }) 

在咨询了其他人关于SO并进行更多网络研究后,似乎这是不可能的。将图像与视频合并为可从应用程序播放的主视频似乎需要AVVideoCompositionCoreAnimationTool。