Este artículo está dirigido a lectores que sufren del estrecho campo de visión de los iPhones a partir del iPhone 4 y a programadores que ofrecen cualquier tipo de grabación de video en sus aplicaciones.
Como ya sabrá, los iDevices recientes utilizan la estabilización de imagen durante la grabación de video. Desafortunadamente, ni siquiera el último y mejor iPhone 5 tiene estabilización óptica, solo electrónica, a diferencia del Nokia Lumia 92x. Esto, desafortunadamente, significa que parte del sensor se usa para la estabilización en sí, lo que reduce aún más el campo de visión (FOV) ya limitado. Te recomiendo que mires engadget’s Vídeos de iPhone 5 frente a Nokia Lumia 920 para que pueda ver cuán inmensamente mejor es la estabilización óptica.
Si usa la aplicación de cámara incorporada de Apple, siempre usará la estabilización de imagen y no se puede desactivar, incluso si no la necesita cuando, por ejemplo, graba videos desde un trípode. Esto significa que reservará innecesariamente el 10 por ciento externo de píxeles del sensor para la estabilización de imagen en ambas dimensiones. Déjame mostrarte dos fotogramas de video directos que muestran la diferencia:
(Está habilitado. Como ocurre con la mayoría de las imágenes de este artículo, haga clic para ver la versión original).
(Está deshabilitado. Tenga en cuenta que en ambas dimensiones, muestra un área un 10 por ciento más grande).
Ambas capturas de fotogramas se toman de secuencias de video grabadas por mi propio cliente de grabadora de video de código abierto (ver más abajo) exactamente desde la misma posición de la cámara. En consecuencia, muestran la diferencia entre los dos modos (que, generalmente, difieren en un solo parámetro) de manera confiable.
1.1 ¿Qué se podría hacer para ampliar el campo de visión?
1.1.1 Sobremuestreo completo del sensor en dispositivos JB’n
Si usted es un viejo lector mío, puede recordar que he escrito sobremuestreadores de sensores completos (el último está AQUÍ) para los tres modelos de iPhone que sufren de campo de visión estrecho. Sin embargo, todos requieren jailbreak, que se ha vuelto bastante complicado (y, en muchos casos, francamente imposible) con el 4S y el 5. Además, el sobremuestreo del sensor simplemente no puede ofrecer una velocidad de fotogramas tan alta como el método sin sobremuestreo. Desafortunadamente, incluso el último iPhone 5 tiene un sensor de sobremuestreo bastante lento (este no es un Nokia PureView 808 con su sensor y circuitos asociados casi en un orden de magnitud más rápido, no en lo más mínimo), lo que significa la velocidad de fotogramas máxima que puede tener al el sobremuestreo es de alrededor de 20 fotogramas por segundo (fps).
Este enfoque se puede utilizar incluso en dispositivos iOS 4. Después de todo, mi primer ajuste de jailbreak para ampliar el FOV se dirigió al iPhone 4 a finales de 2010, es decir, todavía en iOS 4 veces.
1.1.2 Uso de modos de video 4: 3 de baja resolución
Si no puede hacer jailbreak o no puede soportar la velocidad de fotogramas relativamente baja, usar un modo de resolución más baja en una aplicación de terceros puede brindarle FOV significativamente más amplios. Por ejemplo, en el iPhone 5, los modos 192×144, 480x 360 y 640x 480, todos los de 4: 3, utilizan toda la superficie del sensor, ofreciendo el mayor campo de visión posible. Sin embargo, ni siquiera los modos de baja resolución ofrecen un campo de visión tan amplio: 352x 288 es, por ejemplo, uno de los más estrechos: solo el modo 720p60 en iOS7 es más estrecho. Además, todos los modos 16: 9 (960 x 540, 1280 x 720, 1920 x 1080) utilizan un campo de visión más estrecho en comparación con el ancho del sensor, incluso sin utilizar IS.
Permítame mostrarle el FOV que se puede lograr al grabar en imágenes de 480x 360 en el iPhone 5 (donde esta resolución es utilizada por la AVCaptureSession Preestablecido “AVCaptureSessionPresetMedio”):
Como puede ver, tiene más píxeles en los lados que incluso el framegrab Full HD que no es IS, y mucho menos el IS, no solo verticalmente (lo cual es evidente dada su relación de aspecto de 4: 3, mientras que los videos Full HD tienen el relativamente proporción más corta de 16: 9), sino también horizontalmente. Es decir, no espere que el Full HD / 720p que no es IS utilice todos los píxeles horizontales disponibles. Sin embargo, el modo sin IS sigue siendo un gran paso adelante, hacia un campo de visión significativamente más amplio.
Por cierto, 480x 360 usa toda la superficie del sensor, como también se puede probar fácilmente comparándolo con una toma fija, como la siguiente:
Como puede ver, las dos tomas (una captura de fotogramas del metraje de video de 480x 360 y una verdadera toma fija) son completamente idénticas, en cuanto a FOV.
Este enfoque es, al igual que con mi ajuste de sobremuestreo de sensor completo, utilizable en dispositivos iOS4 y posteriores.
1.1.3 iOS 6+: deshabilitar la estabilización de imagen
Otra solución que solo estuvo disponible en iOS 6 es usar una grabadora de video de terceros que no usa IS. Entonces, no sufrirás la baja velocidad de fotogramas (mi ajuste completo del sensor de sobremuestreo) o la baja resolución (máxima 640×480). Desafortunadamente, como ya se mencionó, no puede deshabilitar IS en la aplicación de cámara estándar, ni siquiera en iOS7; de ahí la necesidad de una aplicación de terceros.
Como las dos primeras soluciones (1.1.1, 1.1.2) ya se han discutido ampliamente en mis artículos anteriores dedicados, solo explico la última: deshabilitar IS. Examino hacer esto con aplicaciones de AppStore de terceros y, al presentarle una cámara de video completamente funcional, su propio programa. Empecemos por el primero.
2. Aplicaciones de videocámaras de terceros
A partir del 23 de junio, una aplicación, FiLMiC Pro ($ 4,99) le permite habilitar y deshabilitar IS de forma dinámica. Si desea hacer esto con frecuencia mientras permanece en la misma aplicación, realmente desea investigar esta aplicación. Si no necesita IS en absoluto, debe consultar la Sección 2.2 a continuación, que enumera varias alternativas más económicas. Tenga en cuenta que también he enumerado algunas otras aplicaciones de cámara populares de la App Store.
2.1 Aplicaciones en las que puede activar y desactivar la estabilización de imagen
FiLMiC Pro (nota: graba en 1080p24 e IS está deshabilitado por defecto)
La deshabilitación / habilitación de IS se realiza en Configuración (anotado por mí):
2.2 IS está deshabilitado (está apagado todo el tiempo)
Cámara impresionante (libre) por SmugMug 1.1.4
Cámara King (libre)
BetterCam (libre)
2.3 IS no se puede desactivar (está encendido todo el tiempo)
Videocámara Pro 3 ($ 0,99) por Game Lingo (Nota: también tiene modos SD (VGA) y LP (480 * 360))
Cámara Plus (libre) (Nota: de forma predeterminada, utiliza su modo de grabación filtrado y de baja resolución. La grabación Full HD solo está disponible después de cambiar a la cámara “Predeterminada” en Configuración> Vídeos)
2.4 Sin grabación de video en absoluto
Cámara + ($ 1.99)
2.5 Graba solo a 720p (no hay grabación Full HD disponible)
SloPro (libre)
Ahora, dirijamos nuestra atención a escribiendo aplicaciones que no usan IS y, en consecuencia, brindan a los usuarios un campo de visión significativamente más amplio. (Pero, de nuevo, ¡no tan ancho como mis herramientas exclusivas de JB!)
3. Desactivación de la estabilización de imagen en su propio código
Si es un desarrollador, en comparación, puede implementar fácilmente una videocámara con IS desactivado. En realidad, al crear cualquier tipo de cámara grabadora basada en AVFoundation, por defecto, IS está deshabilitado.
Además, si ya tiene una aplicación de videocámara en la App Store, considere agregarle este interruptor para atender a los clientes que requieran cualquiera de los dos modos. Es muy fácil de hacer y recordar mediante programación: iOS realiza la estabilización de imagen real, no necesita hacer nada para estabilizar el video. Desafortunadamente, hasta ahora, muy pocos desarrolladores han hecho esto; como se puede ver claramente en la lista anterior, solo FiLMiC Pro admite el cambio.
Todos los modos de grabación 16: 9 (¡pero ni uno solo 4: 3!) Admiten la estabilización de imagen electrónica.
Es / deshabilitar IS es muy simple:
videoConnection.enablesVideoStabilizationWhenAvailable =
dónde
–
– AVCaptureConnection * videoConnection es inicializado por [fo connectionWithMediaType:AVMediaTypeVideo];, dónde
– fo es una salida de captura; por ejemplo, [[AVCaptureMovieFileOutput alloc] en eso], dónde
– el objetivo ruta de archivo está configurado y la grabación comenzó con [self.fo startRecordingToOutputFileURL:fileURL recordingDelegate:self];.
Nota:
1. si desea saber de antemano si un modo de video dado es compatible con IS o no, actualmente, [AVCaptureConnection isVideoStabilizationEnabled] siempre vuelve SÍ para los modos sin capacidad IS (4: 3). Habilitación de IS en no habilitado para IS AVCaptureDeviceFormat (iOS7 +) / AVCaptureConnection (todas las versiones de iOS) aunque no causa ningún problema. Mejor uso AVCaptureDevice.activeFormat.isVideoStabilizationSupported en cambio, si desea consultar de forma dinámica y sencilla si un modo de vídeo determinado es compatible con IS.
2. cambiar el modo IS mediante AVCaptureConnection.enablesVideoStabilizationWhenAvailable =
3. la habilitación de IS puede realizarse en cualquier momento; es decir, incluso antes de establecer AVCaptureDevice.activeFormat (en iOS7 +) o AVCaptureSession.sessionPreset (en todas las versiones de iOS).
3.1 Una aplicación de ejemplo con código fuente completo
Creé un proyecto de Xcode que demuestra todo esto. Está disponible para descargar AQUÍ y se ejecuta en todos los iDevices iOS 6/7. (Pero no los anteriores, como lo fue con iOS 6, que iOS recibió IS modificable).
No tiene GUI (quería que el código fuente fuera lo más conciso posible), lo que significa que uso el inicio predefinido (justo al inicio del programa) y la detención (establecido por DisableISVideoRecViewController.REC_TIME) veces. Por supuesto, querrá conectar el inicio y la parada de la grabación a los componentes de la GUI. Ya separé el código a cargo de iniciar / detener en dos métodos separados, DisableISVideoRecViewController.startVideoRecording y stopRec, respectivamente. Querrá conectar estos métodos a sus devoluciones de llamada de GUI.
De lo contrario, el código es muy sencillo. En DisableISVideoRecViewController.viewDidLoad, Creo un AVCaptureSession e inmediatamente llenarlo con una entrada de cámara de video (si existe), AVCaptureDevice * videoDevice. Luego, creo una vista previa de pantalla (AVCaptureVideoPreviewLayer) y agréguelo a la vista actual como una subvista. En el paso 4, creo un AVCaptureMovieFileOutput objetivo. Aquí, no empiezo a grabar todavía, ya que verifico dinámicamente la existencia de nombres de archivo anteriores y continúo con el índice de postfix de nombre de archivo que no se usó antes.
Puede hacer esto último usando en el ya mencionado “startVideoRecording”Método. Antes de encontrar el primer nombre de archivo indexado que no existe, también invoco el “enableIS”Método personalizado, que habilita IS. (Nuevamente, al usar Fundación AV para la grabación de video desde aplicaciones de terceros, IS no está habilitado de manera predeterminada). Actualmente, está comentado. Querrá volver a comentarlo para que pueda ver la diferencia en el campo de visión entre los dos modos (habilitado y deshabilitado para IS).
Al final de startVideoRecording, Configuré un temporizador para detener la grabación después REC_TIME segundos. Nuevamente, querrá conectar el “stopRec”Método a un componente GUI.