AVFoundation框架中提供了视频压缩的功能,有一些应用场景,对像素要求不高,但是需要看到视频的,可以对视频进行压缩,比如微信的小视频功能。
//压缩 - (void)compression{ NSLog(@"压缩前大小 %f MB",[self fileSize:_videoUrl]); // 创建AVAsset对象 AVAsset* asset = [AVAsset assetWithURL:_videoUrl]; /* 创建AVAssetExportSession对象 压缩的质量 AVAssetExportPresetLowQuality 最low的画质最好不要选择实在是看不清楚 AVAssetExportPresetMediumQuality 使用到压缩的话都说用这个 AVAssetExportPresetHighestQuality 最清晰的画质 */ AVAssetExportSession * session = [[AVAssetExportSession alloc] initWithAsset:asset presetName:AVAssetExportPresetMediumQuality]; //优化网络 session.shouldOptimizeForNetworkUse = YES; //转换后的格式 //拼接输出文件路径 为了防止同名 可以根据日期拼接名字 或者对名字进行MD5加密 NSString* path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"hello.mp4"]; //判断文件是否存在,如果已经存在删除 [[NSFileManager defaultManager]removeItemAtPath:path error:nil]; //设置输出路径 session.outputURL = [NSURL fileURLWithPath:path]; //设置输出类型 这里可以更改输出的类型 具体可以看文档描述 session.outputFileType = AVFileTypeMPEG4; [session exportAsynchronouslyWithCompletionHandler:^{ NSLog(@"%@",[NSThread currentThread]); //压缩完成 if(session.status==AVAssetExportSessionStatusCompleted) { //在主线程中刷新UI界面,弹出控制器通知用户压缩完成 dispatch_async(dispatch_get_main_queue(), ^{ NSLog(@"导出完成"); CompressURL = session.outputURL; NSLog(@"压缩完毕,压缩后大小 %f MB",[self fileSize:CompressURL]); }); } }]; }
作者:style_施
链接:http://www.jianshu.com/p/b7061aae1e86
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
iOS 视频压缩
最新推荐文章于 2024-10-12 14:52:22 发布