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.
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
Welche Einstellungen bei der aktuell über USB angeschlossenen Webcam verfügbar sind, erfährt man mittels des Parameters „list-ctrls“.
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.
Wer möchte, kann die Farbtemperatur auch auf einen beliebigen Wert einstellen, zum Beispiel 4000 Kelvin. Dazu muss die Automatik natürlich ausgeschaltet bleiben.
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]
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]