Successivo

Magazine

Video digitale: tutti i segreti

Nicola Martello | 28 Febbraio 2017

Preview

  Ammettiamolo, la creazione di video a livello consumer non è così semplice come gli appassionati vorrebbero. I parametri con […]

 

Ammettiamolo, la creazione di video a livello consumer non è così semplice come gli appassionati vorrebbero. I parametri con cui destreggiarsi sono diversi, ma probabilmente l’aspetto peggiore è la giungla dei formati video. Per riuscire a districarsi in questa giungla è necessario conoscere abbastanza bene la materia, a cominciare dalle caratteristiche dei codec e dei container. Già  su questi due termini c’è parecchia confusione, dato che molti li ritengono equivalenti, addirittura sinonimi. In realtà  non è così. Un codec, contrazione dell’espressione inglese enCOder/DECoder, è un insieme di algoritmi per la compressione e la successiva decompressione di dati digitali. Un container è invece, come dice il termine stesso inglese, un contenitore, un file che nella sua forma più completa ospita una varietà  di elementi: uno o più flussi video e audio, testi, immagini, capitoli, menu interattivi, informazioni sulla sincronizzazione, metadati in genere.

di Nicola Martello

ICON_EDICOLAPer codificare i video digitali, nel corso degli anni sono stati sviluppati numerosi tipi di codec, perché la mole di dati di un flusso video non compresso è elevatissima, assolutamente ingestibile se non si dispone di una workstation professionale per il video, figuriamoci in streaming da Internet con una connessione via cavo o wireless. Facendo qualche semplice conto, è facile definire la dimensione di un film lungo 90 minuti, Full Hd (1.920 x 1.080 pixel), a 24 fotogrammi al secondo, con una codifica di 8 bit per ogni colore primario Rgb. Si arriva alla bellezza di 751 Gbyte con un bit rate di ben 142 Mbyte al secondo, cifre notevoli anche senza considerare i bit necessari per il sincronismo dei fotogrammi, l’organizzazione dei pixel e la correzione degli errori. Nel caso dell’Ultra Hd (3.840 x 2.160 punti), naturalmente, si moltiplica tutto per quattro.

Per ridurre a livelli ragionevoli questa quantità  di bit, è quindi fondamentale impiegare algoritmi di compressione. Quelli di tipo lossless, ovvero senza perdita di dati, non permettono una diminuzione sufficiente, perciò la totalità  dei codec video in uso oggi sono di tipo lossy, eliminano parte dei dati originali. Questo consente un grosso risparmio in termini di bit rate e di dimensione del file, con un degrado della qualità  visiva spesso irrilevante dato che il codec rimuove i dettagli meno percepibili durante la visione del video (ne parliamo in maniera più approfondita nel riquadro dedicato).

Un’altra caratteristica significativa dei codec moderni è la loro asimmetria, cioè richiedono molta più potenza di calcolo in fase di compressione rispetto a quella di decompressione. Ciò rende più agevole la riproduzione sui dispositivi portatili, dotati di limitate capacità  di calcolo e riserve di energia. La codifica molto complessa non è in genere un problema con i processori odierni, sia quelli dei computer che possono lavorare offline sia quelli dei camcorder che devono operare in tempo reale.

A questo proposito è interessante notare che le moderne Gpu sono di grande aiuto quando si tratta di comprimere e decomprimere i video. La loro struttura fortemente parallela e specializzata nel gestire le immagini (i video altro non sono che una sequenza di immagini, i fotogrammi) rende questi processori grafici lo strumento ideale per questo tipo di attività .
Nvidia ha sviluppato sia l’hardware sia il software per i codec video più recenti: nelle Gpu Pascal, in particolare, sono inseriti i due motori di accelerazione hardware Nvenc e Nvdec, entrambi separati e indipendenti dai core Cuda. Il primo serve per la codifica di H.264/Mpeg-4 Avc e H.265/Hevc, con profondità  colore di 8 e 10 bit, compressione cromatica 4:4:4 e 4:2:0, risoluzione fino a 8K. Il secondo si occupa invece della decodifica di Mpeg-2, Vc-1, VP8 e 9, H.264 e H.265 e, a seconda della risoluzione del video, può lavorare anche a una velocità  maggiore del tempo reale, caratteristica che viene comoda in caso di transcodifica, quando cioè è necessario cambiare il codec decomprimendo e ricomprimendo il video. Sul fronte software, Nvidia ha reso disponibile il Video Codec Sdk, che include sia un set completo di strumenti per il trattamento dei filmati sia due interfacce Api per l’hardware, Nvencode e Nvdecode (chiamata in passato Nvcuvid).
Anche Amd con le sue Gpu Radeon (anche quelle integrate nei processori o, più correttamente, nelle sue Apu) è in grado di trattare in hardware i video, grazie al motore Vce (Video Coding Engine) che lavora con H.264 e che quindi permette di scaricare la Cpu, lasciandola libera di dedicare le proprie risorse ad altri task.

Vce è pensato per sfruttare al massimo l’hardware Amd disponibile oppure per ridurre il consumo di energia, una modalità  importante per i dispositivi portatili a batteria. Nel primo caso, il motore può gestire fino a 16 flussi video Full Hd a 30 fotogrammi al secondo, mentre nel secondo i flussi si riducono a tre. Nelle Apu e Gpu di Amd esiste una connessione fisica diretta (Dem, Display Encode Mode) tra Vce e il display controller, una connessione ideale per le applicazioni a bassa latenza come i display wireless.

Sul fonte Intel, invece, i processori con grafica integrata della serie Kaby Lake dispongono di blocchi MFC (Multi-Format Encoding) e MFD (Multi-Format Decoding) inclusi nel blocco MFX (Multi-Format Codec Engine) e dedicati alla codifica e alla decodifica dei flussi video H.265/Hevc e VP9. Più in dettaglio, MFC lavora con H.265 a 8 e 10 bit e VP9 a 8 bit, mentre MFD gestisce anche VP9 a 10 bit. Tutte le operazioni sono eseguite con una compressione cromatica 4:2:0. Già  dalla serie precedente di Cpu, Skylake, la decodifica H.265 a 10 bit è effettuata in hardware, ma in modalità  ibrida, ovvero coinvolgendo sia i core della Cpu sia la Gpu.

Per quanto riguarda i player software, molti di questi possono sfruttare l’accelerazione Gpu in decodifica. Per esempio, il player gratuito Vlc (www.videolan.org/vlc) usa l’acceleratore grafico per la decompressione dei codec Mpeg-1, Mpeg-2, Wmv3, Vc-1 e H.264/Mpeg-4 Avc.

I codec che abbiamo preso in considerazione sono AV1, Cinepak, H.264/Mpeg-4 Avc, H.265/Hevc, Indeo, Motion Jpeg, Mpeg-1, Mpeg-2, Mpeg-4 Part 2, RealVideo, Sorenson 3/Spark, Theora, Vp9, Wmv. In questo elenco è facile riconoscere compressori molto diffusi come H.264, Mpeg-2 e Wmv, con H.265 che sta guadagnando rapidamente popolarità  grazie alle sue ottime prestazioni. Ciascun codec ha punti di forza e debolezza ed è in genere specializzato per un numero limitato di tipologie di video.

Passando ai container, abbiamo già  detto che sono come scatole al cui interno si trovano flussi video e audio, immagini, metadati di vario genere. I vari componenti sono compressi e codificati con diversi algoritmi, non sempre stabiliti dalle specifiche del contenitore. È invece definita la loro struttura gerarchica, cioè come sono strutturati all’interno del file. I container più versatili sono quelli che permettono di memorizzare più colonne sonore e sottotitoli, i capitoli ed eventualmente menu interattivi. Importanti sono anche la possibilità  di essere trasmessi in modalità  streaming e l’esistenza o meno di royalty da pagare. Esistono molti container e noi abbiamo esaminato i più diffusi, ovvero 3gp, Asf, Avi, Dmf/DivX, Flv/F4v, Mkv, Mov/Qt, Mp4/M4a, Ogg, RealMedia. Quelli più noti del gruppo sono senza dubbio Avi, Mov e Mp4, con l’ultimo arrivato Mkv che ha già  acquistato una grande popolarità  grazie alla sua versatilità  e al fatto che è libero da royalty.

Prima di iniziare con l’esame dei codec e dei container, segnaliamo che abbiamo raccolto in due gruppi a parte quelli che sono da considerare vecchi, obsoleti, a causa dell’impiego di tecniche e di algoritmi poco efficienti nella compressione del video per quanto riguarda i codec, per via dell’incapacità  di stare al passo con le esigenze più recenti (supporto di più colonne sonore e sottotitoli, per esempio) nel caso dei container. Un discorso particolare va poi fatto per Motion Jpeg: è un codec ancora molto usato nelle fotocamere con capacità  video avanzate e la sua versione più evoluta, Motion Jpeg2000, è lo standard nel cinema digitale. Ma la sua scarsa efficienza nella compressione lo rende oggi una scelta decisamente sconsigliata per chi fa montaggio video. Al massimo può essere preso in considerazione come formato intermedio in un lavoro di video editing.

In generale, i formati che abbiamo classificato come obsoleti non andrebbero presi in considerazione per creare video da vedere con dispositivi attuali.

Estratto dell’articolo pubblicato su PC Professionale di marzo 2017