Greenscreen mit FFmpeg entfernen: Chroma-Key-Video
Einen Greenscreen einzusetzen und anschließend wieder zu entfernen, kann mühsam sein. Wenn die Bedingungen jedoch günstig sind, spart ein wenig Automatisierung viel Zeit. Bei Transloadit automatisieren wir die Kleinarbeit natürlich mit Begeisterung. Sehen wir uns also an, wie sich mit FFmpeg und Transloadit ein Greenscreen automatisch per Chroma-Key aus einem Video entfernen lässt – zurück bleibt ein transparenter Hintergrund.
Der schnellste Weg, einen Greenscreen mit FFmpeg zu entfernen, nutzt den Filter
colorkey, um einen ausgewählten Farbton transparent zu machen, und codiert das
Ergebnis anschließend in ein Format mit Alphakanal. Gute Ausleuchtung und ein gleichmäßig gefärbter
Hintergrund zählen dabei ebenso viel wie der Befehl selbst.

Wie funktioniert ein Greenscreen?
Bevor wir einen Greenscreen entfernen können, müssen wir verstehen, was ein Greenscreen eigentlich ist. Ein Greenscreen wird hinter einem Motiv platziert, um einen gleichmäßigen Hintergrund zu schaffen, der sich leichter entfernen lässt. Üblicherweise wird ein Neongrün gewählt, da es am weitesten von Hauttönen entfernt ist; Blau ist aber ebenfalls gebräuchlich.
Wenn Sie den Hintergrund entfernen möchten, benötigen Sie einen Chroma-Key, um das Grün gezielt aus jedem Einzelbild des Videos zu entfernen. Zurück bleibt ein transparenter Hintergrund hinter Ihrem Motiv.
FFmpeg-Befehl
Bevor wir uns die Einzelheiten unserer Assembly Instructions ansehen, öffnen wir die Motorhaube und werfen einen Blick darauf, was darunter steckt 🔎
Transloadit nutzt eine Auswahl an CLI-Tools, um Transcoding-Vorgänge auf Ihren Dateien auszuführen. Eines dieser Tools ist das hoch angesehene FFmpeg, das wir in vielen unserer Robots für Video-, Audio- und Bild-Transcoding einsetzen.
Bevor wir unser Template entwerfen, können wir den Vorgang zunächst lokal mit einem FFmpeg-Befehl ausprobieren. Anschließend übersetzen wir den FFmpeg-Befehl in Assembly Instructions und profitieren so von dem Komfort und der Geschwindigkeit, die Transloadit bietet.
Um einen Greenscreen aus einem Video zu entfernen, lautet der Befehl wie folgt:
ffmpeg -i input.mp4 -vf 'colorkey=0x00FF00:similarity=0.2:blend=0.3' -c:v libvpx-vp9 -pix_fmt yuva420p -c:a libopus output.webm
Sehen wir ihn uns im Einzelnen an.
Zunächst geben wir mit dem Flag i unsere Eingabedatei an. Davon ausgehend können wir dem Flag vf eine Reihe von Videofiltern übergeben. In unserem Fall benötigen wir nur den Filter colorkey und setzen den Farbschlüssel auf 0x00FF00.
Anschließend können wir den Filter colorkey mit den Parametern similarity und blend feinjustieren. Diese geben an, wie
nah eine Farbe an der Schlüsselfarbe liegen muss, um transparent zu werden, und wie hart der Key
wirkt. Experimentieren Sie ruhig mit den Werten, um zu sehen, wie sich das Ergebnis verändert.
Als Nächstes wählt c:v den VP9-Encoder aus, und pix_fmt fordert ein Pixelformat mit Alphakanal an.
Der Ton wird als Opus codiert. Weitere Informationen zu VP9 und anderen Codecs finden Sie in unserem
Blogbeitrag zur Videokompression.
Zum Schluss wählt die Ausgabeendung .webm das WebM-Format, da dieses Format Videotransparenz
unterstützt.
Template
Nachdem wir den zugrunde liegenden Befehl gesehen haben, schauen wir uns an, wie er in unserem Template aussieht.
{
"steps": {
":original": {
"robot": "/upload/handle"
},
"remove_green_screen": {
"use": ":original",
"robot": "/video/encode",
"result": true,
"ffmpeg_stack": "v7",
"preset": "empty",
"ffmpeg": {
"vf": "colorkey=0x00FF00:similarity=0.2:blend=0.3",
"c:v": "libvpx-vp9",
"pix_fmt": "yuva420p",
"c:a": "libopus",
"f": "webm"
}
},
"exported": {
"use": ["remove_green_screen", ":original"],
"robot": "/s3/store",
"credentials": "demo_s3_credentials",
"url_prefix": "https://demos.transloadit.com/"
}
}
}
Beachten Sie, dass wir im Parameter ffmpeg genau dieselben Flags angeben können wie im
ursprünglichen Befehl. So bearbeiten wir die Datei auf dieselbe Weise und erhalten zusätzlich die
Funktionen, die Transloadit bietet.
Ein wichtiges Detail dabei: Wir verwenden die Voreinstellung empty, damit auf die Datei
ausschließlich die von uns angegebenen Encoding-Vorgänge angewendet werden. Auf unserer
Seite zu den Voreinstellungen erfahren Sie im Detail,
was jede Voreinstellung bietet.
Endergebnisse
Unten sehen Sie das Ergebnis, das unser Template liefert, wenn wir ein Video eines Dinosauriers vor einem leuchtend grünen Hintergrund übergeben.
Sieht ziemlich gut aus! All das lief zudem automatisch ab, sodass wir Hunderte von Dateien mühelos verarbeiten und unsere Ergebnisse in einen Storage-Bucket exportieren können, um sie später abzurufen.
Das war's für diesen Blogbeitrag! Hoffentlich hat er einen Blick hinter die Kulissen erlaubt, wie sich FFmpeg in Ihren Templates einsetzen lässt. Wenn Sie über künftige Beiträge auf dem Laufenden bleiben und Artikel entdecken möchten, die unsere Entwickler spannend finden: Warum melden Sie sich nicht unten für unseren Newsletter an?
