AVMutableComposition - возможны ли 2 параллельные звуковые дорожки? - PullRequest
4 голосов
/ 01 ноября 2010

Я успешно смикшировал видео и аудио дорожку и экспортировал их в новый файл .m4v.

Моя проблема в том, что я хочу смешать один и тот же видеофайл и 2 аудио файла, которыедва AVAssetTrack и имеют одинаковые временные линии, вместе.Как вы делаете это в аудио редакторе, где вы можете сделать микширование двух или более звуковых файлов, и вы получите один объединенный файл.

Возможно ли это?Если да, то как мне действовать?

В данный момент я слышу только один звуковой файл после продолжения, а не оба.

Кстати: моя цель состоит в том, чтобы просто включить дополнительныйЗвуковой файл для видео, в котором уже есть звук, и микшируйте его вместе с новым звуковым файлом.Но кажется, что AVAssetTrack просто позволяет аудио или видео, поэтому я сделал новый аудио-AVAssetTrack из оригинального видео.Возможно, это неправильно ...

Заранее спасибо!

1 Ответ

8 голосов
/ 11 ноября 2010

Ну, трудно помочь тебе, не видя твой код. Может быть, этот код может помочь:

    AVMutableComposition* composition = [AVMutableComposition composition];

    AVURLAsset* videoAsset = [[AVURLAsset alloc]initWithURL:videoURL options:nil];
    AVURLAsset* audioAsset1 = [[AVURLAsset alloc]initWithURL:audioURL1 options:nil];
    AVURLAsset* audioAsset2 = [[AVURLAsset alloc]initWithURL:audioURL1 options:nil];

    AVMutableCompositionTrack *compositionVideoTrack = [composition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid];

        NSError* error = NULL;

        [compositionVideoTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero,videoAsset.duration) 
                                       ofTrack:[[videoAsset tracksWithMediaType:AVMediaTypeVideo]objectAtIndex:0] 
                                        atTime:kCMTimeZero  
 AVMutableCompositionTrack *compositionAudioTrack1 = [composition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];

        [compositionAudioTrack1 insertTimeRange:CMTimeRangeMake(kCMTimeZero,audioAsset1.duration) 
                                       ofTrack:[[audioAsset1 tracksWithMediaType:AVMediaTypeAudio]objectAtIndex:0] 
                                        atTime:kCMTimeZero
                                         error:&error];

 AVMutableCompositionTrack *compositionAudioTrack2 = [composition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid];

        [compositionAudioTrack2 insertTimeRange:CMTimeRangeMake(kCMTimeZero,audioAsset2.duration) 
                                       ofTrack:[[audioAsset2 tracksWithMediaType:AVMediaTypeAudio]objectAtIndex:0] 
                                        atTime:kCMTimeZero
                                         error:&error];

Теперь просто экспортируйте эту композицию с AVExportSession. И не забудьте освободить активы.

...