Слияние двух или более видео в ios

Как объединить видеоклипы с разной ориентацией с помощью AVFoundation

Я пошел с вышеупомянутым ответом и идет хорошо. Но я столкнулся с проблемой, что аудио видео удаляется. Даже все мои видео имеют голос. Но после объединения экспортируемое видео отключается. Может кто-нибудь помочь. Заранее спасибо.

1 ответ

Я тоже столкнулся с той же проблемой, но я нашел решение. Версия Swift 4.2.

 // Merge All videos.
    func mergeAllVideos(completionHandler: @escaping(Bool)->Void){
        mixComposition = AVMutableComposition.init()

        // To capture video.
        let compositionVideoTrack = mixComposition?.addMutableTrack(withMediaType: .video, preferredTrackID: kCMPersistentTrackID_Invalid)

        // To capture audio.
        let compositionAudioTrack = mixComposition?.addMutableTrack(withMediaType: .audio, preferredTrackID: kCMPersistentTrackID_Invalid)
        var nextCliptStartTime: CMTime = CMTime.zero

        // Iterate video array.
        for file_url in Constants.videoFileNameArr{
            // Do Merging here.
            let videoAsset = AVURLAsset.init(url: file_url)
            let timeRangeInAsset = CMTimeRangeMake(start: CMTime.zero, duration: videoAsset.duration);
            do{
                // Merge video.
                try compositionVideoTrack?.insertTimeRange(CMTimeRange(start: CMTime.zero, duration: videoAsset.duration), of: videoAsset.tracks(withMediaType: .video)[0], at: nextCliptStartTime)

                // Merge Audio
                try compositionAudioTrack?.insertTimeRange(CMTimeRange(start: CMTime.zero, duration: videoAsset.duration), of: videoAsset.tracks(withMediaType: .audio)[0], at: nextCliptStartTime)
            }catch{
                print(error)
            }

            // Increment the time to which next clip add.
            nextCliptStartTime = CMTimeAdd(nextCliptStartTime, timeRangeInAsset.duration)
        }

        // Add rotation to make it portrait.
        let rotationTransform = CGAffineTransform(rotationAngle: CGFloat(Double.pi/2))
        compositionVideoTrack!.preferredTransform = rotationTransform

        // Save final file.
        self.saveFinalFile(mixComposition!){
            isDone in
            completionHandler(true)
        }
    }
Другие вопросы по тегам