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


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

Ou seja: Qual é a diferença entre dizer algo é "MPEG-4" e dizer algo que usa o codec "DivX"? Por que o Windows Media Player às vezes é executado .mpg arquivos, e às vezes não?

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

  • Quicktime MOV
  • MPEG (1, 2, 3, 4)
  • WMV
  • FFmpeg
  • AVC
  • Xvid
  • DivX (como é diferente do seu palíndromo, Xvid?)
  • H.264

87


origem


Olhando para minha própria pergunta 6 anos depois e tudo o que posso pensar é "como você não sabe disso ?!" - Mehrdad


Respostas:


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 isso também é o que você geralmente abre em seu media player de sua preferência.
  • Um codificador particular (por exemplo, x264, libvpx) é responsável por transformar um fluxo de entrada em um fluxo de bits compatível com o codec. Geralmente, há vários codificadores para um codec específico.

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

O que é um codec?

UMA codec é a abreviação de codificador / decodificador, 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 especifique apenas a sintaxe do padrão. Por exemplo, eles dirão: "O formato bitstream tem que ser assim", "O 0x810429AAB aqui serão traduzidos para isso ", etc. Muitas vezes, eles fornecem um codificador e decodificador de referência, mas como um codificador é então escrito para corresponder completamente a esse formato é de responsabilidade dos fabricantes.

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

Um exemplo de caso - H.264

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

O simples fato de você poder otimizar a codificação faz 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.

Para resumir

Então, apesar de tudo, digamos que um codificador irá:

  • pegue 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á:

  • pegar esse bitstream 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

Nos dias de hoje, você provavelmente só encontrará vídeos codificados com os codecs que mencionarei abaixo. Curiosamente, quase todos deles foram criados pelo Grupo de Peritos em Cinema (MPEG). Mas existem alguns outros codecs livres 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. Isto aumenta a confusão, mas apenas saiba que "MPEG" por si só não significa nada, e. "Eu tenho um arquivo no formato MPEG" é muito ambíguo".

MPEG-2

O MPEG-2 é bem antigo. Seu primeiro lançamento público é de 1996. O vídeo MPEG-2 é usado principalmente para DVDs e transmissão de TV, por ex. DVB-T ou satélite, e aplicações legadas onde a compatibilidade é importante. Os vídeos MPEG-2 são encontrados principalmente em .MPG recipiente.

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 neste meio tempo. Ele oferece boa qualidade em tamanhos de arquivos práticos, o que significa que você pode gravar um filme inteiro de 90 minutos em um CD de 600 MB (ao passo que, com o MPEG-2, você precisaria de um DVD, veja minha resposta aqui). Não funciona muito bem para conteúdo HD ou 4K.

Alguns codificadores que enviam vídeos em MPEG-4 Parte 2 são DivX, sua cópia aberta XviDe Nero Digital.

MPEG-4 Parte 2 vídeos na maior parte vêm em um AVI recipiente, mas MP4 também é visto com frequência.

MPEG-4 Parte 10 / AVC / H.264

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

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

HEVC / H.265

Também chamado MPEG-H Part 2, este é o sucessor do MPEG-4 Part 10 / AVC / H.264. Destina-se a resoluções mais altas (até 8K) e pode oferecer um desempenho de codificação até 50% maior (em termos de qualidade vs. taxa de bits) em comparação com o H.264 (consulte este papel, 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 transmissões de IPTV ou de vídeo on-line. O HEVC também é usado pela Apple para armazenar vídeos e imagens HEIF) no iOS. No entanto, o fato de haver vários pools de patentes associados ao HEVC fez com que muitas empresas (quase todas, exceto a Apple) mudassem para alternativas isentas de royalties. HEVC também é não suportado nativamente por todos os navegadores, tornando-o inutilizável para streaming na Web.

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

VP9 e AV1

VP9 (o 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 HEVC, e às vezes até melhor este papel por Netflix). O VP9 é o que você ganha quando assiste ao YouTube em um navegador compatível.

O VP9 pode ser codificado com o libvpx codificador, e muitas vezes vem em WebM ou MKV containers.

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

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


O que é um formato (contêiner)?

Até agora só explicamos o "bitstream" bruto, que é basicamente apenas dados de vídeo realmente brutos. Você poderia realmente ir em frente 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 envolver o vídeo em um contêiner. Existem vários motivos pelos quais:

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

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

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

Vamos dar uma olhada em alguns contêineres populares.


Recipientes populares

Você encontrará vídeos principalmente envolvidos nos seguintes contêineres. Há outros menos populares também, mas como eu disse, principalmente, são esses:

AVI

Audio Video Interleave - este é o recipiente mais básico, está lá apenas para intercalar áudio e vídeo. Foi escrito em 1992 e ainda é usado hoje, mas considerado legado, então não use mais.

MP4

também é conhecido como MPEG-4 parte 14 e baseia-se no formato de arquivo do QuickTime. Este é o formato go-to para vídeo H.264, mas também envolve HEVC, MPEG-4 Part 2 e MPEG-2.

Esse contêiner também pode envolver somente áudio, e é por isso que você encontrará tantos arquivos .mp4 que não são vídeos, mas sim Codificado por AAC áudio, 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 aberto e gratuito que é frequentemente encontrado hoje em dia, já que suporta basicamente qualquer codec, do H.264 ao VP9, ​​e claro, também muitos codecs de áudio.

O WebM é baseado no MKV e é usado principalmente para vídeo VP9 e áudio Opus - ele é o recipiente preferido para streaming de vídeo da Web quando esses codecs são usados.

Ogg

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

FLV

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


Codecs e formatos populares

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

  • Quicktime MOV: .mov é a extensão do arquivo para o Formato de arquivo do QuickTime, que é um recipiente criado pela Apple. Este contêiner foi posteriormente adaptado para MP4. Pode transportar todos os tipos de codecs. Tempo rápido Na verdade, é uma estrutura de mídia inteira, ele realmente não especifica qualquer codec em si, tanto quanto eu estou preocupado.
  • MPEG (1, 2, 3, 4): Padrões definidos pelo Motion Picture Experts Group. Veja meu post acima para detalhes.
  • WMV: Windows Media Video. Na verdade é um codec embrulhado em um Formato de Sistemas Avançados recipiente, que usa o .wmv extensão novamente. Estranho, mas é assim que é.
  • FFmpeg: Isso não é nem 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 depende do código aberto libavcodec e libavformat bibliotecas para criar codecs e contêineres, respectivamente. A maioria das ferramentas de vídeo que você encontra hoje é baseada nela.
  • AVC: Sinônimo para MPEG-4 Part 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 o código aberto, versão gratuita do DivX, que, claro, levou a alguma controvérsia.
  • H.264: Sinônimo para MPEG-4 Part 10 ou AVC.

Em uma nota lateral:

Eu estou usando a terminologia correta?

Eu acho que uma vez preferiria usar especificamente "codec" e "container" em vez de "format" para evitar mal-entendidos. Um formato pode teoricamente ser qualquer coisa, porque ambos os codecs e containers especificam um formato (isto é, como os dados devem ser representados).

Dito isto, o FFmpeg terminologia seria usar "formato" para o contêiner. Isto também é devido à distinção entre:

  • libavcodec, a biblioteca para codificação / decodificação
  • libavformat, a biblioteca para os contêineres

134



Agora, isso é o que se pode chamar corretamente respondendo a uma pergunta. Bem feito. - Francesco
Ótima resposta, mas você perdeu o formato do contêiner Ogg. - Ignacio Vazquez-Abrams
Esta é a resposta mais incrível que eu já vi há algum tempo. Muito obrigado pelas ótimas explicações! :) - Mehrdad
@ Mehrdad Fico feliz que eu poderia lançar alguma luz sobre o assunto. Obrigado :) - slhck
Às vezes você gostaria de poder fazer vários upvotes em uma resposta :) - Dolf Andringa


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. maioria dos 'arquivos' você tem um tipo de arquivo baseado no container e não no codec

O FFmpeg não é nem 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 tocadores 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, quicktime é um codec.


3



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, bem como outras curiosidades como o Quicktime VR. - stib


existem codecareia containers (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 media players suporta vários tipos de codecs e contêineres. Isso é confuso, então eu sugiro que você leia minhas referências para mais informações


1





Um formato é o nome dado a um determinado tipo de formato de arquivo e tipo de compactação (a maioria do vídeo é compactado para manter o tamanho reduzido), e o codec é o que pode compactá-lo, lê-lo e traduzi-lo no vídeo que você vê descompactando-o . Em outras palavras, um é um tipo de arquivo, mas o outro é um software.

Geralmente nos referimos à maioria dos vídeos pelo nome do formato, portanto, 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 os mesmos e são um formato para codificação de vídeo HD.

DivX é um codec vendido comercialmente.

O Xvid é um codec para o MPEG-4.


-1



O ffmpeg é praticamente o backend para 99% dos conversores de software livre. - Journeyman Geek♦
Essa resposta está errada. De 7 frases apenas os números 6 e 7 estão corretos, mesmo aqueles com falta de detalhes. - jiggunjer