[yv12][yuy2][rgb32][rgb24]

ConvertBackToYUY2 / ConvertToRGB / ConvertToRGB24 / ConvertToRGB32 / ConvertToYUY2 / ConvertToYV12

ConvertBackToYUY2(clip, bool "interlaced")

ConvertToRGB(clip [, string "matrix"], bool "interlaced")

ConvertToRGB24(clip [, string "matrix"], bool "interlaced")

ConvertToRGB32(clip [, string "matrix"], bool "interlaced")

ConvertToYUY2(clip, bool "interlaced")

ConvertToYV12(clip, bool "interlaced")


interlaced: może przyjąć wartość true - przeplot - lub false - materiał bez przeplotu

matrix: matryca, ???


We wcześniejszych wersjach AviSynth (do wersji 2.50) można było rzutować pomiędzy dwoma przestrzeniami kolorów (RGB i YUY2). Począwszy od wersji 2.50 można również rzutować z trzecią przestrzenią kolorów - YV12. 
Filtry te rzutują przestrzeń kolorów klipu do innej. Jeśli video jest już w określonej przestrzeni dany filtr będzie pozostawiał klip bez zmiany (RGB przybiera w całym klipie znaczenie RGBA). ConvertToRGB rzutuje do RGB32 chyba, że klip jest w RGB24. Jeśli potrzebujesz RGB 24-bitowe użyj ConvertToRGB24, a jeżeli potrzebujesz 32-bitowe to ConvertToRGB32.
SDTV (StandarD TeleVision) i HDTV (High Definition TeleVision) uzywają innych rzutowań. Jeśli materiał źródłowy ma wysoką rozdzielczość, a rzutuje się z YUV do RGB to powinno się użyć:
 
ConvertToRGB(clip, "rec709", true)  # lub 
ConvertToRGB(clip, "rec709", false)
# w zależności od tego czy materiał źródłowy ma przeplot czy nie

w innym przypadku tylko tak:

ConvertToRGB(clip, true)  # lub 
ConvertToRGB(clip, false) # w zależności od tego czy materiał źródłowy ma przeplot czy nie

Od wersji 2.51/2.52 dodano dodatkowy parametr interlaced (domyślnie interlaced=false). Gdy ustawiony jest na false oznacza, że clip nie ma przeplotu, natomiast wartość true - materiał z przeplotem. Opcja ta jest dodana, ponieważ przy rzutowaniu materiału z przeplotem tym sposobem: (załóżmy, że klip ma przeplot i jest w przestrzeni kolorów YV12):

SeparateFields(clip)
ConvertToYV12
Weave

wykazuje, że obraz jest niepoprawnie zdekodowany. Zamiast tego jest lepsze rozwiązanie: 

ConvertToYV12(clip, interlaced=true)

Wszystkie filtry VirtualDub (polecenie LoadVirtualdubPlugin, zobacz Plugin) wspomagają tylko materiał wejściowy z przestrzenią kolorów RGB32.

RGB24, RGB32: Kolory są przechowywane jako wartości kolorów: czerwonego, zielonego i niebieskiego. W RGB32 jest dodatkowy kanał alpha, który odpowiada za nieprzezroczystości. Rozdzielczość klipu może przyjąć każdą wartość.

YUY2: Obraz jest przechowywany jako wartość lumy Y (jasność) i dwie wartości chromy U, V (kolor). Dla dwóch poziomych pikseli jest tylko jedna wartość chromy i dwie wartości lumy (dwa Y, jeden U, jeden V). Zatem szerokość klipu musi być wielokrotnością dwójki. 

YV12: Tak samo jak YUY2, obraz jest przechowywany jako wartość lumy i chromy. Z tym wyjątkiem, że dla 4 pikseli (kwadrat 2x2) jest tylko jedna wartość chromy. Zarówno szerokość jak i wysokość musi być podzielne przez dwa, natomiast jeśli video ma przeplot to dodatkowo wysokość musi być podzielne przez 4 (ponieważ kwadrat 2x2 jest pobierany z pola, a nie z klatki).

Niektóre filtry sprawdzają różne założenia dla rozdzielczości, a niektóre nie zwracają uwagi na ten parametr, przez co czasem, w najgorszym wypadku, wystąpi błąd informujący o złej rozdzielczości lub obraz klipu będzie zniekształcony.
Przestrzeń YUY2 jest szybsza od RGB, natomiast YV12 jest równie szybka jak YUY2 i jest stworzona dla formatu MPEG.

Powrotne rzutowanie do początkowej przestrzeni nie pomoże uniknąć utraty szczegółów (możliwe jest też powstawanie zniekształconych kolorów). Jeśli wielokrotne rzutowanie jest niezbędne można użyć filtru ConvertBackToYUY2 do rzutowania z powrotem do YUY2, oczywiście, jeśli materiał źródłowy miał już wcześniej przestrzeń kolorów YUY2. Zmniejszy to rozmazanie kolorów, ale powstały materiał nadal nie jest tak dokładny jak jego oryginał.
W większości przypadków filtr ConvertToRGB nie powinien być konieczny. Jeśli materiał wyjściowy jest w przestrzeni kolorów YUY2, a aplikacja spodziewa się RGB, system skorzysta z zainstalowanego kodeka YUY2 do zrobienia rzutowania bez wiedzy użytkownika. Jednakże, jeśli nie jest zainstalowany kodek YUY2 lub jeśli kodek rzutuje niepoprawnie z YUY2 do RGB, to w tym skrajnym przypadku, można skorzystać z filtra AviSynth. Jednak nie jest to jedyne rozwiązanie. Lepszym wyjściem niż filtr ConvertToRGB jest Huffyuv. Huffyuv będzie się zachowywać jak kodek YUY2 jeśli inny kodek tego typu nie jest zainstalowany.

ConvertToRGB24 i ConvertToRGB32 może być wykorzystane do wymuszenia na AviSynth, użycia określonej metody przechowywania danych dla RGB. Dane RGB24 są często dużo wolniejsze do przetwarzania niż dane RGB32, dlatego jeśli materiał wejściowy jest w RGB24, można zrzutować do RGB32, by przyspieszyć pracę AviSynth. Nie ma żadnych korzyści z używania przestrzeni RGB24, oprócz tego, że TMPGEnc wymaga materiału wejściowego w tej przestrzeni.


Przykład:

control = ConvertToYUY2()
test = ConvertToYUY2(ConvertToRGB(ConvertToYUY2(ConvertToRGB(control))))
test = ConvertToYUY2(ConvertToRGB(test))
return Subtract(test,control)

#

można zauważyć niewielkie zniekształcenie z powodu rzutowania pomiędzy YUV a RGB


translated by Slim