Che cos'è un codec (ad es. DivX?) E in cosa differisce da un formato di file (ad es. MPG)?


95

Sono così confuso ... qual è la differenza tra un codec audio / video (che apparentemente è una scorciatoia per "codificatore / decodificatore", un po 'come "modem" in realtà è "modulatore / demodulatore") e un audio / formato video?
(Sto anche usando la terminologia corretta?)

cioè: Qual è la differenza tra dire qualcosa è "MPEG-4" e dire qualcosa usa il codec "DivX"? Perché a volte Windows Media Player esegue .mpgfile e talvolta no?

Inoltre, quali dei seguenti sono codec, quali sono i formati di file e quali no?

  • MOV Quicktime
  • MPEG (1, 2, 3, 4)
  • WMV
  • FFmpeg
  • AVC
  • Xvid
  • DivX (in cosa differisce dal suo palindromo, Xvid?)
  • H.264

2
Esaminando la mia domanda 6 anni dopo e tutto ciò che posso pensare è "come non lo sai ?!"
Mehrdad,

1
Siamo partiti tutti da qualche parte. ;)
Hashim

Risposte:


146

Alcune definizioni principali:

  • Un codec (ad es. H.264, HEVC, VP9) è responsabile solo della parte video o audio e uno o più codec possono essere uniti in un contenitore.
  • Un container (ad es. MP4, MKV) è responsabile per tenerli insieme e questo è anche ciò che di solito si apre nel lettore multimediale preferito.
  • Un codificatore particolare (ad esempio, x264, libvpx) è responsabile della trasformazione di un flusso di input in un flusso di bit conforme al codec. Esistono spesso più codificatori per un particolare codec.

Come puoi vedere, dovremo spiegare alcune cose qui.

Che cos'è un codec?

Un codec è l'abbreviazione di encoder / decoder, che in pratica significa semplicemente quanto segue: I dati generati da un encoder possono sempre essere decodificati da un decoder appropriato. Questo sembra essere valido per video, audio, ma potresti anche pensare alla crittografia (un codificatore ha bisogno di un decodificatore appropriato per visualizzare un messaggio crittografato).

Al giorno d'oggi, quando viene specificato un codec video, le istituzioni che vi prendono parte di solito specificano solo la sintassi dello standard. Ad esempio, diranno: "Il formato bitstream deve essere così", "Il 0x810429AABqui verrà tradotto in quello", ecc. Spesso forniscono un codificatore e un decodificatore di riferimento, ma come un codificatore viene quindi scritto per corrispondere a tale il formato è completamente a carico dei produttori.

Questo è il motivo per cui troverai così tanti codificatori per lo stesso codec e alcuni anche commerciali.

Un esempio di caso: H.264

Prima di confondere la terminologia, facciamo un esempio. Considera il caso di H.264 . Il nome dello standard è H.264 - non è il nome dell'encoder effettivo. Mainconcept è un ottimo codificatore commerciale, mentre x264 è un codificatore gratuito e open source. Entrambi affermano di offrire una buona qualità, ovviamente.

Il semplice fatto che è possibile ottimizzare la codifica rende qui una competizione. Entrambi gli encoder forniranno un bitstream standardizzato che può sempre essere decodificato da un decoder conforme a H.264.

Riassumere

Quindi, tutto sommato, diciamo solo che un encoder:

  • prendere fotogrammi video
  • produce un bitstream valido

Il flusso di bit viene quindi multiplexato in un contenitore.

Il decodificatore dovrà:

  • prendi quel bitstream valido
  • ricostruire i fotogrammi video da esso

Entrambi sono conformi a uno standard di codec. È tutto!


Codec attuali

In questi giorni, probabilmente troverai solo video codificati con i codec che citerò di seguito. È interessante notare che quasi tutti sono stati creati dal Motion Picture Experts Group (MPEG). Ma ci sono anche altri codec esenti da royalty, ad esempio quelli creati da Google o da Alliance for Open Media, che sono in concorrenza con gli standard MPEG.

Nota che "MPEG" può riferirsi sia a codec che a container, come vedrai di seguito. Questo aggiunge confusione, ma sappi solo che "MPEG" da solo non significa nulla, ad esempio "Ho un file in formato MPEG" è molto ambiguo ".

MPEG-2

MPEG-2 è piuttosto vecchio. La sua prima uscita pubblica è del 1996. Il video MPEG-2 viene utilizzato principalmente per la trasmissione di DVD e TV, ad esempio DVB-T o satellite, e applicazioni legacy in cui la compatibilità è importante. I video MPEG-2 si trovano principalmente in un contenitore .MPG .

MPEG-4 Parte 2

Questo è probabilmente quello che è stato usato principalmente per codificare video per il web a metà degli anni 2000, ma nel frattempo è stato sostituito. Offre una buona qualità con file di dimensioni pratiche, il che significa che potresti masterizzare un intero film di 90 minuti su un CD da 600 MB (mentre con MPEG-2 avresti avuto bisogno di un DVD, vedi la mia risposta qui ). Non funziona più così bene per i contenuti HD o 4K.

Alcuni codificatori che producono video MPEG-4 Part 2 sono DivX , il suo ripoff open source XviD e Nero Digital .

I video MPEG-4 Part 2 arrivano principalmente in un contenitore AVI , ma anche MP4 viene visto spesso.

MPEG-4 parte 10 / AVC / H.264

Questo è anche noto come MPEG-4 Advanced Video Coding (AVC) o H.264 ; è il codec più utilizzato oggi. Offre una buona qualità a file di piccole dimensioni ed è quindi perfettamente adatto a tutti i tipi di video per Internet o dispositivi mobili. Troverai H.264 in quasi tutte le applicazioni moderne, dai telefoni alle videocamere. Sui dischi Blu-ray, il video è ora codificato in H.264.

Alcuni encoder per questo sono: x264 , NVENC (da NVIDIA), Mainconcept . I video vengono principalmente in contenitori MP4 , MKV o MOV .

HEVC / H.265

Chiamato anche MPEG-H Part 2, questo è il successore di MPEG-4 Part 10 / AVC / H.264. Si rivolge a risoluzioni più elevate (fino a 8 KB ) e può offrire prestazioni di codifica fino al 50% più elevate (in termini di qualità vs. bitrate) rispetto a H.264 (vedere questo documento , ad esempio).

Lo standard è stato pubblicato nel 2013 e lentamente il codec sta iniziando a essere sempre più utilizzato, ad esempio per IPTV o trasmissioni video online. HEVC è anche usato da Apple per archiviare video e immagini (usando HEIF ) su iOS. Tuttavia, il fatto che ci siano più pool di brevetti associati a HEVC ha molte aziende (quasi tutte tranne Apple) che si spostano verso alternative esenti da royalty. HEVC non è inoltre supportato nativamente da tutti i browser, il che lo rende inutilizzabile per lo streaming web.

L'encoder più noto è x265 . C'è anche NVENC . I video di solito vengono in contenitori MP4 .

VP9 e AV1

VP9 (il successore di VP8) è un codec sviluppato principalmente da Google. È aperto e privo di royalty e implementato in molti browser . La sua qualità è quasi buona come HEVC, e talvolta anche migliore (vedi questo articolo di Netflix). VP9 è ciò che ottieni quando guardi YouTube su un browser che lo supporta.

VP9 può essere codificato con l' encoder libvpx e spesso viene fornito in contenitori WebM o MKV .

Alcune aziende si sono unite per formare un concorrente ancora più forte di HEVC, ma come alternativa esente da royalty. AV1 sarà il successore di VP9 e si basa su quello che doveva diventare VP10. È supportato da Alliance for Open Media (fondato da Amazon, Cisco, Google, Intel, Microsoft, Mozilla e Netflix). Leggi di più qui .

L' encoder libaom può essere utilizzato per generare flussi di bit AV1, ma è ancora sperimentale.


Che cos'è un formato (contenitore)?

Fino ad ora abbiamo spiegato solo il "bitstream" non elaborato, che è fondamentalmente solo dati video non elaborati. Potresti davvero andare avanti e guardare il video usando un bitstream così grezzo. Ma nella maggior parte dei casi non è abbastanza o non pratico.

Pertanto, è necessario avvolgere il video in un contenitore. Ci sono diversi motivi per cui:

  • Forse vuoi un po 'di audio insieme al video
  • Forse vuoi saltare ad una certa parte del video (come "vai a 1: 32: 20.12")
  • Sia l'audio che il video devono essere perfettamente sincronizzati
  • Il video potrebbe dover essere trasmesso su una rete affidabile e suddiviso in pacchetti prima
  • Il video potrebbe anche essere inviato su una rete con perdite (come 3G) e suddiviso in pacchetti prima

Per tutte queste ragioni, sono stati inventati i formati dei container, alcuni semplici, altri più avanzati. Quello che fanno tutti è "avvolgere" il bitstream del video in un altro bitstream.

Un contenitore sincronizzerà i frame video e audio in base al loro timestamp di presentazione (PTS), il che assicura che vengano visualizzati esattamente allo stesso tempo. Si occuperebbe anche di aggiungere informazioni per i server di streaming, se necessario, in modo che un server di streaming sappia quando inviare quale parte del file.

Diamo un'occhiata ad alcuni contenitori popolari.


Contenitori popolari

Troverai video per lo più avvolti nei seguenti contenitori. Ce ne sono anche altri meno popolari, ma come ho detto, soprattutto, sono quelli:

AVI

Audio Video Interleave: questo è il contenitore più semplice, è lì solo per intercalare audio e video. È stato scritto nel 1992 ed è ancora usato oggi, ma considerato eredità, quindi non usarlo più.

MP4

è anche noto come MPEG-4 Part 14 e si basa sul formato di file QuickTime. Questo è il formato ideale per i video H.264, ma include anche HEVC, MPEG-4 Part 2 e MPEG-2.

Questo contenitore potrebbe anche avvolgere solo l'audio, motivo per cui troverai così tanti file .mp4 che non sono video ma piuttosto audio con codifica AAC , anche in file .m4a (solo un'estensione diversa). L'estensione .m4v viene generalmente utilizzata per i flussi di bit video.

MKV e WebM

Matroska Video (MKV) è un formato di file open source e gratuito che si trova spesso al giorno d'oggi, poiché supporta praticamente qualsiasi codec, da H.264 a VP9, ​​e ovviamente anche molti codec audio.

WebM è basato su MKV ed è utilizzato principalmente per video VP9 e audio Opus: è il contenitore preferito per i video streaming web quando vengono utilizzati questi codec.

Ogg

Il contenitore Ogg è il contenitore di scelta per il codec video Theora (e per il codec audio Vorbis ), anch'esso creato dalla Xiph.Org Foundation. È anche gratuito e open source (proprio come il codec).

FLV

Il formato video Flash è stato creato da Adobe, per l'uso nelle loro applicazioni di streaming. Non viene più utilizzato molto, poiché il modo in cui viene eseguito lo streaming è cambiato in modo significativo negli ultimi anni.


Codec e formati popolari

Inoltre, quali dei seguenti sono codec, quali sono i formati di file e quali no?

  • Quicktime MOV : .mov è l'estensione di file per il formato di file QuickTime , che è un contenitore creato da Apple. Questo contenitore è stato successivamente adattato per MP4. Può trasportare tutti i tipi di codec. Quicktime è in realtà un intero framework multimediale, in realtà non specifica alcun codec per quanto mi riguarda.
  • MPEG (1, 2, 3, 4) : standard definiti dal Motion Picture Experts Group. Vedi il mio post sopra per i dettagli.
  • WMV : Windows Media Video. In realtà è un codec racchiuso in un contenitore Advanced Systems Format , che utilizza nuovamente l'estensione .wmv . Strano, ma è così.
  • FFmpeg : questo non è né un codec né un contenitore. È una libreria di strumenti video che consente anche la conversione tra diversi codec e container. FFmpeg si affida all'open source libavcodece alle libavformatlibrerie per la creazione di codec e container, rispettivamente. La maggior parte degli strumenti video che trovi oggi sono basati su di esso.
  • AVC : sinonimo di MPEG-4 parte 10 o H.264.
  • DivX : un altro tipo di codificatore per video MPEG-4 parte 2.
  • Xvid : un tipo di encoder per video MPEG-4 parte 2. È solo la versione open source e gratuita di DivX, che ovviamente ha portato a qualche controversia.
  • H.264 : Sinonimo di MPEG-4 Parte 10 o AVC.

In una nota a margine:

Sto anche usando la terminologia corretta?

Immagino che una volta preferirei usare specificamente "codec" e "container" anziché "format" per evitare equivoci. Un formato può teoricamente essere qualsiasi cosa, perché sia ​​i codec che i contenitori specificano un formato (cioè come dovrebbero essere rappresentati i dati).

Detto questo, la terminologia di FFmpeg consisterebbe nell'utilizzare il "formato" per il contenitore. Ciò è dovuto anche alla distinzione tra:

  • libavcodec, la libreria per la codifica / decodifica
  • libavformat, la libreria per i contenitori

33
Ora, questo è ciò che si può giustamente chiamare per rispondere a una domanda. Molto bene.
Francesco,

1
Ottima risposta, ma ti sei perso il formato contenitore Ogg.
Ignacio Vazquez-Abrams,

7
Questa è la risposta più fantastica che abbia mai visto. Grazie mille per le ottime spiegazioni! :)
Mehrdad,

@Mehrdad Sono contento di aver potuto far luce sul soggetto. Grazie :)
slhck,

1
A volte vorresti poter fare più voti su una risposta :)
Dolf Andringa,

3

In generale un "formato" multimediale è in realtà un contenitore, contenente un flusso audio (di alcuni codec audio) e un flusso video (di alcuni codec video) e talvolta informazioni aggiuntive. la maggior parte dei 'file' hai un tipo di file basato sul contenitore e non sul codec

FFmpeg non è né un contenitore né un codec: è una suite versatile di librerie, codec e software per la conversione di file che sta alla base di molti convertitori e lettori musicali.

H.264 / AVC e xvid / divx sono codec

AVI (quali file divx / xvid sono), mp4, mpeg sono contenitori.

Non sono sicuro di quicktime mov - .mov è un contenitore, quicktime è un codec.


Non esiste un codec "Quicktime". Quicktime è un framework multimediale, incluso il contenitore .mov, il software per codificare, decodificare e visualizzare una gamma di codec, nonché altre curiosità come Quicktime VR.
Stib

1

ci sono codec e container (formati di file). Il codec descrive come i dati vengono codificati / decodificati. L'altro descrive come i dati codificati sono collocati all'interno del file.

La maggior parte dei lettori multimediali supporta più tipi di codec e container. Questo è confuso, quindi ti suggerisco di leggere i miei riferimenti per ulteriori informazioni


-1

Un formato è il nome dato a un particolare tipo di formato di file e tipo di compressione (la maggior parte dei video è compressa per mantenere le dimensioni ridotte), e il codec è ciò che può effettivamente comprimerlo, leggerlo e tradurlo nel video che vedi decomprimendolo . In altre parole, uno è un tipo di file, ma l'altro è un software.

Di solito ci riferiamo alla maggior parte dei video con il nome del formato, quindi Quicktime MOV, MPEG e WMV sono formati.

FFmpeg (non ne avevo mai sentito parlare) sembra essere il nome di un software per convertire vari formati in altri formati.

AVC e H.264 sono uguali e sono un formato per la codifica di video HD.

DivX è un codec commercialmente venduto.

Xvid è un codec per MPEG-4.


1
ffmpeg è praticamente il backend per il 99% dei convertitori FOSS.
Journeyman Geek

Questa risposta è sbagliata Su 7 frasi solo i numeri 6 e 7 sono corretti, anche quelli mancano di dettagli.
jiggunjer,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.