O que é um codec (por exemplo, DivX?) E como ele difere de um formato de arquivo (por exemplo, MPG)?

95

Estou tão confuso ... qual é a diferença entre um codec de áudio / vídeo (que aparentemente é uma abreviação de "codificador / decodificador", tipo como "modem" é realmente "modulador / demodulador") e um áudio / formato de vídeo?
(Estou usando a terminologia correta?)

ie: Qual é a diferença entre dizer algo é "MPEG-4" e dizer que algo usa o codec "DivX"? Por que o Windows Media Player às vezes executa .mpgarquivos e outras não?

Além disso, quais dos seguintes são codecs, quais são os formatos de arquivo e quais não são?

  • Quicktime MOV
  • MPEG (1, 2, 3, 4)
  • WMV
  • FFmpeg
  • AVC
  • Xvid
  • DivX (como é diferente de seu palíndromo, Xvid?)
  • H.264
Mehrdad
fonte
2
Olhando para a minha própria pergunta 6 anos depois e tudo o que consigo pensar é "como você não sabe disso ?!"
Mehrdad
1
Todos nós começamos de algum lugar. ;)
Hashim

Respostas:

146

Algumas definições principais:

  • Um codec (por exemplo, H.264, HEVC, VP9) é responsável apenas pela parte de vídeo ou áudio, e um ou mais codecs podem ser mesclados em um contêiner.
  • Um contêiner (por exemplo, MP4, MKV) é responsável por mantê-los juntos e também é isso que você costuma abrir no seu media player preferido.
  • Um codificador específico (por exemplo, x264, libvpx) é responsável por transformar um fluxo de entrada em um fluxo de bits compatível com codec. Geralmente, existem vários codificadores para um codec específico.

Como você pode ver, teremos que explicar algumas coisas aqui.

O que é um codec?

Um codec é a abreviação de codificador / decodificador, o que basicamente significa apenas o seguinte: Os dados gerados por um codificador sempre podem ser decodificados por um decodificador apropriado. Isso é válido para vídeo, áudio, mas você também pode pensar em criptografia (um codificador precisa de um decodificador apropriado para exibir uma mensagem criptografada).

Atualmente, quando um codec de vídeo é especificado, as instituições que participam dele geralmente especificam apenas a sintaxe do padrão. Por exemplo, eles dirão: "O formato de fluxo de bits deve ser assim", "O 0x810429AABaqui será traduzido para isso", etc. Muitas vezes, eles fornecem um codificador e decodificador de referência, mas como um codificador é então escrito para corresponder a tal formato completamente depende dos fabricantes.

Esta é a razão pela qual você encontrará tantos codificadores para o mesmo codec, e alguns deles até comerciais.

Um exemplo de caso - H.264

Antes de misturarmos a terminologia, vamos dar um exemplo. Considere o caso do H.264 . O nome do padrão é H.264 - esse não é o nome do codificador real. O Mainconcept é um codificador comercial muito bom, enquanto o x264 é um código livre e de código aberto. Ambos pretendem oferecer boa qualidade, é claro.

O simples fato de que você pode otimizar a codificação cria uma competição aqui. Ambos os codificadores fornecerão um fluxo de bits padronizado que sempre pode ser decodificado por um decodificador compatível com H.264.

Resumir

Então, em suma, digamos que um codificador irá:

  • tirar quadros de vídeo
  • produzir um fluxo de bits válido

O fluxo de bits é então multiplexado em um contêiner.

O decodificador irá:

  • pegue esse fluxo de bits válido
  • reconstruir os quadros de vídeo a partir dele

Ambos estão em conformidade com um padrão de codec. Isso é tudo!


Codecs atuais

Atualmente, você provavelmente encontrará apenas vídeos codificados com os codecs que mencionarei abaixo. Curiosamente, quase todos eles foram criados pelo Motion Picture Experts Group (MPEG). Mas existem outros codecs isentos de royalties, por exemplo, aqueles criados pelo Google ou pela Alliance for Open Media, que são concorrentes dos padrões MPEG.

Observe que "MPEG" pode se referir a codecs e contêineres, como você verá abaixo. Isso aumenta a confusão, mas saiba que apenas "MPEG" não significa nada, por exemplo, "Eu tenho um arquivo no formato MPEG" é muito ambíguo ".

MPEG-2

MPEG-2 é bastante antigo. Seu primeiro lançamento público é de 1996. O vídeo MPEG-2 é usado principalmente para transmissão de DVDs e TV, por exemplo, DVB-T ou satélite, e aplicativos legados em que a compatibilidade é importante. Os vídeos MPEG-2 são encontrados principalmente em um contêiner .MPG .

MPEG-4 Parte 2

Este é provavelmente o que foi usado principalmente para codificar vídeos para a web em meados dos anos 2000, mas foi substituído nesse meio tempo. Ele oferece boa qualidade em tamanhos de arquivo práticos, o que significa que você pode gravar um filme inteiro de 90 minutos em um CD de 600 MB (enquanto que com o MPEG-2 você precisaria de um DVD, veja minha resposta aqui ). Não funciona mais tão bem para conteúdo HD ou 4K.

Alguns codificadores que emitem vídeo MPEG-4 Parte 2 são o DivX , seu ripoff de fonte aberta XviD e o Nero Digital .

Os vídeos MPEG-4 Parte 2 geralmente vêm em um contêiner AVI , mas o MP4 também é visto com frequência.

MPEG-4 Parte 10 / AVC / H.264

Isso também é conhecido como MPEG-4 Advanced Video Coding (AVC) ou H.264 ; hoje é o codec mais usado. Ele oferece boa qualidade em arquivos pequenos e, portanto, é perfeitamente adequado para todos os tipos de vídeo na Internet ou em dispositivos móveis. Você encontrará o H.264 em quase todas as aplicações modernas, de telefones a filmadoras. Nos discos Blu-ray, o vídeo agora é codificado no H.264.

Alguns codificadores são: x264 , NVENC (da NVIDIA), Mainconcept . Os vídeos vêm principalmente em contêineres MP4 , MKV ou MOV .

HEVC / H.265

Também chamado MPEG-H Part 2, este é o sucessor do MPEG-4 Part 10 / AVC / H.264. Ele tem como objetivo resoluções mais altas (até 8K ) e pode oferecer desempenho de codificação até 50% mais alto (em termos de qualidade vs. taxa de bits) em comparação com o H.264 (consulte este documento , por exemplo).

O padrão foi publicado em 2013 e, lentamente, o codec está começando a ser usado cada vez mais, por exemplo, para IPTV ou transmissão de vídeo online. O HEVC também é usado pela Apple para armazenar vídeos e imagens (usando HEIF ) no iOS. No entanto, o fato de haver vários pools de patentes associados ao HEVC faz com que muitas empresas (quase todas, exceto a Apple) mudem para alternativas livres de royalties. O HEVC também não é suportado nativamente por todos os navegadores, tornando-o inutilizável para transmissão na Web.

O codificador mais conhecido é x265 . Há também o NVENC . Os vídeos geralmente vêm em contêineres MP4 .

VP9 e AV1

O VP9 (sucessor do VP8) é um codec desenvolvido principalmente pelo Google. É aberto e livre de royalties e implementado em muitos navegadores . Sua qualidade é quase tão boa quanto a HEVC e às vezes até melhor (veja este artigo da Netflix). VP9 é o que você obtém quando assiste ao YouTube em um navegador compatível.

O VP9 pode ser codificado com o codificador libvpx e geralmente é fornecido em contêineres WebM ou MKV .

Algumas empresas se uniram para formar um concorrente ainda mais forte do HEVC - mas como uma alternativa livre de royalties. O AV1 será o sucessor do VP9 e é baseado no que deveria ser o VP10. É apoiado pela Alliance for Open Media (fundada pela Amazon, Cisco, Google, Intel, Microsoft, Mozilla e Netflix). Leia mais sobre isso aqui .

O codificador libaom pode ser usado para gerar fluxos de bits AV1, mas ainda é experimental.


O que é um formato (contêiner)?

Até agora, apenas explicamos o "fluxo de bits" bruto, que é basicamente apenas dados de vídeo realmente brutos. Você pode realmente assistir e assistir ao vídeo usando um fluxo de bits tão bruto. Mas na maioria dos casos isso não é suficiente ou não é prático.

Portanto, você precisa agrupar o vídeo em um contêiner. Existem várias razões pelas quais:

  • Talvez você queira um pouco de áudio junto com o vídeo
  • Talvez você queira pular para uma determinada parte do vídeo (como "vá para 1: 32: 20.12")
  • Tanto o áudio quanto o vídeo devem estar perfeitamente sincronizados
  • Talvez o vídeo precise ser transmitido por uma rede confiável e dividido em pacotes antes de
  • O vídeo pode até ser enviado por uma rede com perdas (como 3G) e dividido em pacotes antes

Por todas essas razões, os formatos de contêiner foram inventados, alguns simples, outros mais avançados. O que todos eles fazem é "agrupar" o fluxo de bits do vídeo em outro fluxo de bits.

Um contêiner sincronizará os quadros de vídeo e áudio de acordo com o PTS ( Presentation Time Stamp ), o que garante que eles sejam exibidos exatamente ao mesmo tempo. Também se encarregaria de adicionar informações para servidores de streaming, se necessário, para que um servidor saiba quando enviar qual parte do arquivo.

Vamos dar uma olhada em alguns contêineres populares.


Contentores populares

Você encontrará vídeos embalados principalmente nos seguintes recipientes. Existem outros menos populares também, mas como eu disse, são principalmente:

AVI

Intercalação de áudio e vídeo - este é o contêiner mais básico, existe apenas para intercalar áudio e vídeo. Foi escrito em 1992 e ainda é usado hoje, mas considerado legado, portanto, não o use mais.

MP4

também é conhecido como MPEG-4 Parte 14 e é baseado no formato de arquivo do QuickTime. Este é o formato para vídeo H.264, mas também envolve HEVC, MPEG-4 Parte 2 e MPEG-2.

Esse contêiner também pode incluir apenas áudio, e é por isso que você encontrará tantos arquivos .mp4 que não são vídeos, mas áudio codificado em AAC , também em arquivos .m4a (apenas uma extensão diferente). A extensão .m4v geralmente é usada para fluxos de bits de vídeo.

MKV e WebM

O Matroska Video (MKV) é um formato de arquivo gratuito e de código aberto que é frequentemente encontrado atualmente, pois suporta basicamente qualquer codec, do H.264 ao VP9, ​​e, é claro, também muitos codecs de áudio.

O WebM é baseado em MKV e é usado principalmente para vídeo VP9 e áudio Opus - é o contêiner de escolha para streaming de vídeo na Web quando esses codecs são usados.

Ogg

O contêiner Ogg é o contêiner de escolha para o codec de vídeo Theora (e o codec de áudio Vorbis ), também criado pela Xiph.Org Foundation. Também é gratuito e de código aberto (assim como o codec).

FLV

O formato de vídeo em Flash foi criado pela Adobe, para uso em seus aplicativos de streaming. Não é mais usado muito, pois a maneira como a transmissão é feita mudou significativamente nos últimos anos.


Codecs e formatos populares

Além disso, quais dos seguintes são codecs, quais são os formatos de arquivo e quais não são?

  • Quicktime MOV : .mov é a extensão de arquivo para o QuickTime File Format , que é um contêiner criado pela Apple. Este contêiner foi posteriormente adaptado para MP4. Pode transportar todos os tipos de codecs. O Quicktime é na verdade uma estrutura de mídia inteira, na verdade, não especifica nenhum codec em si, no que me diz respeito.
  • MPEG (1, 2, 3, 4) : Padrões definidos pelo Motion Picture Experts Group. Veja meu post acima para obter detalhes.
  • WMV : Vídeo do Windows Media. Na verdade, é um codec envolvido em um contêiner Advanced Systems Format , que usa a extensão .wmv novamente. Estranho, mas é assim que as coisas são.
  • FFmpeg : Este não é um codec nem um contêiner. É uma biblioteca de ferramentas de vídeo que também permite a conversão entre diferentes codecs e contêineres. O FFmpeg conta com o código aberto libavcodece as libavformatbibliotecas para criar codecs e contêineres, respectivamente. A maioria das ferramentas de vídeo que você encontra hoje se baseia nela.
  • AVC : Sinônimo para MPEG-4 Parte 10 ou H.264.
  • DivX : Outro tipo de codificador para vídeo MPEG-4 Parte 2.
  • Xvid : Um tipo de codificador para vídeo MPEG-4 Parte 2. É apenas a versão gratuita e de código aberto do DivX, o que obviamente levou a alguma controvérsia.
  • H.264 : Sinônimo para MPEG-4 Part 10 ou AVC.

Em uma nota lateral:

Estou usando a terminologia correta?

Eu acho que uma vez preferiria usar especificamente "codec" e "container" em vez de "format" para evitar mal-entendidos. Teoricamente, um formato pode ser qualquer coisa, porque codecs e contêineres especificam um formato (ou seja, como os dados devem ser representados).

Dito isto, a terminologia do FFmpeg seria usar "formato" para o contêiner. Isso também se deve à distinção entre:

  • libavcodec, a biblioteca para codificação / decodificação
  • libavformat, a biblioteca para os contêineres
slhck
fonte
33
Agora, é isso que se pode chamar com razão de responder a uma pergunta. Bem feito.
Francesco
1
Ótima resposta, mas você perdeu o formato do contêiner Ogg.
Ignacio Vazquez-Abrams
7
Esta é a resposta mais impressionante que já vi há algum tempo. Muito obrigado pelas ótimas explicações! :)
Mehrdad 23/06
@Mehrdad Ainda bem que pude lançar alguma luz sobre o assunto. Obrigado :)
slhck 23/06
1
Às vezes, você gostaria de fazer várias upvotes em uma resposta :)
Dolf Andringa
3

Em geral, um 'formato' de mídia é realmente um contêiner, contendo um fluxo de áudio (de algum codec de áudio) e um fluxo de vídeo (de algum codec de vídeo) e, às vezes, informações adicionais. Na maioria dos arquivos, você tem um tipo de arquivo baseado no contêiner e não no codec

O FFmpeg não é um contêiner nem um codec - é um conjunto versátil de bibliotecas, codecs e software para conversão de arquivos subjacentes a muitos conversores e players de música.

H.264 / AVC e xvid / divx são codecs

AVI (que são arquivos divx / xvid), mp4, mpeg são contêineres.

Não tenho certeza sobre o quicktime mov - .mov é um contêiner, o quicktime é um codec.

Journeyman Geek
fonte
Não há codec "Quicktime". O Quicktime é uma estrutura multimídia, incluindo o contêiner .mov, software para codificação, decodificação e exibição de uma variedade de codecs, além de outras curiosidades, como o Quicktime VR.
STIB
1

existem codecs e contêineres (formatos de arquivo). O codec descreve como os dados são codificados / decodificados. O outro descreve como os dados codificados são colocados dentro do arquivo.

A maioria dos players de mídia suporta vários tipos de codec e contêiner. Isso é confuso, então sugiro que você leia minhas referências para obter mais informações

uSlackr
fonte
-1

Um formato é o nome dado a um tipo específico de formato de arquivo e tipo de compactação (a maioria dos vídeos é compactada para manter o tamanho baixo), e o codec é o que pode realmente comprimir, ler e traduzir no vídeo que você vê descompactando-o . Em outras palavras, um é do tipo arquivo, mas o outro é um software.

Geralmente, nos referimos à maioria dos vídeos com o nome do formato, portanto, o Quicktime MOV, MPEG e WMV são formatos.

FFmpeg (eu nunca tinha ouvido falar disso) parece ser o nome de um software para converter vários formatos em outros formatos.

AVC e H.264 são iguais e são um formato para codificação de vídeo HD.

DivX é um codec vendido comercialmente.

Xvid é um codec para MPEG-4.

KCotreau
fonte
1
O ffmpeg é praticamente o back-end para 99% dos conversores FOSS.
Journeyman Geek
Esta resposta está errada. Das 7 frases, apenas os números 6 e 7 estão corretos, mesmo os que não possuem detalhes.
jiggunjer