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

标签 ios swift video avfoundation avmutablecomposition

下面的代码使用 AVMutableComposition 导出视频。但是在导出的视频中,如果您希望图像在源视频结束后显示 3 秒,有没有办法使用 AVMutableCompositionTrack 来实现这一点,或者您是否需要添加图像层并对其进行动画处理视频结束后出现什么情况?

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

不幸的是,在测试过程中,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!)
    })

最佳答案

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

关于ios - 使用 AVMutableCompositionTrack 合并 AVMutableComposition 中的视频和图像,而不是 AVVideoCompositionCoreAnimationTool?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34937862/

相关文章:

iOS越狱-如何在后台获取位置

ios - 是否所有 iOS 设备都可以在设备上使用 Apple Wallet 应用程序?

ios - 将更多数据附加到公共(public)类中定义的 api

video - FFMPEG 无法修剪剪辑的开头

ios - 在后台播放视频 swift 3

ios - 使用 iOS 8 应用程序组在两个应用程序之间共享数据(使用 NSUserDefaults)

ios - 在 swift 中加载关于方向变化的 xib View

ios - 使用 Swift 或 Objective-C 中的 Here iOS SDK 绘制点之间的路线

html - azure 媒体播放器中的动态视频源更改问题

android - 如何在 VideoView 中翻转(镜像效果)视频?