AVMutableComposition - 可能是2个并行音轨吗?

时间:2010-11-01 20:59:11

标签: iphone video audio avfoundation

我将视频和音频轨道成功混合在一起并将其导出到新的.m4v文件中。

我现在的问题是,我想将相同的视频文件和2个音频文件混合在一起,这两个音频文件是两个AVAssetTrack并且具有相同的时间线。就像你在音频编辑器中一样,你可以混合两个或多个声音文件,然后你得到一个合并文件。

这可能吗?如果是,我该怎么办?

目前我只是听到一个声音文件,而不是两个。

顺便说一句:我的目标是“简单地”将一个额外的声音文件包含到已经有声音的视频中,并将它与新的声音文件混合在一起。但似乎AVAssetTrack只允许音频或视频,因此我从原始视频中制作了一个新的音频AVAssetTrack。也许这是错误的......

提前谢谢!

1 个答案:

答案 0 :(得分:8)

如果没有看到您的代码,很难帮助您。也许这段代码可以提供帮助:

    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导出此合成。并且不要忘记释放资产。