videos tamaño reducir prores perder para online comprimir calidad apple app iphone video compression uiimagepickercontroller movie

iphone - tamaño - ¿Evitar la compresión de video al seleccionar una película con UIImagePickerController?



comprimir videos online (5)

Estoy usando UIImagePickerController para permitir que mi usuario seleccione un video de la biblioteca de activos.

Cuando el usuario selecciona el botón "Elegir" en la segunda pantalla, la vista muestra una barra de progreso y un mensaje "Comprimiendo video ...".

¿Por qué está pasando esto?

¿Hay alguna manera de evitar esta operación de compresión?


A partir de iOS 11, puede especificar videoExportPreset y configurarlo en AVAssetExportPresetPassthrough :

picker.videoExportPreset = AVAssetExportPresetPassthrough

Sin embargo, esto seguirá mostrando la barra de progreso de "compresión", pero será mucho más rápido, especialmente para videos más pequeños.


Como todavía no hay manera de evitar la compresión con UIImagePickerController, quise incluir algunas ideas de cómo puede crear su propio selector de imagen que evitará la compresión.

Esto permitirá el acceso a los archivos de video en bruto:

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

Consulte la documentación de PhotoKit para acceder a las colecciones (momentos) y otras opciones.

Aquí hay una aplicación de muestra de Apple que utiliza PhotoKit que podría modificarse para que sea un selector de fotos: https://developer.apple.com/library/ios/samplecode/UsingPhotosFramework/Introduction/Intro.html

Aquí hay una biblioteca de selección de fotos en GitHub que usa PhotoKit que parece prometedora, ya que le brinda los objetos de PHAsset para todas las imágenes / videos seleccionados: https://github.com/guillermomuntaner/GMImagePicker

iOS 7 y más abajo

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


Establezca la propiedad videoQuality del UIImagePickerController en "High" (UIImagePickerControllerQualityTypeHigh = 0)

En la documentación del SDK: "Si se muestra una película grabada en el selector de imágenes, se especifica que no desea reducir la calidad de video de la película".

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


Respuesta: Actualmente no hay forma de controlar cómo UIImagePickerController comprime el video seleccionado.

Acabo de hacer algunas pruebas rápidas. Usando una aplicación de prueba que creé, elegí el mismo video dos veces, una vez con la propiedad videoQuality establecida en UIImagePickerControllerQualityTypeHigh y una vez con la misma configurada en UIImagePickerControllerQualityTypeLow . Los archivos resultantes que se copiaron son exactamente del mismo tamaño, 15.1MB con un tamaño de marco de 360x480. El original era de 72.5MB con un tamaño de marco de 480x640. Al parecer, esta propiedad no afecta a la compresión utilizada en absoluto.


Para aquellos que dan consejos sobre el uso de la propiedad videoQuality, la documentación indica claramente que es una opción de captura de video, no una opción de selección.

Como Jack lo menciona a continuación, también es para transcodificar. Parece que leí el documento demasiado rápido porque no noté la mención de transcodificación.