【问题标题】:Avoid Video Compression when Selecting Movie with UIImagePickerController?使用 UIImagePickerController 选择电影时避免视频压缩?
【发布时间】:2011-03-10 16:46:59
【问题描述】:

我正在使用 UIImagePickerController 允许我的用户从资源库中选择视频。

当用户在第二个屏幕上选择“选择”按钮时,视图会显示一个进度条和“正在压缩视频...”消息。

为什么会这样?

有什么方法可以避免这种压缩操作吗?

【问题讨论】:

  • 仍然没有找到解决方案。有人有什么想法吗?
  • 看看我下面的答案。开发人员似乎无法影响压缩。
  • Avalanchis -- 这是 2 年前回答的。可以接受吗?
  • 我遇到了同样的问题。有谁知道是否有另一种方法可以在不使用 UIImagePickerController 的情况下导入视频 - 以避免压缩?

标签: iphone video compression uiimagepickercontroller movie


【解决方案1】:

Answer: 目前没有办法控制 UIImagePickerController 如何压缩选取的视频。

我刚刚做了一些快速测试。使用我创建的测试应用程序,我选择了两次相同的视频——一次将videoQuality 属性设置为UIImagePickerControllerQualityTypeHigh,一次将其设置为UIImagePickerControllerQualityTypeLow。复制的结果文件大小完全相同,为 15.1MB,帧大小为 360x480。原始大小为 72.5MB,帧大小为 480x640。显然这个属性根本不影响使用的压缩。

【讨论】:

  • 有这方面的消息吗?非常感谢用户在选择要上传的视频时不必等待“压缩”对话框。
  • 我同意。最好的办法是向 Apple 提交雷达。
  • 好吧,现在已经一年过去了,一切都没有改变 - iOS 6 仍然不允许直接导入媒体 URL :(
  • @Answerbot 我完全同意。我也尝试了其他品质,完全不影响结果。
【解决方案2】:

将 UIImagePickerController 的 videoQuality 属性设置为“High”(UIImagePickerControllerQualityTypeHigh = 0)

来自 SDK 文档: “如果在图像选择器中显示录制的电影,请指定您不想降低电影的视频质量。”

http://developer.apple.com/iphone/library/documentation/uikit/reference/UIImagePickerController_Class/UIImagePickerController/UIImagePickerController.html#//apple_ref/doc/c_ref/UIImagePickerControllerQualityType

【讨论】:

  • 看起来在 iPhone 4 上,即使设置为“高”,它仍然会压缩,但质量比默认值要好得多。我可以理解为什么它们会以“高”压缩,因为原始 720p 视频的编码速度超过 10 Mbit/秒!
  • 我也有类似的发现,即使将其设置为“高”也会导致一些压缩(以及“压缩视频”对话框)。
  • 在UIImagePickerControllerQualityTypeHigh 的文档中,最后一行说:“如果在图像选择器中显示录制的电影,请指定您不想降低电影的视频质量。”。这似乎表明,对于选择视频(而不是录制),此属性会影响它们在图像选择器的编辑屏幕中的显示方式。
  • 我刚刚做了一些快速测试。我选择了两次相同的视频——一次使用 QualityTypeHigh,一次使用 QualityTypeLow。复制的结果文件大小完全相同,为 15.1MB,帧大小为 360x480,而原始文件为 72.5MB,帧大小为 480x640。显然,此属性根本不会影响使用的压缩。
  • 在 iPhone 4S 上遇到同样的问题。 1080p 视频压缩为 720p。有谁知道这是否也发生在 iPhone 5 上?
【解决方案3】:

由于目前还没有办法避免使用 UIImagePickerController 进行压缩,因此我想提供一些关于如何创建自己的图像选择器来避免压缩的想法。

这将允许访问原始视频文件:

iOS 8

PHFetchResult *assetsFetchResult = [PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeVideo options:nil];
for (PHAsset *asset in assetsFetchResult) {
    PHVideoRequestOptions *videoRequestOptions = [[PHVideoRequestOptions alloc] init];
    videoRequestOptions.version = PHVideoRequestOptionsVersionOriginal;

    [[PHImageManager defaultManager] requestAVAssetForVideo:asset options:videoRequestOptions resultHandler:^(AVAsset *asset, AVAudioMix *audioMix, NSDictionary *info) {
        // the AVAsset object represents the original video file
    }];
}

查看 PhotoKit 文档以访问集合(时刻)和其他选项。

这是一个来自 Apple 的示例应用,它使用 PhotoKit,可以修改为照片选择器:https://developer.apple.com/library/ios/samplecode/UsingPhotosFramework/Introduction/Intro.html

这是 GitHub 上的一个照片选择器库,它使用 PhotoKit,看起来很有前途,因为它为您提供了所有选定图像/视频的 PHAsset 对象:https://github.com/guillermomuntaner/GMImagePicker

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);
}];

【讨论】:

    【解决方案4】:

    从 iOS 11 开始,您可以指定 videoExportPreset 并将其设置为 AVAssetExportPresetPassthrough:

    picker.videoExportPreset = AVAssetExportPresetPassthrough
    

    这仍然会显示“压缩”进度条,但速度会快得多,尤其是对于较小的视频。

    【讨论】:

      【解决方案5】:

      对于那些建议使用 videoQuality 属性的人,文档清楚地说明它是一个视频捕获选项,而不是一个选择器选项。

      正如杰克在下面提到的,它也是用于转码的。看起来我读文档太快了,因为我没有注意到转码提及。

      【讨论】:

      • 文档说“视频录制和转码质量。”
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多