视频处理之压缩成mp4

将视频文件压缩保存mp4格式

AVURLAsset *avAsset = [AVURLAsset URLAssetWithURL:movieUrl options:nil]; 

NSArray *compatiblePresets = [AVAssetExportSession exportPresetsCompatibleWithAsset:avAsset]; 

if ([compatiblePresets containsObject:AVAssetExportPresetHighestQuality]) { 

AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] initWithAsset:avAsset presetName:AVAssetExportPresetMediumQuality];

NSDateFormatter *formater = [[NSDateFormatter alloc] init];

[formater setDateFormat:@"yyyy-MM-dd-HH:mm:ss"]; 

NSString * resultPath = [NSHomeDirectory() stringByAppendingFormat:@"/Documents/output-%@.mp4", [formater stringFromDate:[NSDate date]]]; 

exportSession.outputURL = [NSURL fileURLWithPath:resultPath];  exportSession.outputFileType = AVFileTypeMPEG4;  exportSession.shouldOptimizeForNetworkUse = YES; 

[exportSession exportAsynchronouslyWithCompletionHandler:^(void)  { 

switch (exportSession.status) { 

case AVAssetExportSessionStatusUnknown:   

NSLog(@"AVAssetExportSessionStatusUnknown"); 

break; 

case AVAssetExportSessionStatusWaiting: 

NSLog(@"AVAssetExportSessionStatusWaiting"); 

break; 

case AVAssetExportSessionStatusExporting: 

NSLog(@"AVAssetExportSessionStatusExporting");

break; 

case AVAssetExportSessionStatusCompleted:  NSLog(@"AVAssetExportSessionStatusCompleted"); 

break; 

case AVAssetExportSessionStatusFailed:            NSLog(@"AVAssetExportSessionStatusFailed"); 

break; 

              } 

      }]; 

}

问题补充

发现某些机子输出会失败exportSession.status=4                            这时候可以找个第三方的库代替系统的AVAssetExportSession

SCAssetExportSession为例

SCAssetExportSession *exportSession = [[SCAssetExportSession alloc] initWithAsset:avAsset];

NSDateFormatter *formater = [[NSDateFormatter alloc] init];

[formater setDateFormat:@"yyyy-MM-dd-HH:mm:ss"];

NSString * resultPath = [NSHomeDirectory() stringByAppendingFormat:@"/Documents/%@.mp4", [formater stringFromDate:[NSDate date]]];

exportSession.videoConfiguration.preset = SCPresetLowQuality;

exportSession.audioConfiguration.preset = SCPresetLowQuality;

exportSession.videoConfiguration.maxFrameRate = 15;

exportSession.outputUrl = [NSURL fileURLWithPath:resultPath];

exportSession.outputFileType = AVFileTypeMPEG4;

[exportSession exportAsynchronouslyWithCompletionHandler:^(void){

        [self sandToTXWith:resultPath];

}];

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容