AVAssetExportSession不导出时间范围

时间:2013-11-25 21:19:23

标签: ios audio trim avassetexportsession

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

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

任何人都知道,我做错了什么?

4 个答案:

答案 0 :(得分:1)

我不确定我的代码现在可用,因为它适用于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;
}

答案 1 :(得分:0)

您确定正确使用CMTimeRangeMake吗?

你传递的是开始时间和持续时间,而不是开始时间和结束时间。

答案 2 :(得分:0)

您应该检查输出文件是否已存在。

" exportAsynchronouslyWithCompletionHandler"不会覆盖outputfile。

答案 3 :(得分:0)

检查state中的导出会话的errorexportAsynchronouslyWithCompletionHandler信息,确保输出网址文件不存在。

参考这两个主题,祝你好运!

Unable to trim a video using AVAssetExportSession

Creating a time range for AVAssetExportSession