我正试图淡出AVComposition轨道(它是视频的音轨)。
我可以在开始时将其淡化没有问题,但是在最后将其淡化时会遇到很多麻烦。这是我的代码:
AVMutableAudioMixInputParameters *audioMixParameters = [AVMutableAudioMixInputParameters audioMixInputParametersWithTrack:compositionAudioTrack];
[audioMixParameters setVolume:0.0 atTime:kCMTimeZero];
[audioMixParameters setVolumeRampFromStartVolume:0.0 toEndVolume:1.0 timeRange:CMTimeRangeMake(kCMTimeZero, CMTimeMake(150, kVideoFPS))];
CMTime fadeOutBegin = CMTimeMake((length - 5) * kVideoFPS, kVideoFPS);
[audioMixParameters setVolumeRampFromStartVolume:1.0 toEndVolume:0.0 timeRange:CMTimeRangeMake(fadeOutBegin, totalDuration)];
AVMutableAudioMix *audioMix = [AVMutableAudioMix audioMix];
audioMix.inputParameters = [NSArray arrayWithObject:audioMixParameters];
length
是一个NSUInteger,它是视频的长度,以秒为单位。
totalDuration
是视频总持续时间的CMTime,时间刻度为kVideoFPS
kVideoFPS
是一个值为30
我的目标是从乐曲结束开始淡出5秒。我尝试了各种各样的东西,比如CMTimeMakeWithSeconds。我也改变了淡入淡出的值,并且它工作正常(在开始时将音量从1.0淡化到0.0)。
非常感谢任何想法!
答案 0 :(得分:1)
对于那些使用AVAudioMix
/ AVMutableAudioMix
与流式媒体一起遇到问题的用户,请注意,根据Apple,它目前仅支持基于 file 的资产。< / p>
<强>来源:强>
https://developer.apple.com/library/content/qa/qa1716/_index.html
(靠近技术说明的底部)
答案 1 :(得分:0)
CMTimeRangeMake
的第二个参数是CMTimeRange
的持续时间,而不是时间范围的结束时间(ref):
CMTimeRange CMTimeRangeMake(CMTime start, CMTime duration);
尝试使用淡出最后5秒的构图:
CMTime fadeOutEnd = CMTimeMake(5 * kVideoFPS, kVideoFPS);
[audioMixParameters setVolumeRampFromStartVolume:1.0 toEndVolume:0.0 timeRange:CMTimeRangeMake(fadeOutBegin, fadeOutEnd)];