Zum Inhalt

Video4Linux2

📅 Erstellt: 22.09.2026 🔄 Aktualisiert: 22.09.2026

QV4L2

Um mit Video for Linux 2 zu arbeiten kann ich das qv4l2-Tool empfehlen, das ist zwar recht technisch, man findet aber in kurzer Zeit heraus welche Funktionen was bewirken.

b0d198674793ecb948d72e2c2a867812.png

Testkonfiguration

Ich sollte hier noch etwas auf den verwendeten Framegrabber / die Capturekarte eingehen und Linux UVC näher beschreiben. Mehr dazu später™.
Kurz gesagt sind die Videobeispiele hier mit einem 25€ Hardware-Setup entstanden. Dafür ist die Qualität ordentlich. Allerdings sind 70 Hz DOS-Textmodus aufnahmen NICHT möglich, da der Grabber das mit einem "No Signal" quittiert. 😒

Capture und Encoding mit ffmpeg

Ein Beispie mit ALSA Capture auf hw:0,0:
ffmpeg -thread_queue_size 512 -f v4l2 -input_format mjpeg -video_size 1600x1200 -framerate 60 -i /dev/video0 -thread_queue_size 512 -f alsa -i hw:0,0 -c:v hevc_nvenc -preset p6 -rc vbr -cq 16 -pix_fmt yuv420p -c:a aac -b:a 192k -ac 2 output.mp4

Parametererklärung:

Hier ist die detaillierte Aufschlüsselung des aktuell verwendeten Befehls:

  • -thread_queue_size 512: Vergrößert den Puffer für eingehende Datenpakete auf 512. Verhindert Framedrops, "Queue blocking"-Fehler und asynchrones Audio/Video bei Live-Aufnahmen. Muss jeweils separat vor der Video- und Audioquelle deklariert werden.
  • -f v4l2: Legt Video4Linux2 als Schnittstelle für das Video-Eingabegerät fest.
  • -input_format mjpeg: Fordert das komprimierte MJPEG-Format von der Hardware an. Erforderlich, da unkomprimierte Formate bei 1600x1200@60fps oft die Bandbreite von USB-Schnittstellen übersteigen.
  • -video_size 1600x1200: Zwingt die Eingabequelle auf die Zielauflösung.
  • -framerate 60: Fordert 60 Bilder pro Sekunde vom Eingabegerät an.
  • -i /dev/video0: Definiert den Pfad zum physischen Video-Eingabegerät.
  • -f alsa: Legt Advanced Linux Sound Architecture als Framework für die Audioeingabe fest.
  • -i hw:0,0: Definiert die Audioquelle als ALSA-Hardware-Gerät 0, Sub-Gerät 0.
  • -c:v hevc_nvenc: Aktiviert den H.265/HEVC-Hardware-Encoder der verbauten NVIDIA-Grafikkarte.
  • -preset p6: Bestimmt das Verhältnis aus Codiergeschwindigkeit und Bildqualität. p6 zielt auf eine sehr hohe Qualität ab, die minimal langsamer berechnet wird als der Standardwert.
  • -rc vbr: Aktiviert die Variable Bitrate. Dies ist beim NVENC-Encoder zwingend erforderlich, um den Constant Quality Modus (CQ) nutzen zu können.
  • -cq 16: Aktiviert den Constant Quality Modus mit einem Zielwert von 16. Die Bitrate schwankt je nach Komplexität des Bildes, um eine konstante visuelle Qualität zu halten (niedrigerer Wert = höhere Qualität, 16 ist visuell nah am Original).
  • -pix_fmt yuv420p: Konvertiert das Farbraum-Format von YUV422P (aus dem MJPEG-Input) zu YUV420P. Der NVIDIA-Encoder benötigt dieses Standardformat zwingend für die Komprimierung.
  • -c:a aac: Bestimmt Advanced Audio Coding (AAC) als Audio-Codec.
  • -b:a 192k: Limitiert die Audio-Bitrate auf 192 Kilobit pro Sekunde.
  • -ac 2: Erzwingt eine Ausgabe in zwei Audiokanälen (Stereo).
  • output.mp4: Definiert den Namen und das Containerformat (.mp4) der fertigen Videodatei.

Beispielvideos

Nachdem die Verarbeitung - grober Schnitt und Audio-Normalisierung - mit Avidemux abgeschlossen wurde, hier ein Beispielvideo:

HEVC

H264

Je nach Betriebssystem und Browser kann es sein, dass HEVC* nicht abspielbar ist. Gibt es ja auch "erst" seit 2013/2014. Willkommen in 2026! 🥳

*Naja ganz so einfach ist es nicht, da es hier um Lizenzkosten geht...