I. Introduction
Pour bien comprendre les differences de vitesse et de qualité suivant
les methodes de représentation des couleurs, il est nécessaire
de connaitre les facons dont celles-ci sont codées.
On ne s'attachera ici qu'aux modes les plus courants, ceux utilisés
par le mpeg 1/2/4 et les outils classiques : virtual dub, avisynth etc...
II. Quantisation et espace de couleur
La quantisation est l'opération de transformer une données
analogique en donnée discrete.
Par exemple l'echantillonage d'un son issu d'un lecteur de disques vinyls
en WAV-PCM.
Ou une acquisition vidéo avec une carte eponyme.
Cette opération a deux facteurs dimensionnants :
- La frequence ou résolution : C'est le nombre d'echantillon (son/fq)
ou la résolution (image)
- La dynamique: C'est le nombre de valeurs possibles pour un echantillon
(8 bits, 16 bits etc...)
Les deux sont importants. Une image en 1024x768 mais avec 4 bits par couleur
sera moins belle qu'une image en 352x288 avec 16 bits par couleurs.
Il y a deux possibilités de coder la couleur (on oubliera les CMYK
utilisé en imprimerie) :
- RGB : Les couleurs sont séparées en leurs composantes
suivant ce choix de 3 couleurs de bases.
- YUV: Les couleurs sont séparés en luminosité (luma)
et une composante "bleu" (chroma1) et "rouge" (choma2). Ce n'est pas vraiment
du bleu et du rouge mais cela aidera pour la compréhension.
Pourquoi ce codage bizarre ? Deux utilisations.
La premiere est liée à l'apparition de la couleur. Dans les
diffusions hertzienne en noir et blanc, seul le canal luma etait disponible.
L'ajout d'un second canal avec les informations de chroma a permis un mode
de diffusion compatible couleur et noir -blanc.
La seconde est lié a la facon dont sont percues les couleurs par l'oeil.
Celui ci est beaucoup plus sensible au informations de luma que de chroma.
Ce fait est utilisé pour diminuer les informations de chroma (et donc
la taille /bande passante) sans degradation trop prononcée perceptible.
III RGB 16, RGB 24 et RGB32
Ces modes sont assez simple.
En mode RGB15 ou RGB16, 5 bits sont alloués par composantes. D'ou
huit fois moins de nuances que dans les autres modes.
Cela provoque des effets d'a-plats visibles, par exemple dans le mode de
previsualisation de virtual dub. A eviter.
Le RGB24 comporte 8 bits par composantes.
Le RGB32 comporte également 8 bits par composantes et 8 bits qui sont
soit inutilisés, soit utilisés comme alpha channel.
L'alpha channel indique la transparence. L'interet du RGB32 (outre l'alpha
channel) est que les données sont alignées en memoire
et donc les transferts sont plus rapides. Mais ce gain est plus que compensé
par la taille plus importante.
Virtual dub travaille en RGB24, meme si il fait souvent des conversions en
YUY2 en interne.
Les données RGB sont entrelacées. Les composantes RGB sont
melangées. R0 G0 B0 R1 G1 B1 etc..
III YUV, YUY2 et YV12
3.1 YUV
Ce mode est similaire au RGB24, 8 bits par composante.
Le YUV peut etre présent sous forme planaire ( tous les Y, tous les
U, tous les V) ou en mode entrelacé (packed)
Y0 U0 V0 Y1 U1 V1
3.2 YUY2
Ce mode est uniquement en mode entrelacé (packed)
Il tire partie de la moindre perception des composantes chroma de l'oeil.
Chaque pixel a sa prope composante Y (luma) mais partage sa chroma avec son
voisin.
L'encodage est le suivant :
Y0 U0 Y1 V0 ce qui donne 2 pixels (Y0,U0,V0) (Y1,U0,V0)
Il faut donc lire 4 octets pour generer 2 pixels.
Il est aussi appelé 422, 4 informations de luma, et la moitié
de chroma1 et chroma2.
C'est le mode natif de avisynth.
3.3 YV12
Ce mode est présent uniquement en planaire (planar).
Tous les Y, puis les U et enfin les V.
L'information de chroma est partagée en X
et en Y.
4 pixels partagent donc la meme chroma.
On a
Y0 Y1 .........
Y0' Y1' ........
U0
V0
C'est pourquoi il est appelé YV12, il faut en moyenne 12 bits par
pixel (8bits de luma + 8/4 de chroma1 + 8/4 de chroma2).
Il est egalement appéle 420, car pour 4 pixels on a 4 information
de luma, et 2 de chroma1 ou 2 de chroma2.
On peut aussi dire 411
C'est le mode interne de compression mpeg1, 2 ou 4.
IV Conclusion
Les conversions sont possibles entre ces modes mais engendrent des perted
et donc des defauts.
Il vaut mieux tant que possible travailler dans l'espace de couleurs de la
source.
En terme de taille, voir le tableau suivant
Mode
|
Taille
|
Ratio
|
RGB16
|
x*y*2
|
66%
|
RGB24
|
x*y*3
|
100 %
|
RGB32
|
x*y*4
|
133 %
|
YUV
|
x*y*3
|
100 %
|
YUY2
|
x*y*2
|
66 %
|
YV12
|
x*y*1.5
|
50 %
|