Video4Linux2
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.
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. 😒
- FOINNEX VGA auf HDMI Adapter (aktiv) mit Audio - Amazon (kein Reflink!) - Kaufpreis 10,99€
- UGREEN Video Capture Card, 4k Eingang und 1080p Capture, HDMI auf USB A/C - Amazon (kein Reflink!) - Kaufpreis 13,77€
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.p6zielt 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 vonYUV422P(aus dem MJPEG-Input) zuYUV420P. 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...
