AVMutableComposition - 是不是可以有 2 个并行音轨?
Posted
技术标签:
【中文标题】AVMutableComposition - 是不是可以有 2 个并行音轨?【英文标题】:AVMutableComposition - are 2 parallel audio tracks possible?AVMutableComposition - 是否可以有 2 个并行音轨? 【发布时间】:2010-11-01 20:59:11 【问题描述】:我成功地将视频和音轨混合在一起,并将其导出为新的 .m4v 文件。
我现在的问题是,我想将相同的视频文件和 2 个音频文件混合在一起,它们是两个 AVAssetTrack 并且具有相同的时间线。就像您在音频编辑器中执行此操作一样,您可以在其中混合两个或多个声音文件,然后得到一个合并文件。
这可能吗?如果是,我必须如何进行?
目前我在继续后只听到一个声音文件,而不是两个。
顺便说一句:我的目标是“简单地”在已经有声音的视频中包含一个额外的声音文件,并将它与新的声音文件混合在一起。但似乎 AVAssetTrack 只允许音频或视频,因此我从原始视频中制作了一个新的音频 AVAssetTrack。也许这是错误的......
提前谢谢你!
【问题讨论】:
【参考方案1】:没有看到你的代码很难帮助你。也许这段代码可以提供帮助:
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 导出此合成。并且不要忘记释放资产。
【讨论】:
嗨史蒂夫,我尝试了关于代码。当我尝试执行“[[audioAsset1 trackingWithMediaType:AVMediaTypeAudio]objectAtIndex:0]”时,它给出了错误(空数组的索引 0 超出范围)。但是当我尝试在控制台中打印 audioAsset1 时,它正在打印“”。我检查了路径,那个文件在那里。我的错误是什么?请告诉我。 当我加载到资产的文件没有支持的数据类型时出现这些错误,如果该类型,请尝试检查文件 但在我的应用程序中,.m4a 文件正在使用 AVAudioPlayer 播放。所以请告诉我这段代码我的错误是什么。 我已将其发布在以下网址中。 ***.com/questions/4398764/… @jfalexvijay 我面临同样的问题。我检查了史蒂夫提供的链接,但没有成功。正如 jfalexvijay 提到的,我得到了同样的错误,比如(索引 0 超出范围),我得到了 jfalexvijay 提到的路径。请如果你能够解决它,请帮助我。谢谢以上是关于AVMutableComposition - 是不是可以有 2 个并行音轨?的主要内容,如果未能解决你的问题,请参考以下文章
AVMutableComposition - 只播放第一首曲目 (Swift)
使用 AVPlayer 音频播放 AVMutableComposition 会不同步
AVFoundation - 视频没有在 AVplayer 的 AVMutablecomposition 中播放