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

现在的问题是,我想将相同的视频文件和2个音频文件混合在一起,它们是两个AVAssetTrack,并且具有相同的时间线。就像在音频编辑器中执行此操作一样,您可以在其中混合两个或更多声音文件,而获得一个合并的文件。

这可能吗?如果是,我该如何进行?

此刻,我在继续操作后只听到一个声音文件,而不是两个声音文件。

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

先感谢您!

最佳答案

很难在没有看到您的代码的情况下为您提供帮助。也许这段代码可以帮助您:

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

08-27 17:55