Mic*_*hel 6 objective-c video-processing
我想,根据我的应用程序中的设备和设置,将视频转码为特定的视频格式.例如,如果用户有iPhone 4S并在我的应用程序中选择中等设置,我想在开始处理之前将视频转换为540p.如果他选择高,那么我想转码为720p.
我可以逐帧读取视频,调整大小并保存到光盘,但这似乎不是很有效.什么是最简单,最快速的方式来转换我可以提供给我的视频处理库的视频?
我已尝试在我的UIImagePickerController上使用videoQuality设置,但似乎它不起作用,即使我将其设置为UIImagePickerControllerQualityTypeIFrame960x540我的视频出现为720p(640x480正在工作,但我需要更细粒度).
您可能想看看 AVAssetExportSession,它使得重新编码视频变得相当简单。我认为它在可能的情况下也支持硬件,就像 AVFoundation 的其他部分一样:
请注意,它永远不会使视频大于实际大小,因此不能保证您获得所需的输出大小。假设您有 ALAsset 的实例,以下代码可能是您想要的开始:
- (void)transcodeLibraryVideo:(ALAsset *)libraryAsset
toURL:(NSURL *)fileURL
withQuality:(NSString *quality) {
// get a video asset for the original video file
AVAsset *asset = [AVAsset assetWithURL:
[NSURL URLWithString:
[NSString stringWithFormat:@"%@",
[[libraryAsset defaultRepresentation] url]]]];
// see if it's possible to export at the requested quality
NSArray *compatiblePresets = [AVAssetExportSession
exportPresetsCompatibleWithAsset:asset];
if ([compatiblePresets containsObject:quality]) {
// set up the export
AVAssetExportSession *exportSession = [[AVAssetExportSession alloc]
initWithAsset:asset presetName:quality];
exportSession.outputURL = fileURL;
exportSession.outputFileType = AVFileTypeQuickTimeMovie;
// run the export
[exportSession exportAsynchronouslyWithCompletionHandler:^{
switch ([exportSession status]) {
case AVAssetExportSessionStatusFailed:
//TODO: warn of failure
break;
case AVAssetExportSessionStatusCancelled:
//TODO: warn of cancellation
break;
default:
//TODO: do whatever is next
break;
}
[exportSession release];
}];
}
else {
//TODO: warn that the requested quality is not available
}
}
Run Code Online (Sandbox Code Playgroud)
例如,您可能希望为 540p 传递 AVAssetExportPreset960x540 的质量,为 720p 传递 AVAssetExportPreset1280x720 的质量。
| 归档时间: |
|
| 查看次数: |
5979 次 |
| 最近记录: |