- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想根据设备和应用程序中的设置,将视频转码为特定的视频格式。例如,如果用户有 iPhone 4S 并在我的应用程序中选择中等设置,我想在开始处理之前将视频转换为 540p。如果他选择高那么我想转码到 720p。
我可以逐帧读取视频,调整大小并保存到光盘,但这似乎不是很有效。对我可以提供给视频处理库的视频进行转码的最简单、最快速的方法是什么?
我已经尝试在我的 UIImagePickerController 上使用视频质量设置,但似乎它无法正常工作,即使我将它设置为 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
}
}
例如,您可能希望为 540p 传递 AVAssetExportPreset960x540 质量,为 720p 传递 AVAssetExportPreset1280x720 质量。
关于objective-c - 在 Objective-C (iOS) 中转码视频的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9349022/
我已经在 jQuery transit 中加载了,我确定我是在加载 jQuery 之后才做的,但我仍然得到这个错误: 我查看了 Chrome 中的资源面板,在 jQuery 之后加载了 jQuery
我目前收到一个字符串,例如 Hello there my\r\nName is\r\nJohn Smith\r\nand\r\nstuff 我想将每一行放在一个新列表项...例如: 期望的结果(带有单
我正在尝试使用 MapKit 路线请求获取两个坐标之间的交通路线。 当我切换到其他(非 Transit)类型时,下面的代码可以工作,但是当我切换到 Transit 时,它会抛出一个错误,这个错误在 A
我是一名优秀的程序员,十分优秀!