Wie Video von USB-Webcam aufnehmen ?

  • Ich habe eine alte USB-Webcam geschenkt bekommen und möchte damit ein Video aufnehmen, scheitere leider daran.

    Beim anstöpseln wird sie erkannt, dmesg sagt:

    Code
    [  240.371340] usb 1-1.4: new full-speed USB device number 5 using dwc_otg
    [  240.522707] usb 1-1.4: New USB device found, idVendor=093a, idProduct=2600, bcdDevice= 1.00
    [  240.522724] usb 1-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=0
    [  240.522733] usb 1-1.4: Product: VGA Single Chip
    [  240.522743] usb 1-1.4: Manufacturer: Pixart Imaging Inc.
    [  240.523752] gspca_main: pac7311-2.14.0 probing 093a:2600
    [  240.534290] input: pac7311 as /devices/platform/soc/3f980000.usb/usb1/1-1/1-1.4/input/input1

    Sie steht mir unter /dev/video0 zur Verfügung, mit VLC kann ich das Gerät öffnen, es wird ein Video angezeigt.

    Bisher habe ich bei jeder Webcam immer mit:

    Code
    sudo /usr/bin/ffmpeg -f video4linux2 -s 640x480 -i /dev/video0 -vframes 1800 -vcodec mpeg4 -y /dev/shm/`date +%y-%m-%d-%H-%M-%S`.mp4

    ein Video mit Zeitstempel anlegen können. Doch mit dieser Webcam nicht, es kommt die Meldung:

    Code
    [video4linux2,v4l2 @ 0x787200] Cannot find a proper format for codec 'none' (id 0), pixel format 'none' (id -1)
    Assertion *codec_id != AV_CODEC_ID_NONE failed at src/libavdevice/v4l2.c:811

    Wie kann ich ffmpeg überreden, mir ein Video zu erstellen ?

    :helpnew:

  • Cannot find a proper format for codec 'none'

    Zu dieser Fehlermeldung finde ich nur, dass entweder die Kamera nicht erkannt wird oder der Treiber nicht geladen ist. Da es unter VLC funktioniert schliesse ich die Fehlerquelle dort aus, ausser VLC greift direkt auf die Kamera zu.


    Code
    sudo /usr/bin/ffmpeg -f video4linux2 -s 640x480 -i /dev/video0 -vframes 1800 -vcodec mpeg4 -y /dev/shm/`date +%y-%m-%d-%H-%M-%S`.mp4

    Laut der Doku von ffmpeg stimmt der Aufruf. Ich hätte da zwei Kleinigkeiten -vframes ist obsolet und eventuell die Reihenfolge von -f ... -s ... -i .. tauschen in -f ... -i ... -s ...

    Glaube ersetzt kein Wissen

  • Hast du noch eine alte Version/Image von Stretch? Vor Aug 2019? Kannst du das zur Probe auf einer SD-Karte installieren? Nach einem Update im August hatte ich mit zwei PXE-RPi Probleme mit dem Start. Der Schuldige war der v4l2-TReiber.

    Glaube ersetzt kein Wissen

  • Ich habe noch einen Rechner mit Ubuntu 14, gleiches Problem.

    Und mit fswebcam -d /dev/video1 --list-controls kommt der Fehler:

  • Auf github habe ich eine Thread gefunden, an dessen Schluss stand

    After hours digging in gstreamer syntax I accidentally found the magic element: "deinterlace" I know that this capture device has interlaced video but I did not know how this would effect the processing.


    Ich weiss der Thread behandelt gstreamer, könnte dennoch hilfreich sein. Eventuell solltest du auch noch das Format (PAL/SECAM/NTSC/UYVY) einstellen.

    Du kannst auch mit v4l2-ctl --list-formats -d /dev/video0 schauen ob der Chip/Typ pac7311 gefunden wird.

    Glaube ersetzt kein Wissen

  • Habs soeben gelöst.

    LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libv4l/v4l1compat.so fswebcam -d /dev/video1 /pfad/zum/bild/v4l1.jpeg

    LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libv4l/v4l2convert.so fswebcam -d /dev/video1 /pfad/zum/bild/v4l2.jpeg

    Gesucht habe ich mit:

    find /usr/lib/ -name v4l*

    Ausgabe:

    Code
    /usr/lib/x86_64-linux-gnu/libv4l/v4l1compat.so
    /usr/lib/x86_64-linux-gnu/libv4l/v4l2convert.so
    /usr/lib/i386-linux-gnu/libv4l/v4l1compat.so
    /usr/lib/i386-linux-gnu/libv4l/v4l2convert.so

    Die Ausgabe von

    v4l2-ctl --list-formats -d /dev/video1

    Code
    v4l2-ctl --list-formats -d /dev/video1
    ioctl: VIDIOC_ENUM_FMT
            Index       : 0
            Type        : Video Capture
            Pixel Format: 'PJPG' (compressed)
            Name        : GSPCA PJPG

    Jetzt muss ich nur noch ffmpeg überreden, das genau so zu handeln, um ein Video aufzunehmen.

  • Ok, nochmal schnell auf Ubuntu ffmpeg neu runtergeladen, kompiliert, installiert und wie folgt ausgeführt, führt zu einem erfolgreichen Video:

    Code
    LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libv4l/v4l1compat.so /usr/local/bin/ffmpeg -s 640x480 -i /dev/video1 -vcodec mpeg4 -y /pfad/zum/`date +%y-%m-%d-%H-%M-%S`.mp4

    Jetzt mache ich das ganze nochmal auf dem Pi, um zu sehen ob es da auch klappt, markiere aber schonmal als gelöst.

    :danke_ATDE: