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 0x810429AAB
qui 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 è 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 .
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.
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 .
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 (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:
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ù.
è 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.
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.
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).
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
libavcodec
e alle libavformat
librerie 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