Layer [yuy2][rgb32]

Layer(base_clip, overlay_clip, string "op", int "level", int "x", int "y", int "threshold", bool "use_chroma")

Dieses Filter kann zwei Clips mit unterschiedlicher Grösse (aber mit gleichem Farbformat) mischen, wobei verschiedene Mischmethoden verwendet werden können. Für eine Pixel-basierte Transparenz-Maske wird der vierte Farbkanal beim Format RGB32 (der A- oder alpha-Kanal) verwendet.

Base_clip: das unten liegende Clip, der auch die Grösse und die anderen Video- und Audio-Eigenschaften des entstehenden Clips bestimmt.
Overlay_clip: das Clip welches zum Base_clip dazugemischt wird.
op: die Mischoperation, die durchgeführt wird. Das kann sein: "add" (Addieren), "subtract" (Subtrahieren), "brighten" (Aufhellen), "darken" (Verdunkeln), "fast" (die Schnellvariante), "mul" (Multiplizieren)
level: 0-255, gibt die Stärke der durchgeführten Operation an. 0: das base_clip wird nicht verändert, 255: die maximale Stärke wird verwendet
x, y: die Verschiebung des overlay_clip gegenüber dem base_clip.
threshold: gibt es nur für "lighten" and "darken" (ein Schwellwert)
use_chroma: gibt an, ob auch die Farbinformation von overlay_clip verwendet wird, der Standardwert ist use_chroma=true (Farbe wird verwendet). Bei use_chroma=false wird nur die Helligkeitsinformation verwendet.

Es gibt einige Unterschiede vom Verhalten und den erlaubten Parametern, die vom Farbformat und der verwendeten Mischoperation abhängen:

o
Bei YUY2 gibt es keinen alpha-Kanal, daher auch keine Transparenz-Maske. Das Verhalten ist also so, als ob die Maske überall undurchsichtig wäre.

o
Bei RGB32 wird der alpha-Kanal vom overlay_clip mit level multipliziert, der effektive Wert für alpha für ein Pixel ist also alpha = (alpha_mask * level) / 256. Daher muss für eine Operation mit voller Stärke alpha und level gleich 255 sein.

Diese Operationen verhalten sich für RGB32 und YUY2 gleich:

"fast": use_chroma muss TRUE sein, level und threshold werden nicht verwendet.
        Das Ergebnis ist einfach der Mittelwert zwischen base_clip und overlay_clip.

"add":  threshold wird nicht verwendet. Der Unterschied zwischen base_clip und overlay_clip wird
mit alpha multipliziert und zum base_clip dazugezählt. alpha=0 -> nur das base_clip ist sichtbar, alpha=128 -> base_clip und overlay_clip werden gleichwertig gemischt, alpha=255 -> nur das overlay_clip ist sichtbar. "subtract": das gleich wie bei "add", allerdings wird das overlay_clip vorher invertiert.

Diese Operationen arbeiten (anscheinend) nur in YUY2 korrekt:

"mul": threshold wird nicht verwendet. Das base_clip wird so wie das overlay_clip "eingefärbt", use_chroma sollte also TRUE sein.
       alpha=0 -> nur das base_clip sichtbar, alpha=255 -> ungefähr die gleiche Helligkeit wie das base_clip
aber mit den Farben vom overlay_clip "lighten": use_chroma muss TRUE sein. Führt die gleiche Operation wie "add" durch, aber nur wenn das Ergebnus HELLER als das base_clip ist, wird der neue Wert auch verwendet. Mit einem hohen threshold ist die Operation wahrscheinlicher,
mit threshold=255 ist das Ergbnis das gleiche wie "add", mit threshold=0 wird das base_clip eher unverändert gelassen, abhängig von der Differenz zwischen base_clip und overlay_clip. "darken": das gleich wie "lighten", allerdings wird das Ergebnis nur verwendet, wenn der neue Wert DUNKLER als base_clip ist.

Siehe auch hier zu den entstehenden Clip-Eigenschaften.

Mask [rgb32]

Mask(clip, mask_clip)

Setzt in clip eine definierte alpha-Maske (zur Verwendung mit Layer, das mask_clip wird auf Grauwerte umgewandelt und diese werden als Maske (alpha-Kanal) vom RGB32 verwendet. Bei diesem Kanal bedeutet "schwarz" völlig durchsichtig, weiss bedeutet völlig undurchsichtig.


ResetMask [rgb32]

ResetMask(clip)

Setzt die alpha-Maske vom clip komplett auf undurchsichtig (zur Verwendung mit Layer).

Der alpha-Kanal eines RGB32-Clip ist nicht immer in einem definierten Zustand (abhängig von der Quelle),
dieses Filter ist die einfachste Art, eine komplett "weisse" Maske zu setzen: clip=ResetMask(clip)


ColorKeyMask [rgb32]

ColorKeyMask(clip, int color, int tolerance)

Setzt den alpha-Kanal (ähnlich wie auch Mask), allerdings durch Vergleichen der Farben. Jedes Pixel mit einem Farbunterschied, der kleiner als tolerance ist, wird auf transparent gesetzt, andernfalls unverändert gelassen (es wird NICHT auf undurchsichtigt gesetzt).