Iphone 使用UIImagePickerController选择电影时避免视频压缩?
我使用UIImagePickerController允许用户从资源库中选择视频 当用户选择第二个屏幕上的“选择”按钮时,视图将显示进度条和压缩视频。。。信息 为什么会这样 有什么方法可以避免这种压缩操作吗 将UIImagePickerController的videoQuality属性设置为High UIImagePickerController QualityTypeHigh=0 从SDK文档中: 如果在图像选择器中显示录制的电影,则指定不希望降低电影的视频质量Iphone 使用UIImagePickerController选择电影时避免视频压缩?,iphone,video,compression,uiimagepickercontroller,movie,Iphone,Video,Compression,Uiimagepickercontroller,Movie,我使用UIImagePickerController允许用户从资源库中选择视频 当用户选择第二个屏幕上的“选择”按钮时,视图将显示进度条和压缩视频。。。信息 为什么会这样 有什么方法可以避免这种压缩操作吗 将UIImagePickerController的videoQuality属性设置为High UIImagePickerController QualityTypeHigh=0 从SDK文档中: 如果在图像选择器中显示录制的电影,则指定不希望降低电影的视频质量 答:目前无法控制UIImageP
答:目前无法控制UIImagePickerController如何压缩拾取的视频 我只是做了一些快速测试。使用我创建的一个测试应用程序,我选取了相同的视频两次——一次是将videoQuality属性设置为UIImagePickerControllerQualityTypeHigh,一次是将其设置为UIImagePickerControllerQualityTypeLow。复制的结果文件大小完全相同,15.1MB,帧大小为360x480。原版为72.5MB,框架尺寸为480x640。显然,此属性根本不影响所使用的压缩。对于那些建议使用videoQuality属性的人,文档中明确指出它是一个视频捕获选项,而不是选择器选项
正如Jack在下面提到的,它也是用于转码的。看起来我读文档读得太快了,因为我没有注意到转码的内容。由于还没有办法避免使用UIImagePickerController进行压缩,我想介绍一些如何创建自己的图像选择器以避免压缩的想法 这将允许访问原始视频文件: iOS 8 查看PhotoKit文档以访问收藏瞬间和其他选项 以下是一个使用PhotoKit的苹果示例应用程序,可以修改为一个照片采集器: GitHub上有一个photo picker库,它使用的PhotoKit看起来很有前途,因为它为您提供了所有选定图像/视频的Phaset对象: iOS 7及以下版本
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
[library enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
if (group) {
// If you want, you can filter just pictures or videos
// I just need videos so I do this:
[group setAssetsFilter:[ALAssetsFilter allVideos]];
[group enumerateAssetsUsingBlock:^(ALAsset *asset, NSUInteger index, BOOL *stop){
if (asset){
// You can now add this ALAsset in your own video picker.
// Note that you can only access the ALAsset as long as
// you maintain a reference to the ALAssetsLibrary
// Or if you want to process the video, you can create an AVAsset:
NSURL *url = asset.defaultRepresentation.url;
AVAsset *videoAsset = [AVAsset assetWithURL:url];
}
}];
}
} failureBlock:^(NSError *error) {
NSLog(@"error enumerating AssetLibrary groups %@\n", error);
}];
从iOS 11开始,您可以指定videoExportPreset并将其设置为AVAssetExportPresetPassthrough:
这仍然会显示压缩进度条,但速度会快得多,尤其是对于较小的视频。仍然没有找到解决方案。有人有什么想法吗?看看下面我的答案。开发人员似乎不能影响压缩。Avalancis-这是两年前回答的。有可能被接受吗?我也有同样的问题。有人知道是否有其他方法可以不使用UIImagePickerController导入视频以避免压缩吗?看起来在iPhone 4上,即使设置为高,它仍然会压缩,但质量比默认值要好得多。我可以理解为什么他们会压缩在高,因为原来的720p视频编码超过10兆位/秒!我也有类似的发现,甚至将其设置为高会导致一些压缩和“压缩视频”对话框。在UIImagePickerControllerQualityTypeHigh的文档中,最后一行表示:如果在图像选择器中显示录制的电影,则指定不希望降低电影的视频质量。。这似乎表明,对于拾取视频而不是录制视频,此属性会影响它们在图像选择器的编辑屏幕中的显示方式。我只是做了一些快速测试。我选了两次相同的视频,一次是QualityTypeHigh,一次是QualityTypeLow。复制的结果文件大小完全相同,15.1MB,帧大小为360x480,而原始文件为72.5MB,帧大小为480x640。显然,这个属性根本不影响使用的压缩。在iPhone4S上也有同样的问题。1080p视频压缩到720p。有人知道iphone5上是否也会发生这种情况吗?有什么消息吗?我非常感谢用户在选择上传视频时不必等待压缩对话框。我同意。你最好的办法是向苹果公司提交一份雷达文件。一年后的今天,一切都没有改变——iOS 6仍然不允许直接导入媒体URL:@Answerbot我完全同意。我也试过其他的质量,但它根本不会影响结果。文件上说录像和转码的质量。
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
[library enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
if (group) {
// If you want, you can filter just pictures or videos
// I just need videos so I do this:
[group setAssetsFilter:[ALAssetsFilter allVideos]];
[group enumerateAssetsUsingBlock:^(ALAsset *asset, NSUInteger index, BOOL *stop){
if (asset){
// You can now add this ALAsset in your own video picker.
// Note that you can only access the ALAsset as long as
// you maintain a reference to the ALAssetsLibrary
// Or if you want to process the video, you can create an AVAsset:
NSURL *url = asset.defaultRepresentation.url;
AVAsset *videoAsset = [AVAsset assetWithURL:url];
}
}];
}
} failureBlock:^(NSError *error) {
NSLog(@"error enumerating AssetLibrary groups %@\n", error);
}];
picker.videoExportPreset = AVAssetExportPresetPassthrough