¿Qué es un códec (por ejemplo, DivX?) Y en qué se diferencia de un formato de archivo (por ejemplo, MPG)?

95

Estoy tan confundido ... ¿cuál es la diferencia entre un códec de audio / video (que aparentemente es una abreviatura de "codificador / decodificador", algo así como "módem" es realmente "modulador / demodulador") y un audio / ¿formato de video?
(¿Estoy incluso usando la terminología correcta?)

es decir: ¿Cuál es la diferencia entre decir que algo es "MPEG-4" y decir que algo usa el códec "DivX"? ¿Por qué el Reproductor de Windows Media a veces ejecuta .mpgarchivos y otras no?

Además, ¿cuáles de los siguientes son códecs, cuáles son formatos de archivo y cuáles no?

  • Quicktime MOV
  • MPEG (1, 2, 3, 4)
  • WMV
  • FFmpeg
  • AVC
  • Xvid
  • DivX (¿en qué se diferencia de su palíndromo, Xvid?)
  • H.264
Mehrdad
fuente
2
Mirando mi propia pregunta 6 años después y todo lo que puedo pensar es "¿cómo no sabes esto?"
Mehrdad
1
Todos empezamos desde algún lado. ;)
Hashim

Respuestas:

146

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 0x810429AABaquí 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

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 .

MPEG-4 Parte 2

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.

MPEG-4 Parte 10 / AVC / H.264

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 .

HEVC / H.265

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 y AV1

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:

AVI

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.

MP4

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.

MKV y WebM

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.

Ogg

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).

FLV

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 libavcodecy las libavformatbibliotecas 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
slhck
fuente
33
Ahora, eso es lo que se puede llamar acertadamente respondiendo una pregunta. Bien hecho.
Francesco
1
Gran respuesta, pero te perdiste el formato contenedor Ogg.
Ignacio Vazquez-Abrams
77
Esta es la respuesta más increíble que he visto en mucho tiempo. Muchas gracias por las excelentes explicaciones! :)
Mehrdad
@Mehrdad Me alegra haber podido arrojar algo de luz sobre el tema. Gracias :)
slhck
1
A veces desearías poder hacer múltiples votos a favor en una respuesta :)
Dolf Andringa
3

En general, un 'formato' de medios es realmente un contenedor, que contiene una transmisión de audio (de algún códec de audio) y una transmisión de video (de algún códec de video) y, a veces, información adicional. la mayoría de los 'archivos' que tiene tienen un tipo de archivo basado en contenedor y no en códec

FFmpeg no es un contenedor ni un códec: es un conjunto versátil de bibliotecas, códecs y software para la conversión de archivos que subyace a muchos convertidores y reproductores de música.

H.264 / AVC y xvid / divx son códecs

AVI (que son archivos divx / xvid), mp4, mpeg son contenedores.

No estoy seguro acerca de quicktime mov: .mov es un contenedor, quicktime es un códec.

Journeyman Geek
fuente
No hay códec "Quicktime". Quicktime es un marco multimedia que incluye el contenedor .mov, software para codificar, decodificar y mostrar una variedad de códecs, así como otras curiosidades como Quicktime VR.
stib
1

Hay códecs y contenedores (formatos de archivo). El códec describe cómo se codifican / decodifican los datos. El otro describe cómo se colocan los datos codificados dentro del archivo.

La mayoría de los reproductores multimedia admiten múltiples códecs y tipos de contenedores. Esto es confuso, por lo que le sugiero que lea mis referencias para obtener más información.

uSlackr
fuente
-1

Un formato es el nombre dado a un tipo de formato de archivo y tipo de compresión en particular (la mayoría del video se comprime para mantener el tamaño bajo), y el códec es lo que realmente puede comprimirlo, leerlo y traducirlo al video que ve descomprimiéndolo . En otras palabras, uno es un tipo de archivo, pero el otro es una pieza de software.

Por lo general, nos referimos a la mayoría de los videos por el nombre del formato, por lo que Quicktime MOV, MPEG y WMV son formatos.

FFmpeg (nunca había oído hablar de esto) parece ser el nombre de un software para convertir varios formatos a otros formatos.

AVC y H.264 son iguales, y son un formato para codificar video HD.

DivX es un códec comercialmente vendido.

Xvid es un códec para MPEG-4.

KCotreau
fuente
1
ffmpeg es prácticamente el backend para el 99% de los convertidores FOSS.
Journeyman Geek
Esta respuesta es incorrecta. De las 7 oraciones, solo los números 6 y 7 son correctos, incluso los que carecen de detalles.
jiggunjer