Für Video-Gespräche brauchte ich eine vernünftige Webcam, und im Schrank lag eine Canon EOS R. Spiegelreflex (bzw. spiegellose Systemkamera) als Webcam etwas Overkill, aber klingt nach einem netten Projekt & und das ist es auch. Unter Linux hat es allerdings gedauert, bis ich die richtige Reihenfolge und die nötigen Bausteine zusammenhatte.
Das Ergebnis lohnt sich: Deutlich schärfere Bilder, Kontrolle über Belichtung, Blende und Brennweite, und ein Bild, das nach mehr aussieht als nach 0815-Webcam.
Voraussetzungen
Bevor es losgeht, sollten folgende Pakete installiert sein. Die Beispiele zeigen Debian/Ubuntu; bei Arch/CachyOS entspricht das den gleichen Paketen, nur mit pacman statt apt.
# Debian/Ubuntu
sudo apt update
sudo apt install gphoto2 ffmpeg v4l2loopback-dkms v4l2loopback-utils
Unter Arch:
sudo pacman -S gphoto2 ffmpeg v4l2loopback-dkms v4l2loopback-utils
Zusätzlich muss das v4l2loopback-Modul geladen werden, damit ein virtuelles Kamera-Gerät entsteht:
sudo modprobe v4l2loopback devices=1 video_nr=5 card_label="EOS_R_Webcam" exclusive_caps=1
Das erzeugt ein Gerät /dev/video5 mit dem Label “EOS_R_Webcam”. Die Option exclusive_caps=1 ist wichtig, damit Apps wie Zoom, Teams oder Discord das Gerät als Kamera erkennen.
Tipp: Wenn du das Modul dauerhaft bei jedem Boot laden willst, trage es in /etc/modules-load.d/v4l2loopback.conf ein:
v4l2loopback
Das Problem mit dem simplen Weg
Kamera per USB anstecken und loslegen klappt so nicht. Zwei Dinge sind im Weg:
-
Die Kamera braucht den Movie-Modus.
Im Photo-Modus sendet sie über USB kein Livebild, da steht der Stream einfach still. -
Ein Hintergrunddienst namens
gvfsschnappt sich die Kamera.
Dergvfs-gphoto2-volume-monitorbehandelt die Kamera wie einen USB-Stick und blockiert damit den Zugriff fürgphoto2.
Die Folge: Selbst wenn die Kamera korrekt erkannt wird, bekommt gphoto2 keinen sauberen Live-Stream.
Die Reihenfolge, die funktioniert
So habe ich es am Ende gemacht & in dieser Reihenfolge klappt es bei mir zuverlässig:
- Kamera ausschalten.
- USB-Kabel in den PC stecken, aber noch nicht in die Kamera.
- gvfs-Blocker beenden.
- USB-Kabel in die Kamera stecken.
- Kamera einschalten und in den Movie-Modus schalten.
- Mit
gphoto2 --auto-detectprüfen, ob die Kamera gesehen wird. - Stream starten und in v4l2loopback einspeisen.
Der Punkt 3 ist entscheidend. Wer die gvfs-Prozesse nicht vorher beendet, verliert die Kamera an den falschen Prozess und wundert sich, warum gphoto2 nichts findet.
gvfs-Prozesse killen
killall -q gvfs-gphoto2-volume-monitor gvfs-mtp-volume-monitor
Falls killall meckert, dass die Prozesse nicht laufen: kein Problem, dann waren sie schon nicht aktiv.
Prüfen, ob die Kamera erkannt wird
gphoto2 --auto-detect
Hier solltest du deine Canon EOS R (oder dein jeweiliges Modell) in der Ausgabe sehen. Wenn nichts kommt: Kabel prüfen, Kamera im Movie-Modus, gvfs nochmal killen, ggf. neu starten.
Den Webcam-Stream starten
Sobald die Kamera erkannt wird, kannst du den Live-Stream in das virtuelle Gerät einspeisen:
gphoto2 --stdout --capture-movie | ffmpeg -hide_banner -loglevel error \
-i - -vcodec rawvideo -pix_fmt yuv420p -s 1920x1080 -f v4l2 /dev/video5
Was hier passiert:
gphoto2 --stdout --capture-movieliefert den Live-Stream der Kamera.ffmpegnimmt diesen Stream, wandelt ihn in ein Format um, das V4L2 erwartet, und schreibt ihn in/dev/video5.- Das Gerät
/dev/video5verhält sich danach wie eine ganz normale USB-Webcam.
Du kannst die Auflösung (-s 1920x1080) anpassen, wenn deine Kamera etwas anderes liefert oder du weniger Bandbreite brauchst (z. B. 1280x720).
In Discord, Teams, Zoom & Co. nutzen
In deinen Video-Apps wählst du einfach die virtuelle Kamera aus:
- Gerät:
/dev/video5oder “EOS_R_Webcam” - In manchen Apps taucht sie direkt als “EOS_R_Webcam” auf.
Danach solltest du das Bild deiner Canon EOS R im Videocall sehen. Alles andere (Belichtung, Blende, Brennweite, Fokus) stellst du direkt an der Kamera ein.
Troubleshooting
gphoto2 --auto-detect findet nichts
- Ist die Kamera im Movie-Modus?
- Sind die gvfs-Prozesse wirklich beendet? Nochmal:
killall -q gvfs-gphoto2-volume-monitor gvfs-mtp-volume-monitor - Funktioniert ein anderes USB-Kabel / ein anderer Port?
- Wird die Kamera im Dateimanager als Speichermedium angezeigt? Dann hat gvfs sie doch erwischt & nochmal killen und den Anschluss in der oben beschriebenen Reihenfolge machen.
/dev/video5 existiert nicht
- Wurde das
v4l2loopback-Modul geladen?lsmod | grep v4l2loopback - Falls nicht:
sudo modprobe v4l2loopback devices=1 video_nr=5 card_label="EOS_R_Webcam" exclusive_caps=1 - Wenn du mehrere virtuelle Kameras brauchst, kannst du
devices=2oder mehr verwenden und dievideo_nrentsprechend anpassen.
Bild ist schwarz / steht still
- Kamera steht im Photo-Modus statt im Movie-Modus.
- Die Kamera hat einen Energiesparmodus, der den Live-View abschaltet. In den Kamera-Einstellungen die Abschaltautomatik für Live-View verlängern oder deaktivieren.
ffmpeg-Befehl prüfen: Wird wirklich auf das richtige/dev/videoXgeschrieben?
Berechtigungsprobleme
Falls Apps keinen Zugriff auf /dev/video5 haben, kann es an den Rechten liegen. Ein pragmatischer Weg (nicht ultra-sicher, aber für viele Desktop-Setups okay):
sudo usermod -aG video $USER
Danach neu einloggen. Alternativ kannst du udev-Regeln schreiben, um /dev/video5 explizit für deinen User freizugeben.
Optional: Start-Skript für den Alltag
Damit du nicht jedes Mal alles tippen musst, kannst du dir ein kleines Skript bauen, z. B. ~/bin/eosr-webcam.sh:
#!/usr/bin/env bash
set -euo pipefail
# gvfs-Blocker beenden
killall -q gvfs-gphoto2-volume-monitor gvfs-mtp-volume-monitor || true
# v4l2loopback laden (falls noch nicht geladen)
if ! lsmod | grep -q v4l2loopback; then
sudo modprobe v4l2loopback devices=1 video_nr=5 card_label="EOS_R_Webcam" exclusive_caps=1
fi
echo "Kamera jetzt im Movie-Modus starten, dann Stream starten..."
read -r -p "Enter drücken, wenn die Kamera bereit ist..."
gphoto2 --stdout --capture-movie | ffmpeg -hide_banner -loglevel error \
-i - -vcodec rawvideo -pix_fmt yuv420p -s 1920x1080 -f v4l2 /dev/video5
Skript ausführbar machen:
chmod +x ~/bin/eosr-webcam.sh
Danach reicht ein Aufruf von eosr-webcam.sh und du musst nur noch die Kamera im Movie-Modus bestätigen.
Fazit
Der Weg ist ein bisschen fummelig, aber es lohnt sich: Eine Canon EOS R (oder jede andere gphoto2-kompatible Kamera) als Webcam liefert ein deutlich besseres Bild als die meisten Standard-Webcams & und unter Linux ist das mit gphoto2, ffmpeg und v4l2loopback gut machbar.
Sobald die Reihenfolge sitzt (insbesondere das vorherige Killen von gvfs), ist der Aufbau stabil und lässt sich gut im Alltag nutzen. Für den nächsten Schritt könnte man das ganze noch in OBS einbinden oder mit einem kleinen GUI-Wrapper noch komfortabler machen & aber für solide Video-Calls reicht diese Setup schon sehr gut.