我有一个简单的编辑器,可以连接本地视频文件,并将其与本地文件中的音乐相关联。
我正在制作合成曲目和合成曲目,并将视频a / v曲目添加到其中:
NSMutableArray *audioInputParams = [NSMutableArray array];
AVMutableComposition *composition = [NSMutableComposition composition];
AVMutableCompositionTrack *compositionAudioTrack = [composition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];
AVMutableCompositionTrack *compositionVideoTrack = [composition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid];
for (AVURLAsset *asset in assets) {
AVAssetTrack *audioTrack = [asset compatibleTrackForCompositionTrack:compositionAudioTrack];
AVAssetTrack *videoTrack = [asset compatibleTrackForCompositionTrack:compositionVideoTrack];
// compositionAudioTrack insert audioTrack
// compositionVideoTrack insert videoTrack
一切正常。由此产生的视频在声音和视频方面完美切割。
在UI中是一个滑块,在原始视频声音和音乐声音之间交叉淡入淡出。滑块从0到1,因为AVs也可以。
我为每个视频卷使用滑块值减1,为音乐使用值。
AVMutableAudioMixInputParameters *audioMixParameters = [AVMutableAudioMixInputParameters audioMixInputParametersWithTrack:audioTrack];
[audioMixParameters setVolume:1.0 - [slider value] atTime:kCMTimeZero];
[audioInputParams addObject:audioMixParameters];
}
AVMutableCompositionTrack *compositionMusicTrack = [composition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];
AVURLAsset *musicAsset;
AVAssetTrack *musicTrack = [musicAsset compatibleTrackForCompositionTrack:compositionMusicTrack];
[compositionMusicTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, [composition duration])
ofTrack:musicTrack
atTime:kCMTimeZero
error:nil];
AVMutableAudioMixInputParameters *musicInputParameter = [AVMutableAudioMixInputParameters audioMixInputParametersWithTrack:musicTrack];
[musicInputParameter setVolume:[slider value] atTime:kCMTimeZero];
[audioInputParams addObject:musicInputParameter];
AVMutableAudioMix *audioMix = [AVMutableAudioMix audioMix];
[audioMix setInputParameters:audioInputParams];
当我现在使用音频混合时,无论是播放还是渲染,音频混合都不起作用。当我将视频音量设置为1时,它无法忍受。当设置为零时,我可以听到它。
无论我为音乐设定什么价值,它都会在输出上显示。
我也尝试过设置trackID,但也没有。此外,它没有滑块问题,我尝试硬编码各种浮点值,结果证明它不起作用。
现在我不知道为什么会这样。这完全是奇怪的,我无法解释。
答案 0 :(得分:0)
我不确定您是否在正确的对象中添加音频混合,audiomix
未添加到合成本身。要查看音频混合的效果,您需要在播放时将其添加到AVPlayerItem
的实例,或者在导出时将其添加到AVAssetExportSession
。看看AVFoundation Programming Guide