我正试图淡出一个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) .
任何想法非常感谢!
2 回答
对于那些使用
AVAudioMix
/AVMutableAudioMix
与流媒体一起遇到麻烦的人,请注意,根据Apple,它目前仅支持基于文件的资产 .Source:
https://developer.apple.com/library/content/qa/qa1716/_index.html
(靠近技术说明的底部)
CMTimeRangeMake
的第二个参数是CMTimeRange
的持续时间,而不是时间范围的结束时间(ref):CMTimeRange CMTimeRangeMake(CMTime start, CMTime duration);
尝试这个淡出最后5秒的构图: