[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [volume] [parte]


Capitolo 648.   Concetti generali sui formati video digitali

Si comprende intuitivamente che un filmato sia una sequenza di immagini fisse, prese a intervalli regolari molto brevi; tuttavia, per poter usare i programmi che creano o elaborano dei filmati digitali, occorre conoscere, almeno superficialmente, altri concetti specifici.

648.1   Composizione di un'immagine fissa

Ai fini della rappresentazione digitale, si può considerare un'immagine come un mosaico rettangolare, composto da una matrice di tessere, ognuna di dimensione uguale: le tessere di questo mosaico sono i punti grafici, noti come pixel. Da questo punto di vista, le caratteristiche di un'immagine sono la larghezza e l'altezza in punti grafici, a cui si aggiunge la «profondità», rappresentata dalla quantità di colori.

Per la precisione, la profondità si può esprimere sia con il numero di colori rappresentabili, intendendo per colore ogni tonalità disponibile, sia con il numero di bit con cui i colori vengono rappresentati. In tal caso, se n è la quantità di bit a disposizione, il numero di colori rappresentabili è 2n.

648.2   Dall'immagine fissa al filmato

Si arriva a un filmato mettendo assieme una serie di immagini fisse, ottenute a intervalli molto brevi e regolari. La frequenza con cui queste immagini sono scandite è la frequenza di quadro (frame rate), che secondo la tradizione televisiva va dai 25 Hz (standard PAL e SECAM europei) a circa 30 Hz (standard NTSC americano).

Il sistema televisivo tradizionale introduce anche l'interlacciamento, per ridurre la percezione dello sfarfallio dell'immagine. Attraverso l'interlacciamento, ogni immagine viene divisa in due immagini contenenti righe alterne (una contiene le righe dispari, l'altra le righe pari), da visualizzare a una frequenza doppia rispetto alla frequenza di quadro. Le due immagini che compongono il quadro sono dei semiquadri (field).

648.3   Digitalizzazione di un filmato

La trasformazione di un filmato in forma digitale (numerica) implica la realizzazione di un file contenente una sequenza di immagini successive. Se la memorizzazione avviene senza tecniche di compressione, è sufficiente determinare le dimensioni di ogni immagine (si ottiene la dimensione a partire da larghezza, altezza e profondità) e sapere a che frequenza visualizzarle (frequenza di quadro), per poter riprodurre il filmato correttamente.

Per risparmiare spazio, le immagini dei vari quadri possono essere rappresentate attraverso tecniche che ne consentono la riduzione delle dimensioni, di solito con la perdita di qualche informazione, esattamente come avviene con tanti formati di rappresentazione di immagini fisse. Per esempio, il formato MJPG è una sequenza di immagini JPG.

Per risparmiare spazio ulteriore, le immagini dei quadri, oltre che essere compresse per conto proprio, dopo un'immagine completa possono rappresentare solo le variazioni nei quadri successivi.

Come avviene per la compressione audio, la creazione di un file video compresso, che consente la perdita di informazioni, prevede normalmente la possibilità di fissare il flusso massimo di dati per unità di tempo: bit rate. Naturalmente, maggiore è questo valore, migliore è la qualità del video riprodotto. Si distingue generalmente tra un flusso massimo costante o variabile; nel secondo caso si usa normalmente la sigla «VBR» (Variable bit rate).

648.4   Confezionamento di un filmato

Un filmato può essere realizzato come una sequenza di immagini non compresse, senza informazioni ulteriori. In tal caso, per la sua riproduzione è necessario conoscere le caratteristiche delle immagini e la loro frequenza di scansione; inoltre, è necessario leggere il file dal principio, per poter calcolare esattamente l'inizio di ogni nuovo quadro.

Per facilitare l'esecuzione di un filmato, il file che lo contiene potrebbe disporre di una sorta di intestazione, con tutte le informazioni necessarie alla decodifica.

Per consentire l'esecuzione di un filmato attraverso un flusso di dati, all'interno dei quali è possibile anche la perdita di porzioni di questi, è necessario che i quadri del filmato siano distinguibili. In tal caso, di solito, all'inizio di un gruppo di quadri viene inserita un'intestazione con i dati necessari alla riproduzione corretta del filmato stesso.

648.5   Contenitore multimediale

Generalmente, si è abituati a considerare un filmato come qualcosa che contiene sì una sequenza visiva, ma anche una traccia sonora. Per ottenere questo risultato occorre raccogliere video e audio in un contenitore multiplex (molteplice), ovvero un file che a sua volta contiene, a pezzi, un file video e un file audio, con le informazioni necessarie alla loro esecuzione sincronizzata.

Un contenitore multiplex è fatto per contenere certi tipi di formati (video, audio o altro), ma non tutti; inoltre, a seconda delle sue caratteristiche, può prevedere la presenza di più componenti sincronizzate, come più tracce audio in lingue diverse, più tracce video o anche informazioni testuali (come i sottotitoli).

648.6   Trasformazione in teoria

La trasformazione di un filmato da una rappresentazione digitale a un'altra, è un'operazione complessa, che produce spesso risultati scadenti.

La qualità scadente del risultato dipende generalmente dal fatto che si parte da un formato già compresso, dove la compressione comporta la perdita di informazioni visive rispetto alle immagini originali, per arrivare nuovamente a un formato compresso, dove la perdita di informazioni può solo aumentare.

La trasformazione di un filmato richiede generalmente un adattamento della geometria, ovvero delle dimensioni orizzontali e verticali delle immagini, così come la modifica della frequenza di quadro. Si può comprendere che proprio la modifica della frequenza di quadro sia l'aspetto più difficile della trasformazione.

Il modo più semplice per trasformare la frequenza di quadro è quello di calcolare quale quadro della sequenza originale è il più vicino, in termini di tempo, al quadro della sequenza trasformata. In questo modo, a seconda dei casi, può succedere che alcuni quadri della sequenza originale vengano eliminati, oppure che vengano duplicati. Ovviamente, il risultato produce degli scatti periodici nel fluire della sequenza visuale. A titolo di esempio viene mostrato il procedimento in forma di pseudocodifica:

FRAME_RATE (VIDEO_SRC, A_SRC, Z_SRC, FPS_SRC, VIDEO_DST, A_DST, FPS_DST)

    LOCAL FRAME_TIME_SRC FLOAT
    LOCAL FRAME_TIME_DST FLOAT
    LOCAL VIDEO_TIME     FLOAT
    LOCAL FRAME_SRC      INTEGER
    LOCAL FRAME_DST      INTEGER
    LOCAL I_SRC          INTEGER
    LOCAL I_DST          INTEGER
    LOCAL Z_DST          INTEGER

    FRAME_TIME_SRC := (1 / FPS_SRC)
    FRAME_TIME_DST := (1 / FPS_DST)

    FRAME_DST := 0
    
    WHILE TRUE

        VIDEO_TIME     := (FRAME_DST * FRAME_TIME_DST)
        FRAME_SRC      := (VIDEO_TIME / FRAME_TIME_SRC + 0.5)
        I_SRC          := (A_SRC + FRAME_SRC)
        I_DST          := (A_DST + FRAME_DST)

        IF I_SRC <= Z_SRC
            THEN
                VIDEO_DST[I_DST] := VIDEO_SRC[I_SRC]
            ELSE
                BREAK
        END IF
        
        FRAME_DST++
    
    END WHILE

    Z_DST := (I_DST - 1)

    RETURN (VIDEO_DST, A_DST, Z_DST)

END FRAME_RATE

In pratica, la funzione FRAME_RATE riceve come argomenti:

Nome Descrizione
VIDEO_SRC il riferimento a un array monodimensionale contenente la sequenza dei quadri, in un intervallo di celle ben determinato;
A_SRC l'indice del primo quadro da prendere in considerazione nell'array originale;
Z_SRC l'indice dell'ultimo quadro da prendere in considerazione nell'array originale;
FPS_SRC la frequenza di quadro originale in hertz (simbolo: «Hz»);
VIDEO_DST il riferimento a un array monodimensionale che deve contenente la sequenza finale dei quadri;
A_DST l'indice del primo quadro da collocare nell'array finale;
FPS_DST la frequenza di quadro finale in hertz (simbolo: «Hz»).

Come si vede, nella chiamata della funzione non viene indicato un limite finale all'array di destinazione, in quanto il riferimento a celle nuove ne implica la creazione.

All'inizio della funzione, vengono dichiarate anche altre variabili locali:

Nome Descrizione
FRAME_TIME_SRC serve a contenere la durata di tempo di ogni quadro nella sequenza originale;
FRAME_TIME_DST serve a contenere la durata di tempo di ogni quadro nella destinazione;
VIDEO_TIME serve a contenere, di volta in volta, il tempo totale accumulato durante la trasformazione dei quadri;
FRAME_SRC serve a individuare il quadro n-esimo nell'origine;
FRAME_DST serve a individuare il quadro n-esimo nella destinazione;
I_SRC serve a contenere l'indice di scansione dell'array di origine;
I_DST serve a contenere l'indice di scansione dell'array di destinazione;
Z_DST serve a contenere la dimensione massima dell'array di destinazione.

Inizialmente viene calcolato il tempo di durata dei quadri della sequenza di origine e di quella di destinazione; quindi viene azzerato il valore di FRAME_DST, a indicare che si comincia dal primo quadro nella sequenza di destinazione. Successivamente inizia un ciclo senza fine, dove si calcola: la durata della sequenza fino al punto del quadro di destinazione in corso di elaborazione; il quadro da usare nella sequenza originale (si divide il tempo attuale per la durata del quadro di origine, aggiungendo 0,5, contando di ottenere il troncamento dei decimali dal momento che si assegna a una variabile intera); l'indice corrispondente nell'array di origine; l'indice corrispondente nell'array di destinazione.

Se esiste l'elemento cercato nell'array di origine, il quadro viene copiato nell'elemento appropriato dell'array di destinazione, altrimenti il ciclo termina.

Se tutto va bene viene incrementato il contatore dei quadri di destinazione.

Dopo il ciclo viene calcolato l'indice massimo nell'array di destinazione e vengono restituiti i valori salienti: il riferimento all'array di destinazione, l'indice iniziale e finale della sequenza di quadri trasformata.

648.7   Trasformazione di un formato «multiplex»

Quando ciò che deve essere trasformato è contenuto in un file che dispone di video e audio assieme, le complicazioni aumentano. Generalmente, si procede separando le varie componenti, trasformando i risultati e riassemblando tutto in un nuovo file multiplex. Intuitivamente, si comprende che l'azione di separazione sia nota come demultiplexing, mentre la fusione diventa semplicemente multiplexing.

Per lo stesso motivo per cui ci si trova a dovere trasformare i video digitali, succede che si debba trasformare in qualche modo anche la componente audio, soprattutto perché può essere obbligatorio l'uso di una certa frequenza di campionamento e la presenza di due tracce (per la stereofonia, anche se fasulla). La necessità di rielaborare la componente audio è una ragione in più per procedere inizialmente attraverso una separazione dei contenuti multipli.

Se si separano audio e video, quindi si rielabora il video in modo da attribuire una frequenza di quadro differente, ma senza selezionare i quadri (quindi senza rispettare il tempo di esecuzione), il video diventa più lungo o più corto (a seconda che la trasformazione preveda una frequenza di quadro minore o maggiore di prima). Se la differenza nella velocità di esecuzione della sequenza video può essere poco apprezzabile, riaggregando l'audio ci si accorge subito che dopo un po' di tempo il suono anticipa o ritarda rispetto al video.

Se si separano audio e video, quindi si rielabora l'audio in modo da attribuire una frequenza di campionamento differente, ma senza «ricampionare» (quindi senza rispettare il tempo di esecuzione), l'audio diventa più lungo o più corto (a seconda che la trasformazione preveda una frequenza di campionamento minore o maggiore di prima). Se la differenza nella velocità di esecuzione della sequenza audio può essere poco apprezzabile, riaggregando il video ci si accorge subito che dopo un po' di tempo il suono ritarda o anticipa rispetto al video.

Appunti di informatica libera 2007.02 --- Copyright © 2000-2007 Daniele Giacomini -- <daniele (ad) swlibero·org>


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome concetti_generali_sui_formati_video_digitali.htm

[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico]

Valid ISO-HTML!

CSS validator!