2016-08-25 15 views
1

私は私のAVAssetビデオをカットするには、このコードを持っている:カットAVAsset速く

AVURLAsset *asset = [AVURLAsset URLAssetWithURL:_url options:nil]; 

[[NSFileManager defaultManager] removeItemAtPath:[NSString stringWithFormat:@"%@",_url] error:nil]; 

AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] initWithAsset:asset presetName:AVAssetExportPresetHighestQuality]; 

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *outputURL = paths[0]; 
NSFileManager *manager = [NSFileManager defaultManager]; 
[manager createDirectoryAtPath:outputURL withIntermediateDirectories:YES attributes:nil error:nil]; 
outputURL = [outputURL stringByAppendingPathComponent:@"output.mp4"]; 
[manager removeItemAtPath:outputURL error:nil]; 

exportSession.outputURL = [NSURL fileURLWithPath:outputURL]; 
exportSession.shouldOptimizeForNetworkUse = YES; 
exportSession.outputFileType = AVFileTypeQuickTimeMovie; 
CMTime start = CMTimeMakeWithSeconds(slider.min*(videoDuration-1), 600); 
CMTime duration = CMTimeMakeWithSeconds(slider.max*(videoDuration-1), 600); 
CMTimeRange range = CMTimeRangeMake(start, duration); 
exportSession.timeRange = range; 
[exportSession exportAsynchronouslyWithCompletionHandler:^(void) { 
    switch (exportSession.status) { 
     case AVAssetExportSessionStatusCompleted: 

      _url = [NSURL URLWithString:[NSString stringWithFormat:@"file://%@",outputURL]]; 

      break; 
     default: 
      break; 
    } 

}]; 

問題:それはURLにAVAssetを保存し、それをリロードする時間がかかります。速くすることは可能ですか?

答えて

0

AVAssetExportPresetHighestQualityではなく、AVAssetExportPresetPassthroughをプリセット名として使用できます。あなたはそのような高価なトランスコードを避けることができるかもしれません。時間範囲を設定するとはこれをいくつかの形式で排除しますが、試してみる価値があります。