2

我正在尝试淡出 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)。

任何想法都非常感谢!

4

2 回答 2

1

的第二个参数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)];
于 2017-01-10T23:18:47.030 回答
1

对于那些在使用AVAudioMix/AVMutableAudioMix与流媒体结合时遇到问题的人,请注意,根据 Apple,它目前仅支持基于文件的资产。

资源:

https://developer.apple.com/library/content/qa/qa1716/_index.html

(靠近技术说明的底部)

于 2017-12-14T23:07:28.137 回答