ios - AVAssetExportSession 不导出时间范围

标签 ios audio trim avassetexportsession

我有这个问题。我正在通过 AVAssetExportSession 修剪声音文件。我设置时间范围然后异步导出。我以与输入文件不同的名称保存输出文件。

它工作正常,但只是第一次。当我尝试修剪修剪后的文件时,它会以整个持续时间导出它,但 CMTimeRangeShow 显示正确的时间范围。

有人知道我做错了什么吗?

最佳答案

我不确定我的代码现在是否对您可用,因为它适用于 iOS7。希望对您有所帮助。

- (BOOL)trimAudio :(NSURL *) url
{
    float vocalStartMarker = timeFrom;
    float vocalEndMarker = timeTo;
    NSURL *audioFileInput = url_Audio;
    NSURL *audioFileOutput = url;

    if (!audioFileInput || !audioFileOutput)
    {
        return NO;
    }

    [[NSFileManager defaultManager] removeItemAtURL:audioFileOutput error:NULL];
    AVAsset *asset = [AVAsset assetWithURL:audioFileInput];

    AVAssetExportSession *exportSession = [AVAssetExportSession exportSessionWithAsset:asset
                                                                            presetName:AVAssetExportPresetAppleM4A];

    if (exportSession == nil)
    {
        return NO;
    }

    CMTime startTime = CMTimeMake((int)(floor(vocalStartMarker * 100)), 100);
    CMTime stopTime = CMTimeMake((int)(ceil(vocalEndMarker * 100)), 100);
    CMTimeRange exportTimeRange = CMTimeRangeFromTimeToTime(startTime, stopTime);

    exportSession.outputURL = audioFileOutput;
    exportSession.outputFileType = AVFileTypeAppleM4A;
    exportSession.timeRange = exportTimeRange;

    [exportSession exportAsynchronouslyWithCompletionHandler:^
     {
         if (AVAssetExportSessionStatusCompleted == exportSession.status)
         {
             // It worked!
         }
         else if (AVAssetExportSessionStatusFailed == exportSession.status)
         {
             // It failed...
             [[[UIAlertView alloc]initWithTitle:@"Unknown Error" message:nil delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil]show];
         }
     }];

    return YES;
}

关于ios - AVAssetExportSession 不导出时间范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20203548/

相关文章:

ios - 触摸时删除 SKSpriteNode

ios - 在 View Controller 之间传递数据

audio - FFmpeg - 仅延迟音频链接 dshow 输入的视频流

ios - 在 Spritekit 中添加音效

java - 如何在JAVA中使用rtrim PHP函数

python - 使用 Flask 在 Python 中修剪() 函数

ios - View Controller 在 iOS 12 中响应应用程序委托(delegate)通知,但在 iOS 13 中不响应

ios - 如何使用 Storyboard 在消失的导航栏上添加栏按钮项目?

android - 如何在Android中使用mediastore.audio获取具有音频文件的目录的名称

php - 使用修剪、stripslashes 和 htmlspecialchars 时,撇号会导致插入查询出现问题