Я работаю над простым приложением для редактирования видео. Я хочу добавить замедленное движение к моему приложению. Я замечаю, что в классе AVMutableCompositionTrack существует метод scaleTimeRange, поэтому я использую его для достижения своей цели. Я обнаружил, что scaleTimeRange очень хорошо работает на видеодорожке, но не оказывает никакого влияния на звуковую дорожку. Это означает, что звуковая дорожка по-прежнему воспроизводится с начальной скоростью.
Следуйте моему коду:
CMTime insertionPoint = kCMTimeZero;
double wholeDuration = CMTimeGetSeconds([asset duration]);
double doubleDuration = CMTimeGetSeconds([asset duration])*2.0;
CMTime trimmedDuration = CMTimeMakeWithSeconds(wholeDuration, 600.0);
// Create a new composition
self.mutableComposition = [AVMutableComposition composition];
// Insert video and audio tracks from AVAsset
if(assetVideoTrack != nil) {
AVMutableCompositionTrack *compositionVideoTrack = [self.mutableComposition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid];
[compositionVideoTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, trimmedDuration) ofTrack:assetVideoTrack atTime:insertionPoint error:&error];
[compositionVideoTrack scaleTimeRange:CMTimeRangeMake(kCMTimeZero, trimmedDuration) toDuration:CMTimeMakeWithSeconds(doubleDuration, 600.0)];
}
if(assetAudioTrack != nil) {
AVMutableCompositionTrack *compositionAudioTrack = [self.mutableComposition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];
[compositionAudioTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, trimmedDuration) ofTrack:assetAudioTrack atTime:insertionPoint error:&error];
[compositionAudioTrack scaleTimeRange:CMTimeRangeMake(kCMTimeZero, trimmedDuration) toDuration:CMTimeMakeWithSeconds(doubleDuration, 600.0)];
}
Может кто-нибудь дать мне несколько советов о проблеме? Спасибо!