ios - scaleTimeRange 对音频类型 AVMutableCompositionTrack 没有影响

标签 ios objective-c avfoundation openal

我正在开发一款简单的视频编辑应用。我想在我的应用程序中添加慢动作。我注意到 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)];
    }

谁能给我一些关于这个问题的建议?谢谢!

最佳答案

为了能够播放带有声音的慢动作,只需为 AVPlayerItem 设置适当的 audioTimePitchAlgorithm

playerItem.audioTimePitchAlgorithm = AVAudioTimePitchAlgorithmVarispeed;

关于ios - scaleTimeRange 对音频类型 AVMutableCompositionTrack 没有影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17269531/

相关文章:

ios - NSXMLParser 解析在 XML 文档中途中断

ios - 我如何像在 Mail.app 中一样在 UITextView 的底部填充,这样文本就不会被挤压?

ios - AVAudioFile init 在模拟器上工作但在设备上崩溃

iOS 自录制开始以来更新录制时间的正确方法

ios - 在 View Controller 出现之前,Objective C 中的 IBOutlet 为零

iOS 键盘和 TextView 错误 - "use of undeclared variable"

iphone - 将 UIImageView 从 UIScrollView 拖到另一个 View

ios - 如何通过 swift 将底线添加到 subview 中的多个 UITextField?

objective-c - 基于文档的应用程序的核心数据版本控制

ios - iOS 11 中的照片捕获权限问题