La modalità YUV e i Sw che la supportano
Qualsiasi video in formato mpeg è memorizzato in modalità YUV 12 bit detta in ambiente Windows YV12, come da specifiche Direct X; ciò vale per mpeg 1 (VCD,XVCD,...), mpeg2 ( SVCD, DVD,...) e mpeg4 ( DivX;.) , DivX...).
Vediamo prima di tutto cosa è esattamente il formato YUV: riprendo quanto scritto nell'articolo sull'mpeg.
Per descrivere il colore di un singolo pixel molto spesso si utilizza il fattore RGB ( rosso, verde e blu). In pratica, qualsiasi colore è possibile esprimerlo come somma di 3 contributi elementari: non a caso ciascun monitor o televisore è realizzato come una griglia di triadi RGB che a secondo della luminosità dei 3 componenti di ciascuno dei pixel crea ogni possibile immagine. Numerosi formati di immagini fisse ( Gif, BMP, Tiff...) memorizzano le singole immagini come triadi RGB.
Nel momento in cui si raggruppano più pixel, cosa che succede ovviamente per ogni immagine fissa o in movimento, si ricorre spesso alla rappresentazione detta YUV.
Y 
è detta componente di luminanza 
, ovvero la luminosità del pixel (ciò che normalmente viene definito come chiaro 
o scuro)
U,V 
sono detti componenti 
di crominanza 
o componenti differenza: sono due fattori che definiscono la quantità di colore. 
Spesso U è detto anche Cb, componente differenza del blu e V è detto Cr,  
componente differenza del rosso.
La relazione che lega YUV e RGB, è la seguente:
Y                                               
=   0,2990 
R + 0,5870 
G + 0,1140 
B
U (Cb) =  
0,5635 ( 
B 
- Y 
) + 128  = - 0,1684 R 
- 0,3316 
G  +  0,5 
B  +  128
V (Cr) =   
0,7133 ( 
R 
- 
Y 
) + 128  =         0,5 R 
- 0,4187 
G - 0,0813 
B  + 128
 
La relazione vista, mostra come c'è un legame univoco tra rappresentazione RGB e quella YUV; un medesimo colore può cioè essere indifferentemente rappresentato in una delle 2 maniere. A seguito delle limitazioni dell'occhio basta 1 byte ( = 8 bit = valore numerico compreso tra 0-255) per descrivere il singolo fattore R,G,B o Y,U,V e pertanto occorrono 3 bit = 24 bit per descrivere il colore di un pixel, sia se si usa la triade RGB che la YUV.
Ecco ad esempio alcuni colori nella rappresentazione RGB e YUV :osservo che i vari grigi hanno rappresentazione (X,X,X) in RGB e (X, 128,128) in YUV.
| RGB | YUV | |
| 255,0,0 | 76,85,255 | |
| 
       
        | 
      
       100,100,100  | 
      
       100,128,128  | 
    
![]()  | 
      
       255,255,255  | 
      
       255,128,128  | 
    
![]()  | 
      100,200,0 | 147,83,94 | 
Nel momento in cui occorre trasformare una immagine dal formato RGB a YUV ( o viceversa) occorre per ciascun pixel applicare i calcoli visti: poichè le CPU sono molto più lente nell'eseguire le moltiplicazioni e le divisioni rispetto a tutte le altre operazioni, i programmatori dei codec risolvono la cosa semplicemente memorizzando in alcune tabelle i fattori di conversione così da annullare del tutto le moltiplicazioni. Per chi ha un po' di esperenza in programmazione, vengono in pratica utilizzate le così dette LookupTable: si occupa un pò di memoria ma si velocizza tantissimo la conversione.
In pratica per ogni 
pixel da convertire da RGB a YUV ( o viceversa) occorre eseguire 6 addizioni, 2 
operazioni di shift (la divisione per 2) e 2 somme per 128 (facili da 
implementare in assembler): si evitano del tutto le moltiplicazioni anche se le 
operazioni da compiere impiegano un numero non trascurabile di cicli di clock 
della CPU. Ad esempio per convertire un secondo di filmato 720*576 da RGB a YUV, 
calcoli alla mano occorrono circa 62 milioni di addizioni e 20 milioni di 
istruzioni shift: ipotizzando che in media vengono impiegati 4 cicli di clock 
per le addizioni ( le operazioni più onerose) occorrono circa 300 milioni di 
cicli di clock, in pratica un terzo della capacità di calcolo di una CPU a 900 
Mhz. 
Grazie alle istruzioni MMX e 
SSE è possibile velocizzare i calcoli, grazie al minor numero di cicli di clock 
che occorrono per l'esecuzione delle addizioni, e shift.
Riporto per i più curiosi la parte le routine in C, tratte dal codice del DivX, relative alla conversione e alla creazione della tabella di lookup.
| 
                           
      Conversione  | 
    
In breve la conversione di una immagine dalla modalità RGB---> YUV è una operazione non estremamente gravosa dal punto di vista computazionale, ma in tutti i casi impegnativa, capace di impiegare preziosi cicli di clock della CPU e pertanto rallentare le altre operazioni da svolgere. Stesso discorso per la conversione opposta, RGB---> YUV. Se è possibile, vediamo tra breve come, conviene cercare di evitare tale conversione.
La descrizione YUV è utilizzata nella rappresentazione di gruppi di pixel e in numerosissimi formati di video per cercare di risparmiare il numero di byte da elaborare e di conseguenza velocizzare le operazioni di compressione e decompressione. Vediamo come.
Il tutto nasce dal fatto che l'occhio umano è molto più sensibile alle differenze di luminosità piuttosto che a quelle di colore: la causa sta nella anatomia del nostro occhio. In pratica per noi è molto più semplice osservare differenze di luminosità piuttosto di colore: in altri termini riconosciamo molto più facilmente la differenza tra 2 grigi, piuttosto che le differenze di sfumature cromatiche di due rossi, verdi o azzurri.
Tale caratteristica è stata sfruttata nel passato, nel momento in cui è stata inventata la televisione a colori , in un'epoca in cui occorreva minimizzare l'informazione video da trasmettere, cosa che occupava banda di radiofrequenza; oggi la medesima limitazione dell'occhio umano si la si sfrutta nel campo del video digitale in cui risparmiare informazione video significa velocizzare i calcoli ( sono elaborati meno byte) e in più significa risparmiare in bitrate e di conseguenza di spazio occupato sui vari media: DVD, CDR,....
Lo scopo delle varie modalità YUV utilizzata nell'mpeg è quello di rappresentare un gruppo di pixel, con un numero inferiore di byte rispetto alla analoga descrizione in RGB, cercando di memorizzare più informazione di luminanza piuttosto che di crominanza. Si utilizzano le tipiche descrizioni YUV 4:4:4 4:2:2 4:2:0 4:1:1 riferite a gruppi di 4 pixel. In pratica per ciascuno dei 4 pixel si memorizza la sua luminosità, mentre si risparmia sulla informazione colore e si descrive il colore di un gruppo di pixel invece che del singolo pixel.
Osservo come delle volte le formule relative alla conversione RGB--> YUV sono implementate in maniera leggermente diversa a causa del fatto che è possibile lavorare sull'intervallo di valori 0-255 o 16-235 per ciascun componente R,G,B,Y,U,V. Quando si lavora sull'intervallo di valori 16-235 ci si riferisce alle specifiche ITU-R BT. 601-5,
La prima rappresentazione possibile è la YUV 4:4:4 che non approssima nulla e pertanto non produce nessun tipo di risparmio: tale modalità non è utilizzata nell'mpeg, ma serve per capire poi le altre modalità..
YUV 4:4:4 ; per descrivere il colore di un gruppo di 4 pixel ( due in orizzontale e due in verticale) si utilizzano 12 byte ovvero 3 byte per pixel e cioè 24 bit per pixel : come si evince dalla tabella ogni pixel è descritto dal suo byte Y,U e V .
    
  | 
  
I quattro pixel sono descritti dai 12 Byte Y1,Y2,Y3,Y4, U1,U2,U3,U4, V1,V2,V3,V4
      
  | 
      
      
  | 
      
      
  | 
    
Una immagine 720*576 occupa 1.224.160 byte (720*576 * 3 byte per pixel) esattamente come una analoga immagine memorizzata in RGB
La prima rappresentazione in cui si sopprimono informazioni di colore, in coerenza con la incapacità dell'occhio di osservarle è la modalità YUV 4:2:2
YUV 4:2:2 ITU-R 601 (chiamato YUY2 in ambito Windows Direct Draw e disponibile in Xmpeg4.2a e DVD2avi) ; per descrivere il colore di un gruppo di 4 pixel ( due in orizzontale e due in verticale) si utilizzano 8 byte : ciascun pixel ha il suo valore di luminosità Y mentre i pixel 1 e 2 hanno lo stesso colore U12,V12 e i pixel 3 e 4 hanno lo stesso colore U34,V34.
U12 è in generale la media dei singoli valori U1 e U2 del caso 4:4:4: U12=(U1+U2)/2. Analogamente V12=(V1+V2)/2......
Facendo un pò di calcoli si ha che ogni pixel è descritto IN MEDIA da 2 byte=16 bit ( 8 byte totali/ 4 pixel ) con un risparmio rispetto al caso 4:4:4 del 33% (16/24=0.666 ; 1 - 0.666 = 0.33= 33%)
    
  | 
  
I quattro pixel sono descritti dagli 8 Byte Y1,Y2,Y3,Y4,U12,U34,V12,V34
      
  | 
      
      
  | 
      
      
  | 
    
Una immagine 720*576 occupa 829.440 byte (720*576 * 2 byte per pixel).
Tale formato standardizzato come YUV 4:2:2 ITU-R 601 è utilizzato per le digitalizzazioni di video PAL che non ricaverebbero NESSUN BENEFICIO nell'utilizzo del formato 4:4:4 poichè il PAL utilizza per i colori una banda video dimezzata rispetto al bianco/ nero.
YUV 4:2:0
( chiamato YV12 in 
ambito Windows Direct Draw). 
E' il formato che si 
utilizza per l'mpeg 1 , 2 e 4.
Per descrivere il colore di un gruppo di 4 pixel ( due in orizzontale e due in 
verticale) si utilizzano 6 byte  : ciascun pixel ha il suo valore di luminosità 
Y mentre i 4 pixel  hanno lo stesso colore U e V: incredibile ma vero.
U12 è in generale la media dei singoli valori U1,U2,U3,U4 del caso 4:4:4: U=(U1+U2+U3+U4)/4. Analogamente V=(V1+V2+V3+V4)/4
Facendo un pò di calcoli si ha che ogni pixel è descritto IN MEDIA da 1,5 byte=12 bit ( 6 byte totali/ 4 pixel ) con un risparmio rispetto al caso 4:4:4 del 50% (12/24=0.5= 50%)
    
  | 
  
I quattro pixel sono descritti dai 6 Byte Y1,Y2,Y3,Y4,U,V
      
  | 
      
      
  | 
      
      
  | 
    
Una immagine 720*576 occupa 622.080 byte la metà rispetto al caso 4:4:4.
Per 
convincervi di quanto tale risparmio non influisce sulla qualità , basta 
dare una occhiata ai film in DVD: il motivo è che 4 pixel su un frame di 720*576 
pixel occupano una una porzione piccolissima: solo ingrandendola è possibile 
accorgersi della carenza di informazione di colore. 
 
Truscuro la modalità 4:1:1 utilizzata per la TV Americana, che utilizza lo standard NTSC.
Come detto l'mpeg 1, 2 e 4 utilizzano il formato colore YUV 4:2:0: ciò significa che l'encoder ( chi comprime in mpeg) prima di comprimere il video, se le immagini di ingresso sono in modalità RGB, deve prima di tutto effettuare la conversione RGB--> YUV,. Come seconda cosa l'encoder deve preventivamente eliminare, come visto, parte dell'informazione del colore che SARA' DEL TUTTO trascurata e pertanto in fase di visualizzazione sarà irrecuperabile. In pratica l'encoder prima di comprimere il video in mpeg trasforma ciascun gruppo di 4 pixel ( e nel complesso tutta l'immagine) nella modalità YUV 4:2:0 e poi in seguito effettua la compressione.
Gli encoder si 
distinguono in base alla capacità o meno di leggere il formato colore dei video che 
poi comprimeranno. Normalmente i formati possibili sono quelli visti: 
 
RGB,   YUV 4:2:2 (YUY2),    
YUV 4:2:0 (YV12)
Ecco una tabella relativa alla compatibilità degli encoder e codec più importanti: ricordo che gli encoder sono software di compressione video, mentre i codec sono dei formati di compressione video utilizzabile in qualsiasi software capace di creare file avi
| RGB | YUV 4:2:2 (YUY2) | YUV 4:2:0 (YV12) | Formato  che 
      garantisce  la conversione più veloce  | 
    |||
| Encoder | Tmpeg | SI | NO | NO | RGB | |
| Ligos LSX Encoder (stand alone e plug-in) | SI | NO | NO | RGB | ||
| BBmpeg (stand alone e plug-in) | SI | NO | NO | RGB | ||
| VirtualDub | SI | NO | NO | RGB | ||
| Cinema Craft Encoder Premiere plug-in | SI | NO | NO | RGB | ||
| Cinema Craft Encoder Stand alone | SI | SI | NO | YUV 4:2:2 (YUY2) | ||
| Codec | Codec Main Concept DV codec | SI | SI | NO | YUV 4:2:2 (YUY2) | |
| Codec HUFFYUV | SI | SI | NO | YUV 4:2:2 (YUY2) | ||
| Codec DivX e DivX;-) | SI | SI | SI | YUV 4:2:0 (YV12) | ||
Ho inserito nella tabella due codec molto utilizzati in ambito digital video: il freeware HUFFYUV e il codec di formato DV , della Main Concept. I discorsi sul formato colori, valgono anche per tali codec. A questi 2 codec è possibile aggiungerne altri, ad esempio il WMV della Microsoft, derivato dall'mpeg4 e i numerosi codec Sw mjpeg ( Mainconcept MJPEG codec, Morgan Multimedia MJPEG codec, PICVideo ) tutti nativi nel formato YUV 4:2:2 (YUY2) o YUV 4:2:0 (YV12) . Per questi valgono gli stessissimi discorsi.
Nella pratica quando si utilizza uno dei software in tabella o si uno dei codec indicati ( DivX, Huffyuv ad esempio all'interno di Xmpeg) occorre fornire il video che poi sarà compresso, se è possibile nel formato indicato nella tabella a destra, quello più simile all'mpeg. Ciò garantisce a parità di qualità ottenuta, una velocizzazione del processo di compressione , poichè il software ( o il codec) di compressione evitano di effettuare la conversione RGB---> YUV.
Consideriamo ad 
esempio Tmpeg: come indicato 
in tabella è in grado di operare solo su video RGB. Se carichiamo all'interno di 
Tmpeg un normale file avi o in generale un qualsiasi video che Tmpeg è in grado 
di leggere ( Avi, Quicktime, mpeg1,...) automaticamente tmpeg comunica ai codec 
di lettura che è in grado di leggere solo video RGB e questi gli forniscono il 
video, ad esempio avi,  in formato RGB. Tmpeg poi si preoccuperà di 
elaborare tali video (filtraggi, correzione colore, ridimensionamenti,..), di 
convertirli in YUV 4:2:0 e per ultimo li comprimerà in mpeg.  Se il video 
che tmpeg legge (in ingresso) è in formato YUV, ad esempio un DivX , ci sarà 
l'inutile doppia elaborazione 
YUV-->RGB fatta dal decoder DivX 
che fornisce il video a tmpeg  e 
successivamente la conversione 
RGB--> YUV, fatta da tmpeg. 
(se ad esempio tmpeg converte un video mpeg1-->mpeg2, la conversione YUV-->RGB 
la esegue il codec Mpeg 1 Direct Show di Windows mentre la RGB--> YUV la esegue 
Tmpeg ).
L'utente non può fare in 
tal caso assolutamente nulla !!!!! 
La doppia conversione potrà essere evitata solo quando e se sarà disponibile una 
nuova versione di Tmpeg in cui è implementata la lettura diretta nel formato YUV 
: a riguardo pare che questa possibilità sia abbastanza remota poichè  
tutte le elaborazioni di post processing di Tmpeg (filtraggi vari,..) sono 
implementate dall'autore  utilizzando il formato RGB e l'autore di Tmpeg 
dovrebbe  modificare numerosissime routine.
Quanto visto per Tmpeg vale anche per il Ligos LSX Encoder e per BBmpeg.
Consideriamo il caso 
del Cinema Craft Encoder (CCE) versione stand alone: 
come indicato in tabella è in grado di operare sia su video RGB e sia su video 
YUV 4:2:2. Nel caso analogo a quello visto , in cui con il CCE si deve 
effettuare una conversione DivX--> mpeg, CCE comunica al codec DivX che è in 
grado di leggere video YUV 4:2:0 e questo NON EFFETTUA la conversione YUV--> RGB 
ma una banalissima conversione YUV 4:2:2--> YUV 4:2:0 che il codec DivX esegue 
molto rapidamente. Il CCE ottiene il video direttamente in formato YUV 4:2:2 che 
riconverte in YUV 4:2:0 e poi in mpeg. In questo caso il lentissimo doppio 
passaggio YUV--> RGB e poi RGB--> YUV visto nel caso di tmpeg, Ligos e BBmpeg è 
sostituito dal banale e veloce doppio passaggio YUV 4:2:2--> YUV 4:2:0 e YUV 
4:2:0--> YUV 4:2:2: il risultato è una velocizzazione globale della conversione. 
Osservo comunque come CCE è più veloce rispetto a Tmpeg solo in piccola 
percentuale grazie a quanto visto: la sua maggiore velocità deriva dalla 
ottimizzazione delle routine di compressione rispetto a Tmpeg: l'eventuale 
operazione di conversione di formato in tutti i casi è sempre notevolmente più 
rapida della conversione in Mpeg,operazione  molto più onerosa in termini 
di calcolo.
Anche in questo caso 
l'utente non può fare assolutamente nulla !!!!! 
Nella pratica i casi in cui diventa importante la compatibilità vista in tabella, sono quelli in cui l'utente può scegliere il tipo di formato con cui fornire il video all'encoder o al codec. Ciò succede quando si utilizzano software quali XMPEG, DVDX o Vidomi. In tal caso se possibile è conveniente utilizzare la modalità YUV. Da notare come il collegamento tra XMPEG e le versioni stand alone CCE, Ligos , Tmpeg può avvenire sia tramite avisynth che tramite il Video Server Plugin. Stesso discorso per DVDX. Al contrario il collegamento con i plug-in ( CCE, LSX , BBmpeg plug-in ) è diretto: si setta all'interno del sw il plug-in richiesto, si inseriscono i parametri e si avvia la conversione.
Vediamo in pratica i casi più importanti in riferimento a Xmpeg.
XMPEG: consente di utilizzare i 3 formati settandoli in opzioni/opzioni globali progetto/post trattamento. Tale possibilità è presente anche nella versione Mpeg Xis 3.0e Expert Edition V2
| RGB | |
| YUV 4:2:2 (YUY2) | |
| YUV 4:2:0 (YV12) | 
Nella
Mpeg Xis
3.0e Expert Edition V2 a fianco di YV12 è indicato "for DivX" per ricordare 
quello che vedremo tra un pò 
.
| 
     Xmpeg  | 
  ||
| 
     Compressione e software utilizzato  | 
    
     Modalità consigliata  | 
    
     Note  | 
  
| 
     Creazione di avi con video in formato DivX e Divx;-)  | 
    
     Per 
    poter utilizzare la modalità YV12 occorre utilizzare uno degli AVI plug-in 
    forniti insieme con Xmpeg: utilizzando ad esempio il vecchio avi plug-in v.0.58  | 
  |
| Creazione di avi con video in formato HUFFYUV | Stesso discorso del DivX: per poter utilizzare la modalità YUY2 occorre utilizzare uno degli AVI plug-in forniti insieme con Xmpeg: utilizzando ad esempio il vecchio avi plug-in v.0.58 fornito con le versioni di flask della serie 0594, si è costretti ad utilizzare la modalità RGB, l'unica possibile.r | |
| Creazione di mpeg tramite uno dei seguenti plug-in installati nella directory di Xmpeg: Ligos LSX Encoder,BBmpeg, Cinema Craft Encoder . | Con tali plug-in è 
    possibile utilizzare solo la modalità RGB: osservo che per utilizzare i 
    plug-in con Xmpeg, dopo l'installazione, occorre rinominarli secondo la 
    sintassi  Nome.cm.Xmpeg. Per i tre plug-in visti basta chiamarli, bbmpeg.cm.Xmpeg, lsx.cm.Xmpeg, ccet.cm.Xmpeg.  | 
  |
| Creazione di mpeg 
    tramite una delle seguenti "catene": XMPEG-->avisynth--> Tmpeg XMPEG-->Video Server Plugin--> Tmpeg XMPEG-->avisynth--> LSX Encoder stand alone XMPEG-->Video Server Plugin--> LSX Encoder stand alone XMPEG-->Video Server Plugin--> Virtual Dub  | 
    Nonostante la compatibilità 
    del videoserver e avisynth con la modalità YUV, questa non può essere usata 
    a causa della impossibilità di Tmpeg e del Ligos encoder di leggere video 
    YUV. E' necessario pertanto lasciare la modalità RGB. Osservo come non ho considerato il caso del collegamento di Xmpeg con BBmpeg stand alone poichè tale versione è identica con il BBmpeg plug-in: al contrario il LSX encoder stand alone comprime con una qualità superiore rispetto alla versione plug-in e per una migliore qualità conviene utilizzare una delle 2 catene viste. 
    La catena XMPEG-->Video 
    Server Plugin--> 
     
    Virtual Dub 
    può essere utile per creare degli 
    avi e contemporaneamente utilizzare gli ottimi filtri di virtual dub; è 
    inoltre possibile poi passare ulteriormente i dati ad un altro sw, grazie al 
    frame serving di Vdub; si può creare ad esempio la catena (con 2 avi 
    virtuali)  | 
  |
| XMPEG-->Video Server Plugin--> Cinema Craft Encoder stand alone | Attenzione a non utilizzare il formato YV12 che risulta incompatibile . | |
Un software analogo ad Xmpeg è DVDX http://www2.labdv.com/dvdx giunto alla versione 1.8: personalmente lo considero un buon software che comunque ha ancora un certo margine di miglioramento: ottima la possibilità di collegarlo tramite il videoserver plug-in a tmpeg o a CCE Encoder. Chi non è interessato a tale sw può tranquillamente passare al paragrafo successivo.
DVDX rispetto a XMPEG ha il vantaggio di disporre di un convertitore mpeg incorporato con il quale creare direttamente video per SVCD, XVCD, VCD; la qualità è inferiore rispetto a tmpeg, ma in tutti i casi discreta. Inoltre ha ancora un bug relativo al ridimensionamento nel caso in cui si creano SVCD, XVCD non anamorfici , partendo da DVD anamorfici, il caso normalmente più utilizzato; il video che ne risulta è deformato (troppo schiacciato). Per ovviare alla cosa occorre inserire i seguenti parametri:
Nell'ipotesi di SVCD 480*576,
Setting/output 
setting/
Setting/crop/edit 
coordinates 
Per risoluzioni quali 
352*288, 352*576, 704*576 e 720*576 occorre sempre inserire Setting/crop/edit 
coordinates
 , mentre 
in Setting/output 
setting/ occorre ovviamente inserire la risoluzione scelta: 352*288, 
352*576,.....
La prima analogia con Xmpeg deriva intanto dal fatto che DVDX legge i DVD e esattamente come Xmpeg è in grado di convertire i DVD direttamente da DVD-ROM, decriptandoli grazie alle capacità Deccs: il grosso vantaggio di DVDX è che memorizza temporaneamente su HD o in memoria parte dei DVD da convertire (la dimensione la si può scegliere liberamente) evitando di "stressare" la meccanica del DVD-Rom. Con un buffer di 50 MByte (fattibile per chi ha almeno 256 MB di RAM, il DVD rom viene utilizzato ogni minuto o due, a secondo della velocità di conversione).
Ritornando al 
discorso compatibilità con i diversi formati video in uscita, DVDx si comporta 
in maniera simile a Xmpeg: è possibile convertirei DVD in:
- Mpeg 1,2, e quindi VCD, SVCD, XVCD sfruttando direttamente l'encoder interno
- Avi utilizzando i codec presenti nel sistema
- è possibile utilizzare un qualsiasi plug-in Premiere compatibile installato 
all'interno della directory di Xmpeg: i plug-in devono avere la stessa 
estensione utilizzata dai plug-in di Premiere, ovvero Nome.prm (si possono 
copiare quelli presenti nella directory plug-in di premiere senza bisogno di 
rinominarli come nel caso di Xmpeg).
La scelta del formato 
di uscita la si fa tramite setting/output setting

Selezionando VideoCD e Super Video CD è possibile creare mpeg 1 e 2, tramite l'encoder 
interno: in tal caso automaticamente questo utilizza la modalità YUV. 
Selezionando AVI output è possibile creare file avi con uno dei codec presenti 
nel sistema: in tal caso il formato video RGB o YUV lo si seleziona tramite 
l'opzione setting/output setting
. 
Qui valgono tutti i discorsi visti con Xmpeg: per velocizzare le operazioni 
occorre utilizzare la modalità YUY2 ( la YUV 4:2:2) per 
DivX, DivX;-), DV e HUFFYUV: 
la YV12 teoricamente la più indicata, non è ancora disponibile (probabilmente lo 
sarà nelle prossime versioni). Osservo come per gli altri codec sono disponibili 
2 modalità RGB: conviene usare la RGB 24 di fatto identica alla RGB 32 ( che 
sfrutta il canale alpha normalmente inutilizzato).
L'altra possibilità è 
quella di utilizzare i plug-in premiere compatibili, installati nella directory 
di DVDX: per selezionare tale possibilità basta cliccare su setting/output 
setting 
Valgono tutti i discorsi visti per Xmpeg: occorre settare sempre la modalità RGB 24 con l'unica eccezione della catena XMPEG-->Video Server Plugin--> Cinema Craft Encoder stand alone per la quale conviene usare la modalità YUY2.
Concludo dicendo come 
ho provato la catena DVDX-->Video 
    Server Plugin--> 
    Tmpeg ottenendo 
degli ottimi risultati qualitativi grazie alla superiore capacità di 
compressione di Tmpeg rispetto all'encoder interno di DVDX; a livello di 
velocità, con il mio P4 1700, sfruttando la versione di DVDX ottimizzata per il 
P4, per la creazione di un SVCD standard (480*576 2500 Kbits/s) ottengo con la 
catena vista 9,5 fotogrammi al secondo contro gli 8,7 dell'encoder interno. Che 
dire: migliore velocità e qualità grazie al mitico Tmpeg. 
A titolo di esempio con Xmpeg-->Video 
    Server Plugin--> 
    Tmpeg ottengo 
circa 9,9 fotogrammi al secondo, praticamente la stessa velocità.
Ci tengo a sottolineare come non ho ancora fatto test approfonditi sulla qualità con cui DVDX decodifica i DVD (so di certo che XMPEG non aggiunge nessun artefatto mentre è da confermare che lo stesso vale per DVDX): ad occhio la qualità di decodifica sembra la stessa (da non confondere con la qualità di compressione mpeg che non è di certo al top) , ma mi riservo di fare ulteriori verifiche. Altra cosa da verificare, il mantenimento del sincronismo audio-video: occorre comprimere almeno 2-3 film interi per poter esprimere una valutazione obbiettiva. In tutti i casi DVDX sembra essere un ottimo software potenziale "concorrente" di Xmpeg.
Mi fermo qui, osservando come lo stesso discorso visto per Xmpeg e DVDX vale per ogni software di compressione, capace di scegliere il formato colore da passare al codec di compressione o plug-in; in particolare per le compressioni DivX e DivX;-) conviene sempre utilizzare la modalità YUV 4:2:0 (YV12) o al limite YUV 4:2:2 (YUY2) .
In conclusione che vantaggi o svantaggi ci sono nell'utilizzare la modalità di colore YUV (quando possibile) rispetto alla generica RGB ?
Svantaggi, non ce ne sono. Naturalmente sono nell'ipotesi in cui si sta utilizzando il YUV per comprimere in mpeg 1 ,2, 4 ( DivX;-), DivX, compresi) o si sta usando un codec che usa nativamente la modalità YUV (ho visto il codec DV e l'Huffyuv, WMV, Mjpeg..) : è ovvio che se parto da un originale RGB e converto il video in un formato RGB, se utilizzo un plug-in in modalità colore YUV, perdo parte dell'informazione video . Non penso esista una diabolica combinazione SW- plug-in che permetti una cosa simile!!!
Riguardo i 
    vantaggi ce ne sono 2.
    La doppia conversione colore YUV--> RGB 
    e RGB--->YUV a seguito delle approssimazioni dei calcoli porta ad un leggero errore sui 
    colori così che ad esempio un pixel (100, 100, 100) dopo la doppia 
    conversione si trasforma in  (100, 99, 101). Nella pratica eventuali 
    errori del genere, si manifestano in una leggera differenza cromatica. Molto 
    probabilmente tale variazione deriva dalla diversa formula con cui sono 
    effettuate le conversioni: esistono diverse "interpretazioni" della 
    relazione che passa tra la modalità RGB e YUV, che nascono dal fatto che è 
    possibile lavorare sul range di valori 0-255 o 16-235 per ciascun componente 
    RGBYUV.
Il secondo vantaggio è quello più importante: la velocizzazione della compressione a causa della mancata, inutile conversione YUV--> RGB e RGB--->YUV. Quantificare il risparmio non è possibile in assoluto perchè tutto dipende dal tipo di conversione che si sta facendo (dimensione video, codec, tipo di video da convertire,....).
Ecco un test eseguito con il mio P4 1700 Mhz, 384 MB SDRAM, Matrox G450 riferito ad un minuto di video estratto da un DVD (l'episodio "il dominio del Drago" della serie Spazio 1999).
Prima di tutto ho valutato la velocità con cui viene decodificato il filmato (720*576 pixel) sia nel caso in cui si attiva la visualizzazione e sia quando questa è disattivata; la maggiore lentezza del caso "preview attivato", deriva naturalmente dal tempo impiegato per il passaggio dei dati dalla memoria centrale alla scheda video. Non è riportato il caso RGB con previsualizzazione disattivata poiché ciò non è possibile con Xmpeg.
Segue il caso in cui 
lo stesso filmato è ridimensionato a 512*288, classica risoluzione dei DivX per 
film 1.78:1 da comprimere in un solo CD. La velocizzazione della modalità YUV è 
minore a causa dei calcoli del ridimensionamento che sono impegnativi a causa 
del filtraggio (ho usato la modalità Bressenham), 
operazione  onerosa in termini di calcolo.
Segue il test più importante, ovvero quello relativo alla compressione del video 
ridimensionato a 512*288 e compresso in DivX 4.12, con quality = Slowest 
(migliore qualità): l'audio è stato lasciato in PCM non compresso. 
La velocizzazione nella modalità 4:2:0 è del 23%, valore indiscutibilmente 
notevole. Sottolineo ancora una volta, come tale velocizzazione NON comporta 
nessun peggioramento nella qualità che in teoria dovrebbe essere migliore 
rispetto al caso RGB a causa della mancata doppia conversione YUV-->RGB e RGB--> 
YUV ; nella pratica confrontando le due conversioni (modalità RGB  o 
modalità YUV12) , è possibile osservare una leggera variazione cromatica e in 
più una immagine leggermente più chiara nella modalità YUV.)
| 
       Velocità espresse in fps, fotogrammi al secondo  | 
    ||||
| Modalità colore | 
      Decodifica video 
      720*576   senza ridimensionamento. Preview disattivato  | 
      
      Decodifica video 
      720*576   senza ridimensionamento. Preview attivato  | 
      
       Decodifica  
      video e  ridimensionamento a 512*288  | 
      
      Divx 4.12  512*288 Quality= Slowest  | 
    
| RGB | - - | 28,8 (riferimento) | 34,5 (riferimento) | 20,9 (riferimento) | 
| 4:2:2 (YUY2) | 58,8 (riferimento) | 44,5 (+54%) | 40,4 (+17%) | 24,5 (+17%) | 
| 4:2:0 (YV12) | 67,1 (+14%) | 52,6 (+83%) | 42,7 (+24%) | 25,7 (+23%) | 

Concludo con una breve nota sul legame tra il formato colore dei video digitale e i decoder che li visualizzano.
I DVD player (WinDVD, PowerDVD, 
il Cinemaster,....)  e in generale tutti player capaci di leggere 
visualizzare video mpeg 1,2, e 4 / media player compreso), leggono il flusso mpeg, lo decodificano e ottengono così una 
serie di immagini in modalità YUV 4:2:0. Terminata questa operazione, passano 
alla scheda video le immagini in YUV, e quest'ultima trasforma tali immagini in 
RGB effettuando eventualmente il ridimensionamento. 
Il motivo della delega alla scheda video è triplo: 
- il primo 
perchè le schede video sono ormai ottimizzate ad eseguire le opazioni di 
trasformazione YUV---> RGB e il ridimensionamento; in tutti i casi è 
utilizzato il ridimensionamento tramite bilinear filtering (ad esempio tutte le 
Matrox); pare invece che le ultime ATI Radeon utilizzino il più evoluto filtro 
trilineare.
- il secondo 
motivo 
è che in questa maniera non è minimamente appesantita la CPU, che molto spesso 
non ha la potenza di calcolo per fare conversione colore + ridimensionamento;
- il terzo 
motivo è legato alla dimensioni del flusso dati che viene trasferito dalla 
memoria del computer alla scheda video; un video 720*576 in formato YUV ha un 
bitrate di 14,83 Mbyte/s, mentre ad esempio se si delegasse al software la 
completa elaborazione del video, occorrerebbe fornire alla scheda video ad 
esempio video il full screen 1024*768 in formato RGB che ha un bitrate di 56,25 
Mbyte/s,  quasi 4 volte superiore al caso di prima e capace di saturare il 
bus dati del PC.
Per le operazioni di ridimensionamento e conversione YUV--> RGB, le schede video utilizzano l'overlay, in pratica una modalità che visualizza sempre 16 milioni di colori, indipendentemente dalla profondità di colore selezionata nel desktop. Questo è il motivo per cui i filmati appaiono cromaticamente corretti anche se si utilizza il desktop ad 8 bit ( 256 colori) o 16 bit, ( 65536 colori).
26 febbraio 2002
Ritorna alla pagina digital video