我有一个简单的编辑器,它连接本地视频文件,并将其与本地文件中的音乐一起使用 .
我正在创建合成和合成曲目并将视频添加到他们的轨道:
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时,它不可测量 . 当设置为零时,我可以听到它 .
无论我为音乐设置了什么 Value ,它都在输出上完整 .
我也试过设置trackID,但没有做到 . 此外,它没有滑块问题,我尝试硬编码各种浮动值,结果证明它不起作用 .
现在我不明白为什么这会像这样 . 这完全是奇怪的,我无法解释 .
1 回答
我不确定您是否在正确的对象中添加音频混合,
audiomix
未添加到合成本身 . 要查看音频混合的效果,您需要在播放时将其添加到AVPlayerItem
的实例,或者如果要导出则将其添加到AVAssetExportSession
. 看看AVFoundation Programming Guide