Linux multimedia/Video/Introduzione

Wikibooks, manuali e libri di testo liberi.
Indice del libro

Introduzione[modifica]

Questa sezione vorrebbe fornire almeno le conoscenze e le pratiche di base per lavorare con il video digitale. Le basi della compressione JPEG, che sono alla base dei formati MPEG, sono ora in una sezione dedicata alle immagini.

Data per acquisita la compressione JPEG e altre nozioni sul colore e le immagini digitali, qui si parla dello standard televisivo PAL e degli standard MPEG. Poi si accenna alle tipiche fasi dell'elaborazione video, approfondite in apposite sezione.

Stato di questa sezione[modifica]

C'è in generale una certa confusione, dovuta allo spostamento altrove di alcune parti che hanno però lasciato traccia in diversi riferimenti non eliminati o non rediretti alle nuove sezioni. Ci vuole quindi un lavoro di rifinitura per rendere il testo più autoconsistente, fatti salvi ovviamente i necessari rinvii alle altre sezioni.

La teoria, nonostante molte aggiunte, è ancora debole, qualche esperto dovrebbe metterci mano. Mancano completamente i riferimenti alle fonti utilizzate.

Sulle sorgenti digitali, in particolare videocamere DV e simili, manca quasi tutto.

Il DVB comincia a prendere forma, ma per ora solo per la parte DVB-S.

Tutto andrebbe wikificato.

Teoria[modifica]

In questa sezione saranno introdotti alcuni dei concetti fondamentali dell'elaborazione video. In parte si tratta di approfondimenti rispetto ai concetti generali visti nell'introduzione al wikibook.

Il sistema PAL[modifica]

In Europa, e in molte altre parti del mondo, le trasmissioni televisive, via etere o satellite, analogiche o digitali, come pure le videocamere e i videoregistratori, e infine i DVD e i VCD, usano il sistema PAL.

La sigla sta per Phase Alternating Lines, espressione che racchiude l'idea principale alla base di questo sistema: sfruttando certe caratteristiche dell'occhio umano, nel sistema PAL vengono trasmesse, in ogni istante, solo le righe pari o le righe dispari di un'immagine reale. Facendo questo 50 volte al secondo, l'occhio umano non è in grado di accorgersi che sta vedendo solo metà delle righe di un'istantanea, e si ha quindi l'impressione di un'immagine più stabile rispetto a quanto avviene nell'altro standard analogo, NTSC, in cui vengono trasmesse immagini intere, ma a 30 Hz invece di 50 Hz.

Va chiarito subito che, nel sistema PAL, non viene mai trasmessa un'immagine intera in due tempi: le righe trasmesse in un dato istante, che siano pari o dispari, si riferiscono ad un unico istante nel tempo, e quelle trasmesse subito dopo si riferiscono all'istante successivo. Questo comporta qualche significativo effetto collaterale che sarà esaminato nel seguito. Ma è importante capire che non è possibile mettere insieme righe pari e righe dispari per ottenere un'immagine intera, perché i due blocchi di righe si riferiscono a due immagini distinte, che potrebbero addirittura appartenere a due scene diverse, come nel caso di un cambio di scena.

Frame e field[modifica]

La situazione ideale nell'elaborazione video è quella in cui ogni istantanea reale corrisponde ad un frame, cioè ad una immagine digitale, completa. Questo avviene nel cosiddetto progressive scan, mentre, nel sistema PAL, di ciascuna istantanea vengono trasmesse o memorizzate solo le righe pari o le righe dispari.

L'insieme delle sole righe pari o delle sole righe dispari prende il nome di field, letteralmente campo. Un frame nel sistema PAL è composto di un top field e di un bottom field: uno corrisponde alle righe pari di un'istantanea, l'altro alle righe dispari della successiva istantanea. I due field vengono trasmessi in una precisa sequenza, prima il top, poi il bottom. Quindi il frame nel sistema PAL non corrisponde ad un fotogramma in una pellicola cinematografica, né ad una singola immagine digitale: esso contiene informazioni a due istantanee consecutive.

Una tecnica di questo tipo prende il nome di interlacciamento (discutibile traduzione dell'inglese interlacing). Si dice quindi che nel sistema PAL il video è interlacciato (interlaced). Una traduzione forse più corretta, ma ancor più lunga, è interallacciamento, che si può trovare in alcune fonti.

Effetto combing e deinterlacciamento[modifica]

Normalmente è difficile notare che il video PAL è interlacciato. Ma in certe situazioni, specie nei bruschi cambi di scena, la riproduzione al computer mostra chiaramente un effetto che in inglese è detto combing, dacomb (pettine): infatti alcune linee, tipicamente bordi di oggetti, appaiono come i denti di un pettine. Il motivo si capisce subito con un esempio limite.

Si pensi ad una stecca bianca che si muove su sfondo nero. Se il movimento è lento, ogni frame di una ipotetica registrazione PAL di questo movimento contiene due field in cui la stecca si presenta in due posizioni molto simili. Quindi è molto probabile che le righe pari e le righe dispari che appaiono subito dopo si completino molto bene a vicenda. Se invece il movimento è abbastanza rapido, la stecca apparirà in due posizioni completamente diverse nei due field. In questo caso, sarà evidentissimo l'effetto combing perché prima si vedranno le sole righe pari, e subito dopo solo le righe dispari, ma in due posizioni diverse, come se ci fosse una stecca di sole righe pari e una di sole righe dispari.

I cambi di scena sono una situazione simile: ad un dato istante si vedono solo metà righe di una scena, all'istante successivo, se il cambio è brutale, solo l'altra metà delle righe della nuova scena. Anche in questo caso il risultato è visibilissimo al computer, molto meno alla televisione.

L'effetto combing si può risolvere solo in un modo: aggiungendo false righe pari o dispari a ciascun campo, trasformandolo praticamente in un frame intero come nel progressive scan. Ci sono vari metodi per farlo, neanche troppo costosi in termini di CPU, ma tutti, necessariamente, devono basarsi su qualche forma di interpolazione: date due righe dispari consecutive, si deve costruire la riga pari mancante sfruttando quello che si sa delle due righe dispari (e lo stesso quando si hanno solo le righe pari).

Questa operazione è disponibile in molte versioni in tutti i programmi di codifica, e fortunatamente si possono ottenere risultati molto soddisfacenti con poco sforzo.

Una eccellente fonte sull'interlacciamento e sul deinterlacciamento è questa. Essa mostra, in situazioni esemplificative, gli effetti delle più note tecniche di deintelacing. Vale la pena di leggerla, anche se, a causa del numero e del peso delle immagini che contiene, con connessioni non abbastanza veloci può volerci parecchio a scaricarla tutta.

Scambio o slittamento dei campi[modifica]

Un altro problema che si incontra spesso nell'elaborazione video nel sistema PAL è lo slittamento dei campi dei frame: quando si comincia ad acquisire da una sorgente PAL, non si può sapere se il primo field che si incontra è un top field o un bottom field, salvo nei casi in cui essi sono preceduti da un'intestazione che dichiara esplicitamente il tipo di field.

Il risultato è che verranno creati dei frame che contengono il bottom field di un frame di input e il top field di quello successivo. In pratica, si ottengono frame in cui righe pari e dispari sono scambiate fra loro e il video appare vistosamente seghettato.

Effetto visualmente identico si ha quando, per motivi vari, il top field e il bottom field vengono sistematicamente scambiati, e non slittati.

Se questo avviene in maniera sistematica, cioè dall'inizio alla fine di un'elaborazione, la soluzione è banale in entrambi i casi: tutti i programmi di codifica prevedono opzioni per lo scambio dei field oppure per il loro slittamento. Si tratta di opzioni, o filtri in certi casi, molto semplici e per nulla costosi in termini computazionali.

Se invece problemi del genere si presentano in modo causale nel corso di un video, bisogna cercare di capire il perché, non potendo materialmente invertire o slittare i campi laddove necessario. In realtà, nelle trasmissioni DVB (satellitare, digitale terrestre o via cavo) questo non succede praticamente mai, e nell'acquisizione da nastri può capire più che altro con materiale molto vecchio e deteriorato, oppure con lettori scadenti.

Bitrate video[modifica]

Il bitrate, come si è visto nell'introduzione, è un concetto molto generale. Fondamentalmente, si vuole ridurlo senza perdere troppo in qualità, o almeno controllando la perdita di qualità. Ma nel video questo si fa in modo molto diverso che nell'audio.

Innanzitutto, nel caso del video i campioni non sono semplicemente le ampiezze delle frequenze audio, ma immagini, sostanzialmente costituite da pixel. Per ciascuno di essi è data un'informazione di colore, che può essere memorizzata in modo più o meno fedele, a seconda di quanti valori si è disposti a considerare per ciascuno dei colori fondamentali. Ad esempio, per ogni colore si usano spesso 8 bit, corrispondenti a 256 toni, e quindi, per un pixel, servono 8 * 3 = 24 bit per il colore. Un'immagine di 720 per 576 pixel, con 24 bit di colore ciascuno, richiede dunque qualcosa come 720 * 576 * 24 = 9.953.280 di bit. Se in una trasmissione devono essere riprodotte 25 immagini del genere al secondo, si arriva ad un bitrate di 9.953.280 * 25 = 248.832.000, cioè circa 249.000 kbps. Impensabile trasmettere informazione con una simile portata: servirebbe una linea a circa 249 Mbps, decisamente molto più veloce dell'ADSL da 4 Mbps (teorici) sbandierata da alcuni fornitori di servizi Internet.

Ancora più che nell'audio, con numeri simili è necessario ricorrere a qualche forma di compressione.

La compressione video[modifica]

Un film tradizionale su pellicola cinematografica (in inglese film, appunto) è una sequenza di fotogrammi completi, nel senso che ognuno di essi è una foto completa che, per essere proiettata, non richiede informazioni provenienti dagli altri fotogrammi.

Un film di questo tipo può essere digitalizzato creando una sequenza di immagini digitali, magari compresse in JPEG, ma del tutto slegate l'una dall'altra, proprio come i fotogrammi su pellicola. Ma se ogni immagine deve avere una certa qualità, il singolo fotogramma può tradursi in un file JPEG di svariati kilobyte che, moltiplicati per migliaia e migliaia di fotogrammi, portano facilmente a uno spazio richiesto molto superiore a quello corrispondente a molti DVD-ROM.

L'idea alla base di tutti i sistemi di compressione video è di memorizzare in modo completo, sia pure compresso, solo alcuni fotogrammi, di solito ad intervalli regolari, memorizzando invece di tutti gli altri solo le differenze rispetto ai fotogrammi completi: per ricavare tutti i fotogrammi incompleti a partire da quelli completi e dalle differenze memorizzate occorrono opportuni algoritmi che devono appunto ricostruire, prima della effettiva fruizione, ogni immagine nella sua completezza.

Per fissare meglio le idee, si pensi al codec MJPEG (Motion JPEG), un codec in cui ogni immagine è compressa JPEG con una certa qualità, ma ogni immagine è indipendente dalle altre. Questo codec è eccellente per le operazioni di editing, proprio perché tutto quel che deve fare un'applicazione di editing è decomprimere le immagini JPEG, cosa che sui moderni processori richiede millesimi di secondo. Ma questo codec, a parità delle altre condizioni (dimensioni dei frame e durata del filmato) produce file delle stesse dimensioni, anche se il filmato originale è costituito, al limite, solo da immagini completamente nere, o comunque tutte identiche fra loro: insomma, non tiene minimamente conto della somiglianza fra un fotogramma e il successivo, che invece è proprio il principio alla base della cinematografia, perché l'occhio umano percepisce come continua quella che è una sequenza discreta proprio perché ci sono solo piccole differenze fra un fotogramma e l'altro.

Un formato come MPEG-1, invece, calcola le differenze fra un fotogramma e l'altro che, specialmente nelle scene meno dinamiche, richiedono poco spazio per essere memorizzate. Poiché tenere conto delle differenze introduce inevitabili errori, che per giunta tendono ad aumentare nelle successive iterazioni, di tanto in tanto dev'essere memorizzato un frame intero, che faccia da punto di riferimento per le immagini successive, memorizzate solo per differenza.

I formati MPEG[modifica]

MPEG è l'acronimo di Moving Picture Experts Group, la denominazione più famosa del gruppo di lavoro tecnico dell'ISO (International Standard Organization) che si occupa della codifica dei contenuti multimediali in formati compressi. Il gruppo lavora dal 1988, e ha sviluppato inizialmente il formato MPEG-1, seguito poi da MPEG-2 ed MPEG-4 nel giro di pochi anni.

In molti casi il gruppo ha standardizzato formati e codec già esistenti, come ad esempio nel caso del codec MP3, nome comune di MPEG-1 Layer III: le specifiche, brevettate, sono state sviluppate dall'Istituto Fraunhofer in Germania, che detiene tuttora i brevetti.

I formati MPEG sono in realtà molto simili fra loro, almeno in termini di rapporto fra la qualità percepita e la compressione. Ai bitrate medio-alti, fra i 1000 e gli 8000 Kbps (kilobit per secondo), a partire da uno stesso file non compresso si ottengono file di dimensioni quasi identiche con tutti e tre i codec MPEG-1,2 e 4. MPEG-4, come in effetti dichiarato nelle sue specifiche, si mostra significativamente più efficiente nel comprimere a bassi bitrate, molto sotto i 1000 Kbps. D'altra parte, è stato studiato proprio per lavorare a bassi bitrate su dispositivi piccoli come i video telefoni, fissi e cellulari, dove la qualità non può essere più alta di tanto, date le dimensioni dei display, e la banda di trasmissione disponibile è relativamente limitata.

La compressione MPEG[modifica]

Piuttosto che rimanere sul generico, per illustrare come funziona la compressione video tanto vale ricorrere all'esempio concreto in assoluto più diffuso al momento: l'MPEG-2. Questo codec è usato nella televisione digitale, satellitare o terrestre, nei DVD video e in alcune altre applicazioni. I principi secondo cui funziona sono in effetti piuttosto generali, e i codec cugini come MPEG-1 ed MPEG-4 gli somigliano molto.

Compressione intra-frame ed inter-frame[modifica]

Una prima distinzione da fare è fra la compressione intra-frame e la compressione inter-frame.

Nel primo caso, un frame viene compresso senza ricorrere ad alcuna informazione esterna al frame stesso. Un frame compresso in questo modo si dice I-frame, o anche I-picture.

Questo tipo di compressione è quella usata nel codec MJPEG, in cui ogni singolo fotogramma è compresso in JPEG senza tenere in alcun conto gli altri fotogrammi. Si può anche dire che nel codec MJPEG tutti i frame sono I-frame.

Nel secondo caso un frame viene compresso facendo riferimento non solo ai pixel che compongono l'immagine da comprimere, ma anche a quelli di un'altra immagine di riferimento. L'idea è che se la distanza temporale fra l'immagine target (quella che si vuole comprimere) e quella sorgente (quella di riferimento) non è eccessiva, e se l'immagine di riferimento è auto-consistente (come un I-frame, in sostanza), conviene memorizzare le differenze fra l'immagine target e quella di riferimento, perdendo poco in termini di qualità.

I frame costruiti in questo modo possono essere di due tipi: P-frame (prediction frame) e B-frame (bidirectional frame). I primi sono sempre costruiti sfruttando l'ultimo I-frame disponibile, o anche un altro P-frame, purché l'ultimo I-frame non sia troppo distante. Un P-frame è compresso alquanto più di un I-frame, ma non quanto un B-frame. I B-frame sono costruiti sempre a partire da P-frame, ma non solo l'ultimo in ordine di tempo: viene anche utilizzato il P-frame successivo, lasciando quindi temporaneamente in sospeso la costruzione dei B-frame compresi fra due P-frame.

Per fissare meglio le idee, una tipica sequenza di frame in uno stream MPEG-2 può essere la seguente:

I-B-B-B-P-B-B-B-I-B-B-B-P-B-B-B-I...

e così via. I P-frame in questa sequenza sfruttano l'informazione nell'ultimo I-frame disponibile, mentre ogni B-frame, per ricostruire un fotogramma completo, richiede sia l'ultimo I- o P-frame disponibile, sia il primo in avanti. Per questo motivo la sequenza sopra riportata non viene trasmessa esattamente nell'ordine temporale naturale, bensì dando la precedenza agli I-frame e ai P-frame, ricevuti i quali il decoder ha tutto quello che gli serve per ricostruire delle immagini complete a partire dai B-frame che riceve dopo, riordinando infine tutte le immagini ricostruite prima di passarle avanti.

Va chiarito però che il tipo di compressione che si ha nei P-frame e nei B-frame è molto diversa da quella che si ha negli I-frame: in questi la DCT è applicata ad una vera e propria immagine integra, mentre negli altri vengono calcolati i cosiddetti vettori di moto (motion vector) e la DCT viene applicata a questi. Il calcolo viene effettuato a livello dei macro blocchi, e nei B-frame rende particolarmente efficace la compressione, ovviamente a discapito del tempo di elaborazione.

Struttura di massima di uno stream MPEG[modifica]

Vediamo sommariamente come è strutturato uno stream MPEG. Un po' come avviene nei protocolli di rete, MPEG definisce una serie di strutture una contenuta nell'altra, ciascuna con alcune intestazioni iniziali seguite da dati veri e propri.

Sequenza
Al livello più alto troviamo una serie di sequenze consecutive, prive di intestazioni. Semplicemente scorrono una di seguito all'altra.
GOP (Group Of Pictures)
Un gruppo strutturato di fotogrammi, o frame. È in pratica una raccolta di fotogrammi staccata dagli altri, anche se ovviamente finito un GOP c'è subito il primo fotogramma del successivo. Ha un senso separare fra loro gruppi di fotogrammi, per tanti motivi, fra cui in particolare la distribuzione ricorrente dei vari tipi di frame visti sopra: ogni GOP dichiara nella sua intestazione quanti frame contiene e ogni quanti frame c'è un I-frame. Tipicamente, la predizione e la correzione che avviene sui frame di un GOP non fanno intervenire frame di GOP adiacenti. Questo è utile nella gestione dei cambi di scena: di solito conviene separare due scene in due GOP distinti, perché l'ultimo frame di una scena e il primo della scena successiva sono totalmente scorrelati e tanto vale gestirli entrambi come I-frame.
Frame, picture, fotogramma
È appunto l'entità che più si avvicina al tradizionale fotogramma della pellicola cinematografica, e può essere di uno dei tre tipi già discussi.
Slice (fetta, striscia)
Un frame è ovviamente fatto di pixel, ma questi, per varie ragioni, sono organizzati a vari livelli, cominciando appunto dalle slice. Una slice è sostanzialmente un primo raggruppamento di pixel, gestiti insieme con l'idea che se una slice si dovesse perdere nella trasmissione per qualsiasi motivo, è meglio lasciarla perdere interamente e passare alla slice successiva, accettando un piccolo danno, ma senza compromettere l'intero processo introducendo un ritardo.
Macroblocco
I pixel in una slice non sono gestiti direttamente come tali, ma dapprima sono raggruppati in macroblocchi da 16x16 pixel. È a questo livello che avviene la compensazione del movimento e la stima dei vettori di movimento, oggetto poi della DCT e della quantizzazione nei P-frame e nei B-frame.
Blocco
Un macroblocco è infine diviso in 4 blocchi di 8x8 pixel. A questi si applica effettivamente la DCT negli I-frame. Negli altri tipi di frame la DCT è applicata non a immagini, ma a blocchi ricavati dalla differenza di due immagini. La DCT bidimensionale viene in realtà ottenuta applicando la DCT monodimensionale a tutte le 8 righe di un blocco.

Panoramica sui codec MPEG[modifica]

I codec attualmente più diffusi sono tutti in qualche modo legati alla famiglia di standard MPEG. Per quanto essa sia molto più popolosa di quanto normalmente si pensi, qui ci limiteremo a quelli che hanno avuto, e continuano ad avere, le applicazioni più diffuse. Essi sono sostanzialmente MPEG-1, MPEG-2 ed MPEG-4.

MPEG-1[modifica]

È la prima delle specifiche prodotte dal gruppo MPEG dell'ISO/IEC. Per quanto decisamente datata, trova applicazioni molto interessanti nelle specifiche VCD 1.0 e 2.0, molto utilizzate per distribuire su semplici CD filmati anche di un'ora destinati alla visione su normali televisori. Le dimensioni dei frame utilizzati nel VCD corrispondono sostanzialmente a quelle caratteristiche delle sorgenti broadcast tradizionali, fra cui appunto la televisione, il VHS e il Video8.

Per quanto la qualità di un VCD non sia paragonabile a quella del DVD, non è affatto un'opzione da scartare per salvare i propri filmati amatoriali, per creare copie di backup dei propri DVD, o per salvare registrazioni fatte da satellite o digitale terrestre.

Infatti, come accennato sopra, i frame corrispondono a quelli delle trasmissioni televisive, per cui, se la qualità della fonte è buona, la riproduzione su televisore può essere ampiamente soddisfacente. Tentare di ingrandire l'immagine ovviamente metterà subito in evidenza i limiti di questa tecnologia.

Come ulteriore testimonianza a favore dell'MPEG-1, si consideri la pratica di promozione commerciale, attualmente molto diffusa, di allegare al prodotto un VCD con un cartone animato, un video musicale o altro. Questi filmati sono di ottima qualità e, come si diceva, solo l'ingrandimento ne mostra i limiti rispetto al DVD.

MPEG-1 usa bitrate costante. Ad esempio, la specifica VCD prevede un bitrate di 1152 che, in base alle formule viste sopra, comporta un bpp pari a circa 0,45, considerato piuttosto alto.

Una caratteristica che, in confronto a MPEG-4, può apparire seccante, è che l'elaborato non può essere contenuto nel contenitore AVI che, pur spesso denigrato, è diffuso e abbastanza versatile. Come conseguenza, alcuni coder producono due stream distinti, audio e video, che poi devono essere esplicitamente miscelati con un multiplexer, come ad esempio l'eccellente mplex che accompagna gli mjpegtools.

MPEG-2[modifica]

È diventato famoso grazie alla sua applicazione nei DVD video presenti ormai in tutte le case, ma è anche usato normalmente per le trasmissioni satellitari, via cavo, e in digitale terrestre. È molto superiore per qualità all'MPEG-1, pur avendo un rapporto qualità/spazio migliore. Inoltre, applicato ai DVD, è molto più versatile. Raramente nell'uso casalingo si sfruttano tutte le sue potenzialità, ma soprattutto se si dispone di una fonte di elevata qualità vale certamente la pena di considerare questa opzione.

Il bitrate può essere variabile. Ad esempio, la specifica DVD prevede un bitrate variabile non superiore a 7500 Kbps che, alle dimensioni standard dei frame di 720x576 (almeno nel sistema PAL), comporta un bpp di circa 0,72; ma coder come transcode usano per default un bitrate di 6000 quando si usano per codificare in MPEG-2 per DVD, il che comporta un bpp attorno a 0,58.

Naturalmente la qualità molto più elevata, già in termini di dimensioni dei frame, ha un prezzo in termini di spazio richiesto, a parità di durata. Inoltre, come per MPEG-1, il contenito non può essere AVI, e anche in questo caso di solito occorre miscelare i due stream distinti prodotti dalla codifica.

Un'altra interessante caratteristica di MPEG-2, conservata in MPEG-4, è la possibilità di effettuare una codifica a bitrate variabile in due passate: nella prima si analizza lo stream video, nella seconda si sfruttano i risultati di questa analisi per distribuire meglio i bit disponibili, risparmiando nelle scene lente e abbondando in quelle veloci.

MPEG-4[modifica]

Ufficialmente noto come ISO 14496, è l'ultimo nato della famiglia ad avere avuto grande diffusione, anche se potrebbe essere spodestato da fratelli più giovani. Il suo punto di forza, rispetto all'MPEG-2, non è tanto un maggiore rapporto qualità/spazio, quanto una estrema versatilità e praticità. È stato studiato proprio con questo obiettivo, ed è infatti sempre più diffuso perché è veramente facile produrre, distribuire o condividere filmati basati su questa specifica. In confronto, la contorta struttura richiesta dalla specifica DVD video appare una complicazione esagerata. Senza nulla togliere alle altre due opzioni, l'MPEG-4, usato opportunamente, si può adattare a moltissime situazioni, anche a quelle in cui normalmente si sceglierebbe un codec MPEG-1 o MPEG-2. I codec delle famiglie DivX, XviD ed ffmpeg sono tutti basati su MPEG4.

MPEG-4 supera la rigidità di MPEG-1/2 quanto al contenitore multimediale, che normalmente è AVI, anche se questo non è obbligatorio. Il vantaggio è che la codifica comprende anche il multiplexing, per cui in una sola operazione si ottiene praticamente il risultato finito. Inoltre, come MPEG-2, MPEG-4 consente di sfruttare meglio il bitrate disponibile grazie alla codifica in due passi.

Con MPEG-4 sono state introdotte anche alcune innovazioni a livello di algoritmi, come la Global Motion Compensation]] (GMC) e il Quarter Pixel (qPel). Queste innovazioni, nelle intenzioni del gruppo di lavoro, dovevano garantire maggiori rapporti di compressione, ma nella pratica i benefici promessi si sono rivelati insoddisfacenti, mentre i costi computazionali caratteristici dei relativi algoritmi sono evidenti e non eludibili.

Migliorie importanti introdotte da MPEG-4 difficilmente interessano l'utenza dilettante: infatti MPEG-4 consente di produrre oggetti multimediali molto complessi, trattando separatamente, e più efficacemente, voce, colonna sonora, personaggi umani, personaggi sintetici, sfondi statici e sfondi in movimento, e così via. Rispetto al tradizionale approccio, che lo stesso MPEG-4 può seguire e che consiste nel trattare allo stesso modo tutte queste componenti multimediali, è chiaro che si possono ottenere non solo una compressione migliore, ma anche una estrema versatilità nella produzione, nella trasmissione e nella fruizione del prodotto.

Ad esempio, si pensi banalmente ad un telegiornale. Se le componenti di tale prodotto multimediale sono gestite separatamente, conviene usare un bitrate audio modesto per la voce dello speaker, uno più elevato per la sigla, un bitrate video pure modesto per lo sfondo sintetico su cui è proiettato lo speaker, e infine un bitrate video più elevato per i movimenti, sia pure modesti, dello speaker stesso.

L'approccio tradizionale userebbe lo stesso bitrare audio e lo stesso bitrate video per questi quattro oggetti multimediali, e si capisce subito quale spreco questo comporti. Infine, i quattro oggetti multimediali potrebbero essere trasmessi separatamente e riassemblati una volta arrivati a destinazione, lasciando magari all'utente la possibilità di scegliere lo sfondo che preferisce per lo studio del telegiornale, piuttosto che accettare quello trasmesso.

Tuttavia queste notevoli caratteristiche non sono arrivate ancora all'utenza finale, e tutto quello che si fa attualmente con MPEG-4 è creare copie di DVD video in formato AVI da mettere su un CD-ROM.

Quale codec MPEG comprime di più?[modifica]

È una leggenda metropolitana il fatto che MPEG-4 comprima di più di MPEG-2 ed MPEG-1: gli algoritmi utilizzati sono per tutti e tre sostanzialmente quelli sommariamente descritti sopra, salvo qualche aggiunta che però non si è rivelata decisiva.

Un esperimento interessante a questo proposito, e che chiunque può realizzare, mostra come la compressione MPEG-4 sia pressoché equivalente a quella MPEG-1/2 salvo che a bitrate molto bassi.

Si provi a comprimere un filmato non compresso (ad esempio ricavato da un'acquisizione da sorgente analogica con gli mjpegtools, oppure un filmato DV scaricato da una videocamera digitale) usando un comando come:

transcode -i non-compresso.avi -x lav,null -y ffmpeg,null -F CODEC -w 4000 -k -o compresso

in cui 'CODEC' assume i valori 'mpeg1video', 'mpeg2video' ed 'mpeg4'. In questo caso si usa transcode, un noto comando per la transcodifica, per utilizzare le librerie ffmpeg (ovviamente si potrebbe fare lo stesso in molti altri modi). I 'null' che appaiono nel comando stanno ad indicare che l'audio è stato ignorato, perché ovviamente avrebbe falsato l'esperimento (parliamo solo di compressione video).

Nell'esempio sopra è stato usato un bitrate piuttosto alto (opzione -w 4000, cioè 4000 kbps) per comprimere un file di alcuni minuti di video MJPEG, e i risultati sono stati tre file di uguale lunghezza, circa 88 MiB.

L'esperimento, ripetuto nelle stesse condizioni ma con un bitrate ancora più alto, 8000 kbps, porta ad un risultato analogo: tre file da 174 MiB ciascuno.

Vediamo cosa succede invece a bitrate bassi. A 200 kbps le cose cambiano: MPEG-1 produce un file da 7,6 MiB, MPEG-2 un file da 8,6 MiB, mentre MPEG-4 supera appena i 5 MiB. Si comincia quindi a vedere la superiorità ai bassi bitrate proclamata dalle specifiche ufficiali.

Una differenza altrettanto significativa si vede quando viene fissato il quantizzatore, diciamo ad un valore 20, (opzioni -R3 e -w20 in transcode).

Il difetto di questo test è che la qualità soggettiva è molto difficile da giudicare, per cui qualcuno potrebbe trovare migliore un risultato piuttosto che un altro, a parità di compressione. Tuttavia va ricordato che gli algoritmi utilizzati nei codec MPEG sono sostanzialmente gli stessi, per cui non c'è molto da sorprendersi che i risultati, in termini di pura compressione, siano pressoché equivalenti in certe situazioni.

Inoltre va ricordato, per quel che riguarda la compressione MPEG-1, che l'unica specifica MPEG-1 utilizzabile nella pratica, e cioè il VCD, limita il bitrate a 1152 kpbs, per cui dimostrare che MPEG-1 comprime quanto i suoi fratelli ha valore puramente accademico.

In definitiva, in termini di rapporto di compressione, MPEG-4 non è realmente superiore a MPEG-1/2, ma la sua versatilità e praticità lo ha comunque imposto in moltissimi settori. Si può quindi dare il giusto significato alla possibilità di copiare un DVD video su un CD-ROM: semplicemente, con MPEG-4 si ha la libertà di scegliere dimensioni del frame, bitrate e contenitore in modo da ottenere un file AVI da 700 MiB, ma la qualità non è assolutamente la stessa del DVD video originale, anche se è soddisfacente nella maggior parte della applicazioni dilettantistiche. consenta di comprimere un DVD video in un CD-ROM

Le fasi dell'elaborazione video[modifica]

Elaborare il video può significare molte cose, e quello che effettivamente si deve fare dipende molto da quello che si vuole ottenere. È comunque riconoscibile in queste attività una sequenza logica che, sebbene approssimativa e comunque non obbligata, sarà utilizzata nel seguito come riferimento:

  1. acquisizione
  2. editing
  3. transcodifica
  4. authoring
  5. incisione

Alcune di queste fasi si compongono a loro volta di sotto-attività che dipendono molto dalle diverse situazioni, ma piuttosto che tentare di individuarle fin dall'inizio, saranno esaminate caso per caso.

Vediamo brevemente ciascuna di esse. Saranno discusse in maggiore dettaglio più avanti.

Acquisizione[modifica]

È il processo di trasferimento su PC dei filmati, preliminare a tutte le altre operazioni. A seconda delle situazioni, il processo può presentare problematiche molto diverse.

Se la sorgente è digitale tutto è molto più semplice, mentre le sorgenti analogiche, specialmente se meccaniche come videocamere e videoregistratori, presentano una serie di problemi legati alla necessità di campionare un segnale analogico che può avere qualità molto variabile. Inoltre, nelle videocamere digitali l'acquisizione in realtà è già avvenuta durante le riprese, e quindi si dovrebbe parlare piuttosto di trasferimento su disco dei filmati. Le videocamere e i videoregistratori analogici, invece, richiedono l'acquisizione vera e propria.

A parte questa prima considerazione, bisogna poi pensare al rapporto fra la qualità teorica della sorgente e quella del risultato atteso: se la sorgente ha dimensioni WxH, non si può pretendere che il risultato abbia dimensioni 2Wx2H, almeno non conservando la risoluzione lineare. Lo stesso discorso si può fare sul fronte audio. Ad esempio, lo standard DVD richiede una frequenza di campionamento di 48KHz, ma molte sorgenti anche digitali non arrivano a questi livelli, quindi l'audio viene di solito ri-campionato per poter produrre dei DVD, ma ovviamente la qualità resta quella della sorgente.

L'acquisizione è anche una fase in cui occorre grande spazio a disposizione su disco, e anche una buona risposta del sistema di I/O. Sistemi troppo datati possono trovarsi in difficoltà, almeno nelle situazioni estreme.

Inutile dire, infine, che se qualcosa va storto in questa fase raramente si potrà rimediare nelle fasi successive. Senza contare che, se si registra da satellite o da etere, probabilmente non ci sono repliche per riprovare.

Un caso a parte sono sorgenti come DVD e VCD. Per queste non è del tutto corretto parlare di acquisizione, ma per elaborare in modo avanzato queste sorgenti è di solito necessario copiarli in qualche modo su hard disk (ripping). Questa operazione, se non merita forse di chiamarsi acquisizione, non è comunque una banale copia.

Editing[modifica]

Se tutto è andato bene, in questa fase si possono scartare scene superflue, oppure la pubblicità, o si possono estrarre singole scene per farne capitoli di un DVD o di un VCD. Con qualche difficoltà in più si possono creare effetti come le dissolvenze, o sovrapporre sottotitoli ai filmati.

In questa fase è praticamente impossibile lavorare senza uno strumento visuale. Fortunatamente ne esistono diversi, ma non bisogna trascurare, in certi casi, il ricorso ai tool a riga di comando.

Alcuni strumenti effettuano un'editing non distruttivo: si limitano infatti a simulare le operazioni, registrando su semplici file di testo una serie di istruzioni che, successivamente, possono essere interpretate da altri tool i quali, a loro volta, non modificano i file acquisiti, ma producono copie di essi limitate alle parti tagliate, copiate o incollate.

I file di testo così ottenuti sono chiamati edit list. La praticità di questo modo di procedere si fa molto apprezzare soprattutto dal principiante, ma è impagabile anche per l'utente esperto.

In ogni caso, il risultato di questa fase sono diversi filmati da elaborare oppure delle edit list.

Esiste tuttavia un'altra possibilità: operare su file già transcodificati. Ad esempio, avidemux è un video editor compatibile con diversi codec, anche quelli che prevedono compressione video vera e propria. Questo può essere utile in diversi casi, ma raramente nei caso in cui si parta direttamente dalla sorgente, perché i codec compressi sono molto dispendiosi in termini di memoria e processore rispetto ai codec non compressi tipicamente prodotti dagli strumenti di acquisizione.

Transcodifica[modifica]

Questa fase è quasi inevitabile. Sia per le sorgenti digitali che per quelle analogiche il risultato dell'acquisizione, o del trasferimento che sia, è pur sempre un prodotto multimediale non compresso nel senso del video, come si vedrà più avanti. È quindi quasi sempre necessario convertire questo prodotto, o quello che rimane dopo l'editing, secondo dei codec più convenienti. In parole molto povere, questi codec sono algoritmi che cercano di rappresentare un filmato tenendo conto delle variazioni fra un fotogramma e l'altro. In questo modo, scene poco vivaci richiedono meno spazio, spazio che può essere invece impegnato nei passaggi più rapidi.

Esistono moltissimi codec diversi. Quelli più diffusi alla data di questo testo sono quelli della famiglia MPEG, usati nei VCD (MPEG-1), nei SVCD e DVD (MPEG-2) e nei file DivX o XviD (MPEG-4).

Authoring[modifica]

Non sempre è necessario, ma soprattutto se si vuole realizzare un DVD è probabile che sarà necessario creare dei titoli, dei capitoli, dei sottotitoli, dei menù e molte altre cose attraenti ma spesso poco utili. In questa fase gli strumenti visuali, come per l'editing, sono naturalmente molto più comodi dai pur potenti tool a riga di comando.

In pratica, per i DVD, questa fase è necessaria anche nella più elementare situazione di unico titolo, un unico capitolo, e nessun menù o altri effetti speciali.

Incisione[modifica]

Probabilmente il risultato finale di tutto questo complesso processo è, almeno per l'utenza a cui è dedicato principalmente questo testo, un qualche supporto ottico. Il modo in cui i filmati ottenuti sono incisi su CD o DVD dipende molto dal tipo di codec scelto. Ad esempio, VCD, SVCD e DVD possono essere incisi solo in un modo, perché questo modo è stabilito da una serie di specifiche pensate non per la visione su PC quanto su lettori da banco, connessi solo alla televisione. Invece il codec DivX non specifica nulla da questo punto di vista, perché si è affermato e diffuso per vedere i film su PC, e solo successivamente è stato supportato anche dai lettori da banco, quando ormai sarebbe stato impossibile imporre vincoli alla distribuzione su supporti ottici di file DivX. Così i file DivX vengono letti dagli attuali lettori proprio come i file MP3 o JPEG.

Questioni di metodo[modifica]

Si diceva che l'utenza Linux non è fortunata come quella di altri sistemi operativi. La mancanza di prodotti completi che possano gestire, tramite splendida interfaccia grafica, tutte le fasi del processo di elaborazione è forse quella più sentita. Ma chi ha detto che tutte le fasi dell'elaborazione video devono essere per forza visuali? Se si esclude l'editing, quasi impensabile senza uno strumento visuale, e l'eventuale authoring, tutto il resto si può fare benissimo a riga di comando, con maggiore profitto e divertimento.

L'idea è che, essendo gran parte delle operazioni molto ripetitive, una serie di script opportuni sono forse anche più pratici di una ingombrante interfaccia grafica, e soprattutto sono personalizzabili praticamente all'infinito.

Non solo: scrivere degli script è utilissimo proprio all'inizio, quando si fatica a prendere familiarità con i comandi e le relative opzioni. Qualche script consente di preimpostare molte delle opzioni ai valori adatti alle proprie esigenze standard, lasciando la possibilità di impostarne alcune altre come parametri od opzioni degli script.

Al limite non è da trascurare la possibilità di creare script che leggano da altri file la propria configurazione, separando meglio la logica dalle opzioni.

È anche molto importante, soprattutto all'inizio, annotare con un buon dettaglio gli esperimenti che si fanno: le opzioni sono tante, e dimenticare come si era riusciti ad ottenere un buon risultato capita facilmente, ed è tremendamente frustrante.