ConvertToRGB / ConvertToRGB24 / ConvertToRGB32
ConvertToYUY2 / ConvertBackToYUY2 / ConvertToYV12

ConvertToRGB (clip [, string "matrix"] [, bool "interlaced"])
ConvertToRGB24 (clip [, string "matrix"] [, bool "interlaced"])
ConvertToRGB32 (clip [, string "matrix"] [, bool "interlaced"])
ConvertToYUY2 (clip [, string "matrix"] [, bool "interlaced"])
ConvertToYV12 (clip [, string "matrix"] [, bool "interlaced"])
ConvertBackToYUY2 (clip [, string "matrix"])

matrix: par défaut sur la valeur unspecified (non-spécifiée). Contrôle les coefficients de couleur et les facteurs d'échelle utilisés dans les conversions RGB - YUV.

interlaced: par défaut sur false (faux). Utilise un profil entrelacé pour les conversions de chrominance YV12 - YUY2/RGB.

Avant v2.50, Avisynth pouvait gérer en interne deux espaces de couleur: RGB et YUY2. A partir de v2.50, AviSynth gère un troisième espace de couleur: le YV12. Ces filtres permettent de passer de l'un à l'autre. Si la video est déjà dans le format demandé, elle est transmise sans être modifiée. Dans toute cette documentation, le terme RGB désigne en fait RGBA = RGB32. ConvertToRGB converti en RGB32 sauf si votre clip est en RGB24. Si vous avez besoin de RGB 24-bit pour une quelconque raison, utilisez ConvertToRGB24 explicitement et ConvertToRGB32 pour faire le contraire.

La syntaxe et le fonctionnement de ConvertToRGB24 est identique à celui de ConvertToRGB, sauf que le format de sortie est en 24-bit. Si la source est en RGB32, le canal alpha sera supprimé.

Depuis v2.51/v2.52 l'option facultative interlaced a été ajoutée (interlaced=false (faux) est le paramètre par défaut). Quand ce paramètre est sur false (faux), cela veut dire que le clip est progressif, quand il est sur true (vrai), cela veut dire que le clipest entrelacé. Voici un exemple qui montre pourquoi cette option à été rajoutée (on suppose au départ que le clip est en YV12 et qu'il est entrelacé):

SeparateFields(clip)
ConvertToYV12
Weave
Le clip sera mal rééchantillonné. C'est mieux d'utiliser la commande suivante:
ConvertToYV12(clip, interlaced=true)
Notez que interlaced=true ne fonctionne que si une conversion YV12 <-> YUY2/RGB est demandée; dans les autres cas, elle est ignorée. Vous pouvez en savoir plus en consultant "Conversions de couleurs et video entrelacé / basé sur des champs" (en anglais).

Contrairement à ce que l'on pourrait penser, il n'y a pas une façon unique d'effectuer la conversion de l'espace YUV en RGB. Dans AviSynth, les deux lesfaçons les plus utilisées sont implémentées: Rec.601 et Rec.709 (nom des spécifications officielles). Bien que ça ne soit pas correct dans tout les cas, les commandes suivantes devrait être correctes dans la plupart des cas:

La première méthode (Rec.601) doit être utilisée quand votre source est de type DivX/XviD ou sur une capture analogique:

ConvertToRGB(clip)

La seconde méthode (Rec.709) doit être utilisée si votre source est de type DVD ou HDTV:

ConvertToRGB(clip, matrix="rec709")

Dans v2.56, le contraire est également possible:

ConvertToYUY2(clip, matrix="rec709") or ConvertToYV12(clip, matrix="rec709")

Dans v2.56, matrix="pc.601" (et matrix="pc.709") vous permettent de faire la conversion RGB <-> YUV en conservant la plage de luminance, c'est à dire RGB [0,255] <-> YUV [0,255] (à la place de la conversion habituelle/par défaut RGB [0,255] <-> YUV [16,235]).

Tout les filtres VirtualDub (chargés avec la commande LoadVirtualdubPlugin, voir Plugins) utilisent une entrée en RGB32.

RGB24, RGB32: Les valeurs sont enregistrées en tant que valeurs rouge, vert et bleu. En RGB32, il y a un canal Alpha en plus pour la transparence. Les image peuvent avoir n'importe quelle taille.

YUY2: L'image est enregistrée comme la combinaison d'une valeur de luminance Y et de deux valeurs de chrominance U et V. Pour deux pixels horizontaux, il y a seulement une valeur de chrominance et deux valeurs de luminance (deux Y, une U, une V). La largeur doit donc être multiple de 2

YV12: Même chose que pour YUY2, mais il y a seulement une valeur de chrominance pour 4 pixels (un carré 2x2). les deux dimensions de l'image doivent donc être un multiple de 2. Si la video est entrelacée, la hauteur doit être multiple de 4 parce que le carré 2x2 est pris sur un champ et pas sur une image.

Certaines fonctions vérifient les dimensions des images, certaine arrondissent les valeurs, il peut donc y avoir certaines parties de l'image avec des distorsions ou des erreurs.

Travailler en YUY2 est plus rapide qu'en RGB. YV12 est encore plus rapide que YUY2 et est de plus le format natif du format MPEG; il y a donc moins de conversions d'espaces de couleurs.

Ces conversions ne sont pas sans pertes, utilisez en donc le moins possible. Si des conversions multiples sont absolument nécessaires, utilisez ConvertBackToYUY2 pour revenir en YUY2 si votre source à déjà été dans ce format. Cela réduira le lissage des couleurs, mais il y aura toujours un peu de perte de détail.

Dans la plupart des cas, le filtre ConvertToRGBn'est pas nécessaire. Si AviSynth renvoie une image dans le format YUY2 et qu'une application attend du RGB, un codec YUY2 du système déjà installé fera la conversion. Cependant, si aucun codec YUY2 n'est installé, ou bien si le codec converti mal (comme c'est le cas avec les codecs ATI et d'autres), vous pouvez utiliser le filtre interne d'AviSynth à la place.

Huffyuv agit comme le codec YUY2 si aucun autre codec n'est installé. Donc, si vous installez Huffyuv ET desinstallez tout les autres codecs YUY2, vous n'aurez jamais besoin de ConvertToRGB.

ConvertToRGB24 et ConvertToRGB32 peuvent être utilisés pour forcer AviSynth à utiliser une méthodes spécifique pour enregistrer les données RGB. Les données RGB24 sont souvent plus lentes à traiter que les données RGB32, donc si votre source est en RGB24, vous pouvez gagner de la vitesse en convertissant en RGB32. Il n'y a aucun avantage à utiliser le RGB24 sauf avec TMPGEnc et VFApi qui demandent ce format en entrée.

# Il existe une légère distorsion créée par la conversion entre YUV et RGB.
# Voyons si nous pouvons la voir.
control = ConvertToYUY2()
test = ConvertToYUY2(ConvertToRGB(ConvertToYUY2(ConvertToRGB(control))))
test = ConvertToYUY2(ConvertToRGB(test))
return Subtract(test,control)

$English date: 2004/12/05 22:31:44 $
French translation date: 2005/11/05 JasonFly macpaille@users.sourceforge.net