Videos und Bilder in AVMutableComposition mit AVMutableCompositionTrack und nicht mit AVVideoCompositionCoreAnimationTool zusammenführen?

Der folgende Code exportiert ein Video mitAVMutableComposition. Wenn Sie jedoch im exportierten Video möchten, dass ein Bild 3 Sekunden lang angezeigt wird, nachdem das Quellvideo beendet ist, können Sie dies mit @ tuAVMutableCompositionTrack Oder müssen Sie eine Bildebene hinzufügen und deren Darstellung nach dem Ende des Videos animieren?

Eventuell besteht das Ziel darin, eine beliebige Anzahl von Bildern und Videos zu einem Master-Video zusammenzuführen.

Leider scheint es beim Testen wieAVVideoCompositionCoreAnimationTool verlangsamt den Exportvorgang erheblich (von <1 Sekunde auf 10-20 Sekunden), daher ist es das Ziel, @ zu vermeidAVVideoCompositionCoreAnimationTool wenn möglich

    // 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!)
    })

Antworten auf die Frage(2)

Ihre Antwort auf die Frage