Algunas definiciones principales:
- Un códec (por ejemplo, H.264, HEVC, VP9) solo es responsable de la parte de video o audio, y uno o más códecs se pueden fusionar en un contenedor.
- Un contenedor (p. Ej., MP4, MKV) es responsable de mantenerlos juntos y esto también es lo que generalmente abre en el reproductor multimedia de su elección.
- Un codificador particular (p. Ej., X264, libvpx) es responsable de convertir un flujo de entrada en un flujo de bits compatible con el códec. A menudo hay múltiples codificadores para un códec particular.
Como puede ver, tendremos que explicar algunas cosas aquí.
¿Qué es un códec?
Un códec es la abreviatura de codificador / decodificador, lo que básicamente significa lo siguiente: los datos generados por un codificador siempre pueden ser decodificados por un decodificador apropiado. Esto es válido para video, audio, pero también podría pensar en criptografía (un codificador necesita un decodificador apropiado para mostrar un mensaje cifrado).
Hoy en día, cuando se especifica un códec de video, las instituciones que participan en él generalmente solo especifican la sintaxis del estándar. Por ejemplo, dirán: "El formato de flujo de bits debe ser así", "El 0x810429AAB
aquí se traducirá a eso", etc. A menudo suministran un codificador y decodificador de referencia, pero cómo se escribe un codificador para que coincida con tal formato completamente depende de los fabricantes.
Esta es la razón por la que encontrará tantos codificadores para el mismo códec, y algunos incluso comerciales.
Un ejemplo de caso: H.264
Antes de mezclar terminología, tomemos un ejemplo. Considere el caso de H.264 . El nombre del estándar es H.264, ese no es el nombre del codificador real. Mainconcept es un codificador comercial muy bueno, mientras que x264 es gratuito y de código abierto. Ambos afirman ofrecer buena calidad, por supuesto.
El mero hecho de que pueda optimizar la codificación hace que sea una competencia aquí. Ambos codificadores entregarán un flujo de bits estandarizado que siempre puede ser decodificado por un decodificador compatible con H.264.
Para resumir
Entonces, en general, digamos que un codificador:
- tomar fotogramas de video
- producir un flujo de bits válido
El flujo de bits se multiplexa en un contenedor.
El decodificador:
- tomar ese flujo de bits válido
- reconstruir los cuadros de video de ella
Ambos se ajustan a un estándar de códec. ¡Eso es todo!
Códecs actuales
En estos días, probablemente solo encontrará videos codificados con los códecs que mencionaré a continuación. Curiosamente, casi todos fueron creados por el Motion Picture Experts Group (MPEG). Pero también hay otros códecs libres de regalías, por ejemplo, los creados por Google o Alliance for Open Media, que compiten con los estándares MPEG.
Tenga en cuenta que "MPEG" puede referirse tanto a códecs como a contenedores, como verá a continuación. Esto se suma a la confusión, pero solo sé que "MPEG" por sí solo no significa nada, por ejemplo, "Tengo un archivo en formato MPEG" es muy ambiguo ".
MPEG-2 es bastante viejo. Su primer lanzamiento público es de 1996. El video MPEG-2 se usa principalmente para DVD y transmisión de TV, por ejemplo, DVB-T o satélite, y aplicaciones heredadas donde la compatibilidad es importante. Los videos MPEG-2 se encuentran principalmente en un contenedor .MPG .
Este es probablemente el que se usó principalmente para codificar videos para la web a mediados de la década de 2000, pero ha sido reemplazado mientras tanto. Ofrece buena calidad en tamaños de archivo prácticos, lo que significa que puede grabar una película completa de 90 minutos de duración en un CD de 600 MB (mientras que con MPEG-2 habría necesitado un DVD, vea mi respuesta aquí ). Ya no funciona tan bien para contenido HD o 4K.
Algunos codificadores que emiten video MPEG-4 Parte 2 son DivX , su estafa de código abierto XviD y Nero Digital .
Los videos MPEG-4 Parte 2 vienen principalmente en un contenedor AVI , pero MP4 también se ve a menudo.
Esto también se conoce como MPEG-4 Advanced Video Coding (AVC) o H.264 ; Es el códec más utilizado en la actualidad. Ofrece buena calidad en archivos de pequeño tamaño y, por lo tanto, es ideal para todo tipo de video para Internet o dispositivos móviles. Encontrará H.264 en casi todas las aplicaciones modernas, desde teléfonos hasta videocámaras. En discos Blu-ray, el video ahora está codificado en H.264.
Algunos codificadores son: x264 , NVENC (de NVIDIA), Mainconcept . La mayoría de los videos vienen en contenedores MP4 , MKV o MOV .
También llamado MPEG-H Parte 2, este es el sucesor de MPEG-4 Parte 10 / AVC / H.264. Está dirigido a resoluciones más altas (hasta 8K ) y puede ofrecer hasta un 50% más de rendimiento de codificación (en términos de calidad frente a bitrate) en comparación con H.264 (consulte este documento , por ejemplo).
El estándar se publicó en 2013 y, lentamente, el códec comienza a usarse cada vez más, por ejemplo, para IPTV o transmisiones de video en línea. HEVC también es utilizado por Apple para almacenar videos e imágenes (usando HEIF ) en iOS. Sin embargo, el hecho de que haya múltiples grupos de patentes asociados con HEVC ha hecho que muchas compañías (casi todas menos Apple) cambien a alternativas libres de regalías. HEVC tampoco es compatible de forma nativa con todos los navegadores, lo que lo hace inutilizable para la transmisión web.
El codificador más conocido es x265 . También hay NVENC . Los videos generalmente vienen en contenedores MP4 .
VP9 (el sucesor de VP8) es un códec desarrollado principalmente por Google. Es abierto y libre de regalías, y se implementa en muchos navegadores . Su calidad es casi tan buena como la HEVC y, a veces, incluso mejor (consulte este documento de Netflix). VP9 es lo que obtienes cuando ves YouTube en un navegador que lo admite.
VP9 puede codificarse con el codificador libvpx , y a menudo viene en contenedores WebM o MKV .
Algunas compañías se unieron para formar un competidor aún más fuerte para HEVC, pero como una alternativa libre de regalías. AV1 será el sucesor de VP9, y se basa en lo que se suponía que se convertiría en VP10. Está respaldado por la Alliance for Open Media (fundada por Amazon, Cisco, Google, Intel, Microsoft, Mozilla y Netflix). Lea más sobre esto aquí .
El codificador libaom se puede utilizar para generar flujos de bits AV1, pero aún es experimental.
¿Qué es un formato (contenedor)?
Hasta ahora solo hemos explicado el "flujo de bits" sin procesar, que básicamente es solo datos de video realmente sin procesar. En realidad, podría seguir adelante y ver el video usando un flujo de bits tan crudo. Pero en la mayoría de los casos eso no es suficiente o no es práctico.
Por lo tanto, debe envolver el video en un contenedor. Hay varias razones para ello:
- Tal vez quieras un poco de audio junto con el video
- Tal vez desee saltar a una cierta parte del video (como "ir a 1: 32: 20.12")
- Tanto el audio como el video deben estar perfectamente sincronizados
- Es posible que el video deba transmitirse a través de una red confiable y dividirse en paquetes antes
- El video incluso podría enviarse a través de una red con pérdida (como 3G) y dividirse en paquetes antes
Por todas esas razones, se inventaron formatos de contenedor, algunos simples, otros más avanzados. Lo que todos hacen es "envolver" el flujo de bits de video en otro flujo de bits.
Un contenedor sincronizará los cuadros de video y audio de acuerdo con su Sello de tiempo de presentación (PTS), lo que garantiza que se muestren exactamente al mismo tiempo. También se encargaría de agregar información para los servidores de transmisión, si es necesario, para que un servidor de transmisión sepa cuándo enviar qué parte del archivo.
Echemos un vistazo a algunos contenedores populares.
Contenedores populares
Encontrará videos envueltos principalmente en los siguientes contenedores. También hay otros menos populares, pero como dije, principalmente, son esos:
Audio Video Interleave: este es el contenedor más básico, solo está ahí para intercalar audio y video. Fue escrito en 1992 y todavía se usa hoy en día, pero se considera heredado, así que no lo use más.
también se conoce como MPEG-4 Parte 14 y se basa en el formato de archivo QuickTime. Este es el formato de referencia para video H.264, pero también envuelve HEVC, MPEG-4 Parte 2 y MPEG-2.
Este contenedor también puede envolver solo audio, por lo que encontrará tantos archivos .mp4 que no son videos sino audio codificado con AAC , también en archivos .m4a (solo una extensión diferente). La extensión .m4v generalmente se toma para flujos de bits de video.
Matroska Video (MKV) es un formato de archivo libre y de código abierto que a menudo se encuentra hoy en día, ya que admite básicamente cualquier códec, desde H.264 hasta VP9, y por supuesto también muchos códecs de audio.
WebM se basa en MKV y se usa principalmente para video VP9 y audio Opus: es el contenedor de elección para video de transmisión web cuando se usan estos códecs.
El contenedor Ogg es el contenedor elegido para el códec de video Theora (y el códec de audio Vorbis ), también creado por la Fundación Xiph.Org. También es gratuito y de código abierto (al igual que el códec).
Adobe creó el formato de video Flash para utilizarlo en sus aplicaciones de transmisión. Ya no se usa tanto, ya que la forma en que se realiza la transmisión ha cambiado significativamente en los últimos años.
Códecs y formatos populares
Además, ¿cuáles de los siguientes son códecs, cuáles son formatos de archivo y cuáles no?
- Quicktime MOV : .mov es la extensión de archivo para el Formato de archivo QuickTime , que es un contenedor creado por Apple. Este contenedor fue posteriormente adaptado para MP4. Puede transportar todo tipo de códecs. Quicktime es en realidad un marco de medios completo, realmente no especifica ningún códec en lo que a mí respecta.
- MPEG (1, 2, 3, 4) : estándares definidos por el Motion Picture Experts Group. Vea mi publicación anterior para más detalles.
- WMV : Windows Media Video. En realidad, es un códec envuelto en un contenedor de formato de sistemas avanzados , que utiliza la extensión .wmv nuevamente. Extraño, pero así son las cosas.
- FFmpeg : Esto no es un códec ni un contenedor. Es una biblioteca de herramientas de video que también permite la conversión entre diferentes códecs y contenedores. FFmpeg se basa en el código abierto
libavcodec
y las libavformat
bibliotecas para crear códecs y contenedores, respectivamente. La mayoría de las herramientas de video que encuentra hoy se basan en él.
- AVC : Sinónimo de MPEG-4 Parte 10 o H.264.
- DivX : Otro tipo de codificador para video MPEG-4 Parte 2.
- Xvid : Un tipo de codificador para video MPEG-4 Parte 2. Es solo la versión gratuita y de código abierto de DivX, lo que, por supuesto, generó cierta controversia.
- H.264 : Sinónimo de MPEG-4 Parte 10 o AVC.
En otros comentarios:
¿Estoy incluso usando la terminología correcta?
Supongo que una vez preferiría usar específicamente "códec" y "contenedor" en lugar de "formato" para evitar malentendidos. En teoría, un formato puede ser cualquier cosa, porque tanto los códecs como los contenedores especifican un formato (es decir, cómo se deben representar los datos).
Dicho esto, la terminología de FFmpeg sería usar "formato" para el contenedor. Esto también se debe a la distinción entre:
libavcodec
, la biblioteca para codificar / decodificar
libavformat
, la biblioteca para los contenedores