#videocapture

deusfigendi@pod.geraspora.de

Ich hab mir neulich 'ne HDMI-Capture-Card gekauft, für schmales Geld (26€ oder so). Und die ersten Versuche waren so enttäuschend, dass ich schon dachte ich hätte einen einen kompletten Fehlkauf gemacht und zu wenig Geld ausgegeben, weil die Framerate brutal niedrig war (ich hab versucht 'ne Nintento-Switch zu capturen). Ich hatte eine Weil noch die Hoffnung, dass es irgendwie am langsamen Rechner liegt und dass der es nicht schafft all die Frames schnell genug runter zu rechnen um sie anzuzeigen oder wegzuspeichern, aber nach einigem hin und her sah es eher so aus als gabe die Capture-Card einfach nicht mehr Frames raus. Also ein echter Fehlkauf?

Ja schon, aber es ist nicht ganz so schlimm ist es dann doch nicht, in dieser Anleitung habe ich nachgelesen, dass so Geräte (Video-Input) verschiedene Ausgabe-Varianten unterstützen können und man sich die ausgeben lassen kann und bei der CaptureCard kommt da folgendes raus:

$ gst-launch-1.0 --gst-debug=v4l2src:5 v4l2src device=/dev/video0 ! fakesink 2>&1 | sed -une '/caps of src/ s/[:;] /\n/gp'

0:00:00.103109122  5169 0x5628d827ef70 DEBUG                v4l2src gstv4l2src.c:512:gst_v4l2src_negotiate:<v4l2src0> caps of src

video/x-raw, format=(string)YUY2, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)5/1
video/x-raw, format=(string)YUY2, width=(int)1600, height=(int)1200, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)5/1
video/x-raw, format=(string)YUY2, width=(int)1280, height=(int)1024, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)8/1
video/x-raw, format=(string)YUY2, width=(int)1280, height=(int)960, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)8/1
video/x-raw, format=(string)YUY2, width=(int)1360, height=(int)768, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)8/1
video/x-raw, format=(string)YUY2, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)10/1
video/x-raw, format=(string)YUY2, width=(int)1024, height=(int)768, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)10/1
video/x-raw, format=(string)YUY2, width=(int)800, height=(int)600, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 20/1, 10/1, 5/1 }
video/x-raw, format=(string)YUY2, width=(int)720, height=(int)576, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 25/1, 20/1, 10/1, 5/1 }
video/x-raw, format=(string)YUY2, width=(int)720, height=(int)480, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 20/1, 10/1, 5/1 }
video/x-raw, format=(string)YUY2, width=(int)640, height=(int)480, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 20/1, 10/1, 5/1 }
image/jpeg, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 60/1, 30/1, 25/1, 20/1, 10/1 }
image/jpeg, width=(int)1600, height=(int)1200, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 60/1, 30/1, 25/1, 20/1, 10/1 }
image/jpeg, width=(int)1280, height=(int)1024, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 60/1, 30/1, 25/1, 20/1, 10/1 }
image/jpeg, width=(int)1280, height=(int)960, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 60/1, 30/1, 25/1, 20/1, 10/1 }
image/jpeg, width=(int)1360, height=(int)768, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 60/1, 30/1, 25/1, 20/1, 10/1 }
image/jpeg, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 60/1, 50/1, 30/1, 20/1, 10/1 }
image/jpeg, width=(int)1024, height=(int)768, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 60/1, 50/1, 30/1, 20/1, 10/1 }
image/jpeg, width=(int)800, height=(int)600, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 60/1, 50/1, 30/1, 20/1, 10/1 }
image/jpeg, width=(int)720, height=(int)576, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 60/1, 50/1, 30/1, 20/1, 10/1 }
image/jpeg, width=(int)720, height=(int)480, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 60/1, 50/1, 30/1, 20/1, 10/1 }
image/jpeg, width=(int)640, height=(int)480, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 60/1, 50/1, 30/1, 20/1, 10/1 }

So und was man hier sieht ist dass die höheren Auflösungen (HD, fullHD) nur geringe Frameraten erlauben, nämlich 5FPS für FullHD und 10FPS für 720p. Beides natürlich eher enttäuschend, aber wenn ich mich mit 800x600 zufrieden gebe komme ich auf immerhin 20FPS was vielleicht in manchen Situationen ein ausreichender Kompromiss ist. Wenn man ein Video mit den üblichen 25 oder 30 FPS macht sehen 20 vielleicht noch nicht furchtbar aus, sondern nur etwas ruckelig, während Auflösungen unterhalb von 800x600 auch nicht mehr ansehnlich sind.

Also beide Werte (Auflösung und Framerate) sind damit quasi an der Schmerzgrenze an der ich noch damit arbeiten kann ^^

Was ich noch nicht weiß ist was die "image"-Varianten sollen, da fallen ja angeblich bis zu 60FPS bei 1080p raus, falls ich die wegspeichern könnte… das wäre natürlich interessant.

#linux #v4l2 #v4l #videocapture #framerate #resolution