Motion JPEG ( M-JPEG o MJPEG ) es un formato de compresión de vídeo en el que cada fotograma de vídeo o campo entrelazado de una secuencia de vídeo digital se comprime por separado como una imagen JPEG .
Motion JPEG, desarrollado originalmente para aplicaciones multimedia para PC, cuenta con un amplio soporte de cliente: la mayoría de los navegadores y reproductores web más importantes ofrecen soporte nativo y hay complementos disponibles para el resto. Entre los programas y dispositivos que utilizan el estándar M-JPEG se incluyen reproductores multimedia, consolas de juegos, cámaras digitales, cámaras IP, cámaras web, servidores de transmisión, cámaras de vídeo y editores de vídeo no lineales. [ cita requerida ]
Motion JPEG se desarrolló originalmente para aplicaciones multimedia de PC. [ cita requerida ]
Las primeras implementaciones de MJPEG se implementaron generalmente en hardware. C-Cube fue uno de los primeros en proponerlo con su códec JPEG CL550, que se utilizó en varias implementaciones de hardware. Se anunció [1] que el NeXTdimension de NeXT se distribuiría con un CL550 integrado para implementar MJPEG. Sin embargo, esto se archivó más tarde y no se incluyó en el producto final que se envió. [2]
Apple proporcionó una implementación de software de MJPEG en su QuickTime Player a mediados de la década de 1990. [3]
M-JPEG es un esquema de compresión intracuadro únicamente (en comparación con la técnica de predicción intercuadro , que requiere un mayor esfuerzo computacional ). Mientras que los formatos de video intercuadro modernos, como MPEG1 , MPEG2 y H.264/MPEG-4 AVC , logran relaciones de compresión reales de 1:50 o mejores, la falta de predicción intercuadro de M-JPEG limita su eficiencia a 1:20 o menos, dependiendo de la tolerancia a los artefactos espaciales en la salida comprimida. Debido a que los cuadros se comprimen independientemente unos de otros, M-JPEG impone menores requisitos de procesamiento y memoria en los dispositivos de hardware.
Como un esquema de compresión puramente intraframe, la calidad de imagen de M-JPEG es directamente una función de la complejidad estática (espacial) de cada fotograma de vídeo. Los fotogramas con transiciones grandes y suaves o superficies monótonas se comprimen bien y es más probable que mantengan sus detalles originales con pocos artefactos de compresión visibles. Los fotogramas que muestran texturas complejas, curvas y líneas finas (como la escritura en un periódico) son propensos a mostrar artefactos de transformada de coseno discreta (DCT) como zumbido , borrones y macrobloqueo . El vídeo comprimido con M-JPEG también es insensible a la complejidad del movimiento, es decir, la variación a lo largo del tiempo. No se ve obstaculizado por el movimiento altamente aleatorio (como la turbulencia de la superficie del agua en una gran cascada), ni ayudado por la ausencia de movimiento (como un paisaje estático filmado con un trípode), que son dos extremos opuestos que se utilizan comúnmente para probar formatos de vídeo entre fotogramas.
Para los formatos QuickTime , Apple ha definido dos tipos de codificación: MJPEG-A y MJPEG-B. MJPEG-B ya no conserva archivos de intercambio JPEG válidos en su interior, por lo que no es posible convertir un fotograma en un archivo JPEG sin modificar ligeramente los encabezados.
El formato JPEG es ineficiente, ya que utiliza más bits para ofrecer una calidad similar, en comparación con formatos más modernos (como JPEG 2000 y H.264/MPEG-4 AVC ). Desde el desarrollo del estándar JPEG original a principios de los años 90, se han realizado mejoras tecnológicas no solo en el formato JPEG, sino también en los esquemas de compresión entre cuadros posibles.
Motion JPEG es fácil de implementar porque utiliza un estándar de compresión maduro (JPEG) con bibliotecas bien desarrolladas y es un método de compresión intracuadro. [ cita requerida ]
Tolera cambios rápidos de movimiento en el flujo de video, mientras que los esquemas de compresión que utilizan compresión entre cuadros a menudo pueden experimentar una pérdida de calidad inaceptable cuando el contenido del video cambia significativamente entre cada cuadro. [ cita requerida ]
Se requiere un hardware mínimo porque no requiere un uso intensivo de recursos computacionales. [ cita requerida ]
A diferencia de los formatos de vídeo especificados en estándares internacionales como MPEG-2 y el formato especificado en el estándar de codificación de imágenes fijas JPEG, no existe ningún documento que defina un único formato exacto que sea universalmente reconocido como una especificación completa de “Motion JPEG” para su uso en todos los contextos. Esto plantea problemas de compatibilidad sobre las salidas de archivos de diferentes fabricantes. Sin embargo, cada formato de archivo en particular suele tener algún estándar sobre cómo se codifica M-JPEG. Por ejemplo, Microsoft documenta su formato estándar para almacenar M-JPEG en archivos AVI, [4] Apple documenta cómo se almacena M-JPEG en archivos QuickTime, RFC 2435 describe cómo se implementa M-JPEG en una secuencia RTP y se planea un CodecID M-JPEG para el formato de archivo Matroska . [5]
Actualmente, el formato M-JPEG se utiliza en dispositivos de captura de vídeo, como cámaras digitales , cámaras IP y cámaras web , así como en sistemas de edición de vídeo no lineal . Es compatible de forma nativa con QuickTime Player, la consola PlayStation y navegadores web como Safari , Google Chrome , Mozilla Firefox y Microsoft Edge .
El formato M-JPEG se utiliza con frecuencia en sistemas de edición de vídeo no lineal . Las CPU de escritorio modernas son lo suficientemente potentes como para trabajar con vídeo de alta definición, por lo que no se necesita ningún hardware especial y, a su vez, ofrecen acceso aleatorio nativo a cualquier fotograma.
La consola de juegos PlayStation integra hardware de descompresión similar al M-JPEG para secuencias FMV en el juego , mientras que la consola de juegos portátil PlayStation Portable puede reproducir M-JPEG desde Memory Stick Pro Duo con la extensión .avi con una resolución de 480x272. Ambas pueden grabar clips en M-JPEG con su cámara Go!Cam .
La consola de juegos Wii de Nintendo , así como la InnoTab de VTech , pueden reproducir vídeos codificados en formato M-JPEG en una tarjeta SD mediante su canal de fotos . Los reproductores de audio digitales SanDisk Sansa e200 y Zen V reproducen vídeos cortos en formato M-JPEG. Las recientes actualizaciones de firmware de la Nintendo 3DS ahora pueden grabar y reproducir archivos codificados en formato M-JPEG "3D-AVI", que es el mismo formato que se utiliza en la serie Fujifilm FinePix Real 3D , desde una tarjeta SD con una resolución de 320x240, siempre que la duración del vídeo sea de 10 minutos o menos.
Antes de la aparición de la codificación MPEG-4 en los dispositivos de consumo, se utilizó ampliamente una forma de escaneo progresivo de M-JPEG en los modos de "película" de las cámaras digitales, lo que permitía codificar y reproducir videos a través del hardware de compresión JPEG integrado con solo una modificación de software. La calidad resultante sigue siendo inferior en comparación con un MPEG de tamaño similar, en particular porque el sonido (cuando se incluía) era PCM sin comprimir y se grababa a una frecuencia de muestreo baja o ADPCM de baja compresión y baja demanda de procesador .
Para mantener bajo control el tamaño de los archivos y las velocidades de transferencia, los tamaños y las velocidades de los fotogramas, junto con las velocidades de muestreo del sonido, se mantienen relativamente bajos con niveles muy altos de compresión para cada fotograma individual. Las resoluciones de 160×120 o 320×240 son tamaños comunes, normalmente a 10, 12 o 15 fotogramas por segundo, con una calidad de imagen equivalente a una configuración JPEG de "50" con sonido ADPCM mono muestreado a ~8 kHz. Esto da como resultado una salida de vídeo muy básica, pero útil, con un coste de almacenamiento similar al MPEG (velocidad de vídeo de ~120 kB/s, audio de ~8 kB/s, o aproximadamente 1 Mbit/s a una resolución de 320×240), pero con una sobrecarga de procesamiento mínima. Este vídeo se almacena normalmente en archivos contenedores AVI de Microsoft o QuickTime Movie de Apple . Estos archivos se pueden ver de forma nativa en la mayoría de los sistemas operativos, sin embargo, a veces se debe instalar un códec adicional.
El formato de vídeo AMV , común en los reproductores "MP4" baratos, es una versión modificada de M-JPEG.
Además de los reproductores portátiles (que son principalmente "consumidores" de vídeo), muchas cámaras digitales con capacidad de vídeo utilizan M-JPEG para la captura de vídeo. Por ejemplo:
Muchas cámaras con conexión a red proporcionan transmisiones M-JPEG a las que los clientes de red pueden conectarse. Los navegadores basados en Mozilla y Webkit tienen compatibilidad nativa para ver estas transmisiones M-JPEG.
Algunas cámaras con conexión a red proporcionan sus propias interfaces M-JPEG como parte del conjunto de funciones normal. En el caso de las cámaras que no ofrecen esta función de forma nativa, se puede utilizar un servidor para transcodificar las imágenes de la cámara en una secuencia M-JPEG y luego proporcionar esa secuencia a otros clientes de la red.
Apple anunció el 1 de septiembre de 2010 que su versión más nueva del Apple TV soportaría M-JPEG hasta 35 Mbit/s, 1280 por 720 píxeles, 30 cuadros por segundo, audio en μlaw, audio estéreo PCM en formato de archivo .avi.
Ciertos reproductores multimedia como el Netgear NeoTV 550 no admiten la reproducción de M-JPEG.
La transmisión HTTP separa cada imagen en respuestas HTTP individuales en un marcador específico. La transmisión HTTP crea paquetes de una secuencia de imágenes JPEG que pueden ser recibidas por clientes como QuickTime o VLC .
En respuesta a una solicitud GET de un archivo o flujo MJPEG, el servidor transmite la secuencia de fotogramas JPEG a través de HTTP . Un tipo de contenido de tipo MIME especial multipart/x-mixed-replace;boundary=<boundary-name> informa al cliente que debe esperar varias partes (fotogramas) como respuesta delimitadas por <boundary-name>. Este nombre de límite se revela expresamente dentro de la propia declaración de tipo MIME. La conexión TCP no se cierra mientras el cliente desee recibir nuevos fotogramas y el servidor desee proporcionar nuevos fotogramas. Dos implementaciones básicas de un servidor de transmisión M-JPEG son cambozola y MJPG-Streamer . El servidor ffmpeg-server, más robusto , también proporciona compatibilidad con transmisión M-JPEG.
El soporte nativo de los navegadores web incluye: Safari , Google Chrome , Microsoft Edge [8] y Firefox . [9] Otros navegadores, como Internet Explorer, pueden mostrar secuencias M-JPEG con la ayuda de complementos externos. Cambozola es una aplicación que puede mostrar secuencias M-JPEG en navegadores habilitados para Java. M-JPEG también es compatible de forma nativa con PlayStation y QuickTime. Lo más común es que M-JPEG se use en cámaras de seguridad basadas en IP. [10]
Se pueden encontrar mejoras tecnológicas en los diseños de H.263v2 Anexo I y MPEG-4 Parte 2 , que utilizan predicción en el dominio de la frecuencia de los valores de los coeficientes de transformación, y en H.264/MPEG-4 AVC , que utilizan técnicas de predicción espacial y tamaño de bloque de transformación adaptativo. También hay una codificación de entropía más sofisticada que la que era práctica cuando se desarrolló el primer diseño JPEG. Todos estos nuevos desarrollos hacen que M-JPEG sea un mecanismo de grabación ineficiente.