Skip to content

Farbstich bei Videokonferenzen

Vor einigen Jahren experimentierte ich einmal mit USB-Webcams von Logitech und Microsoft herum, fand sie überwiegend unnötig und sie wurden verschenkt (damals waren Webcams noch billig). Eine landete scheinbar ohne Zukunftsperspektive in der Bastelkiste.

Seit dem letzten Jahr wird die alte Logitech-Webcam nun pandemiebedingt regelmäßig für „Meetings“ benötigt, doch jede Videokonferenzwebsite, egal ob Zoom, Skype oder BigBlueButton, hat mit dem alten Schätzchen das Problem, dass das Bild entweder völlig gelbstichig oder (interessanterweise bisher nur bei Skype) extrem blaustichig oder sogar magentastichig wiedergegeben wird.

Schuld ist allem Anschein nach eine fehlerhafte Initialisierung des automatischen Weißabgleichs. Wenn man diesen automatischen Weißabgleich der Webcam einmal kurz aus- und dann wieder einschaltet, ist das Bild in wenigen Sekunden optimal eingestellt. Leider gibt es an der Kamera keinerlei Bedienelemente und auch die Webinterfaces der Videokonferenzsysteme bieten hier keinen Button zum Optimieren des Webcam-Bildes an.

Da ich Linux verwende, lässt sich das Problem zum Glück schnell lösen. Alles, was benötigt wird, sind die Video-for-Linux-Hilfsprogramme aus dem Paket v4l-utils.
$ sudo apt-get install v4l-utils

In dieser Programmsammlung befindet sich ein Werkzeug zur Einstellung diverser Kameraparameter mit dem Namen „v4l2-ctl“. Damit lassen sich alle Kamereinstellungen setzen und auch die aktuell gesetzten Werte abfragen.

Den Gerätenamen der Kamera, zum Beispiel „/dev/video0“ oder „/dev/video1“ erfährt man mittels
$ v4l2-ctl --list-devices

Welche Einstellungen bei der aktuell über USB angeschlossenen Webcam verfügbar sind, erfährt man mittels des Parameters „list-ctrls“.
$ v4l2-ctl -d /dev/video0 --list-ctrls
brightness 0x00980900 (int) : min=0 max=255 step=1 default=128 value=128
contrast 0x00980901 (int) : min=0 max=255 step=1 default=32 value=32
saturation 0x00980902 (int) : min=0 max=255 step=1 default=32 value=32
white_balance_temperature_auto 0x0098090c (bool) : default=1 value=1
gain 0x00980913 (int) : min=0 max=255 step=1 default=0 value=32
power_line_frequency 0x00980918 (menu) : min=0 max=2 default=2 value=1
white_balance_temperature 0x0098091a (int) : min=0 max=10000 step=10 default=4000 value=10000 flags=inactive
sharpness 0x0098091b (int) : min=0 max=255 step=1 default=24 value=24
backlight_compensation 0x0098091c (int) : min=0 max=1 step=1 default=1 value=1
exposure_auto 0x009a0901 (menu) : min=0 max=3 default=3 value=3
exposure_absolute 0x009a0902 (int) : min=1 max=10000 step=1 default=166 value=605 flags=inactive
exposure_auto_priority 0x009a0903 (bool) : default=0 value=1

Scheinbar wird die Farbtemperatur hier automatisch ausgesteuert, sieht man die Einstellung „white_balance_temperature_auto“ doch auf dem Standardwert „1“. Dass die so ermittelte Farbtemperatur im Raum mit 10.000 Kelvin strahlend blauem Himmel entsprechen solle ist jedoch Unfug. Die Lösung des Weißabgleichproblems ist erfreulicherweise ganz einfach. Wir müssen nichts weiter tun, als die Automatik der scheinbar farbstichigen Webcam einmal auszuschalten und dann wieder zu aktivieren.
$ v4l2-ctl --set-ctrl=white_balance_temperature_auto=0
$ v4l2-ctl --set-ctrl=white_balance_temperature_auto=1

Wer möchte, kann die Farbtemperatur auch auf einen beliebigen Wert einstellen, zum Beispiel 4000 Kelvin. Dazu muss die Automatik natürlich ausgeschaltet bleiben.
$ v4l2-ctl --set-ctrl=white_balance_temperature_auto=0
$ v4l2-ctl --set-ctrl=white_balance_temperature=4000

Mit diesen beiden Zeilen in einem Bash-Script lässt sich nun während jeder Videokonferenz der lästige Farbstich mit einem Doppelklick in ein perfekt belichtetes Kamerabild umwandeln.

[Edit: Tippfehler entfernt. Dank an nenem]

Trackbacks

Keine Trackbacks

Kommentare

Ansicht der Kommentare: Linear | Verschachtelt

nenem am :

Die zweite der beiden Zeilen für ein Bash-Script ist fehlerhaft. Darauf bin ich erst gekommen, nachdem ich viel Zeit mit der Suche danach verbracht habe, warum der von mir vorgegebene Wert für "white_balance_temperature" nicht übernommen und stattdessen der Minimalwert verwendet wurde: "=value" gehört nicht in die Zeile. Dann funktioniert es.

Martin Vogel am :

Das ist richtig. Danke für den Hinweis!

Kommentar schreiben

Die angegebene E-Mail-Adresse wird nicht dargestellt, sondern nur für eventuelle Benachrichtigungen verwendet.
Um einen Kommentar hinterlassen zu können, erhalten Sie nach dem Kommentieren eine E-Mail mit Aktivierungslink an ihre angegebene Adresse.

Um maschinelle und automatische Übertragung von Spamkommentaren zu verhindern, bitte die Zeichenfolge im dargestellten Bild in der Eingabemaske eintragen. Nur wenn die Zeichenfolge richtig eingegeben wurde, kann der Kommentar angenommen werden. Bitte beachten Sie, dass Ihr Browser Cookies unterstützen muss, um dieses Verfahren anzuwenden.
CAPTCHA

Standard-Text Smilies wie :-) und ;-) werden zu Bildern konvertiert.
Formular-Optionen