Langzeit Videoaufnahme

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo,

    ich möchte den raspberry als "Langzeitvideorekorder" verwenden.
    Konkret sollen so ca. 4-5 Tage Video mit Ton aufgenommen werden.
    Ich habe einen Raspberry, die Raspberry-Cam und eine Logitech HD Webcam C525 zur Verfügung.
    Bei der Raspberry-Cam habe ich das Problem, dass diese keinen Ton liefert, was man aber eventuell mit einem USB-Mikro lösen könnte.

    Ich habe schon viel geforscht und probiert, aber ich finde immer nur Anleitungen wie man eine Webcam auf einen Server streamt, aber nichts um auf Festplatte, CF oder USB-Stick aufzunehmen.
    Das ganze soll auch so "Ressourcen schonend" ablaufen, dh. das ganze soll wenig Strom verbrauchen und es soll auch von der Datenmenge im Rahmen bleiben.

    Weiss wer wie ich das ganze angehen soll (welches System, welches Script oder Programm)?

    Ich hoffe das ist irgendwie zu schaffen.

    Danke
    Roland


  • Ich habe schon viel geforscht und probiert, aber ich finde immer nur Anleitungen wie man eine Webcam auf einen Server streamt, aber nichts um auf Festplatte, CF oder USB-Stick aufzunehmen.

    Ich glaub das "streamen" verstehst du falsch - die Anleitungen die ich kenne legen die Datei halt im DocumentRoot Verzeichnis des RaspberryPI-Webservers ab, auf die man dann über den Webserver zugreifen kann..


    Mit der RaspberryPI-Cam könntest du das zB so machen:

    Code
    raspivid -o - -fps 30 -t 0 -vs > /var/www/video.h264 &

    Allerdings solltest du darauf achten auf jedenfall genug Speicherplatz zu haben, weil wenn du 4-5 Tage aufnehmen willst wird die Datei mit gewissheit unheimlich gross :D


    Du musst das umleiten solange dein Dateisystem kein "large file" für gestreamte Dateien unterstützt, sonst ist die Aufnahme nach 2GB zuende.. Wurde hier genauer diskutiert: https://www.forum-raspberrypi.de/Thread-maximal…%A4nge-begrenzt


  • Mit der RaspberryPI-Cam könntest du das zB so machen:

    Code
    raspivid -o - -fps 30 -t 0 -vs > /var/www/video.h264 &


    Da habe ich aber das Problem, dass ich keinen Ton habe, bzw. wie bekomme ich zur RaspberryPI-Cam einen Ton (USB Mikro?)



    Allerdings solltest du darauf achten auf jedenfall genug Speicherplatz zu haben, weil wenn du 4-5 Tage aufnehmen willst wird die Datei mit gewissheit unheimlich gross :D


    Könnte man das nicht irgendwie mit einem Script lösen, dass zb. alle 2GB ein neues File anlegt?


    Habe im Moment überhaupt ein Problem mit meinem Raspberry, denn ich habe in letzter Zeit soviel verschiedene Sachen installiert und probiert, dass im Moment keine Kamera funktioniert.

    Werde alles neu aufsetzen, möchte das aber gleich richtig machen und nur das aller nötigste installieren, das fängt schon beim System an.

    Habt Ihr Empfehlungen wie ich das angehen soll (von Grund auf)?
    Der Raspberry muss auch nichts anderes machen wie aufnehmen, ich brauch im Moment der Aufnahme auch keine "Live Ansicht".

  • Könnte man das nicht irgendwie mit einem Script lösen, dass zb. alle 2GB ein neues File anlegt?

    Ist dir wichtig das du nahtlos aufnimmst oder ist es nicht allzu schlimm wenn ein paar Sekunden fehlen? Wenn da keine Sekunden fehlen dürfen wird das mit dem Aufteilen vermutlich nichts


    Bezüglich mit Audio+Video aufnehmen kann ich nur raten, aber vermutlich wärs das einfachste wenn du dann die Logitech HD Webcam C525 benutzen würdest weil da ja bereits ein Mic mit drin wäre, aber über einen aktiven USB-Hub
    Schlies die Kamera an und poste dann mal bitte die Ausgabe des Befehls:

    Code
    arecord -l

    da müsste dann einmal deine cam und einmal usb-audio aufgelistet werden..


  • Ist dir wichtig das du nahtlos aufnimmst oder ist es nicht allzu schlimm wenn ein paar Sekunden fehlen? Wenn da keine Sekunden fehlen dürfen wird das mit dem Aufteilen vermutlich nichts


    mit dem könnte ich leben, dass ein paar Sekunden fehlen

    Code
    arecord -l


    da müsste dann einmal deine cam und einmal usb-audio aufgelistet werden..


    pi@raspberrypi ~ $ arecord -l
    **** List of CAPTURE Hardware Devices ****
    card 1: C525 [HD Webcam C525], device 0: USB Audio [USB Audio]
    Subdevices: 1/1
    Subdevice #0: subdevice #0


    die Kamera wird scheinbar erkannt, aber wie nehme ich jetzt auf?

  • Sorry vergessen mit zu posten - und bitte auch den Befehl

    Code
    arecord -L

    kontrollieren

    Aufnehmen würde ich über ffmpeg empfehlen, damit hättest du die meisten Einstellungsmöglichkeiten und auch Formate/Codecs zur Verfügung:

    Code
    apt-get install ffmpeg

    Und dann sähe der Aufnahme-Befehl irgendwie so aus:

    Code
    ffmpeg -f video4linux2 -i /dev/video0 -r 30 -vcodec mpeg4 -b 1000 -qscale 0.1 -bt 256k -y -f alsa -ac 2 -i hw:1,0 -ar 44100 /var/www/webcam.mp4


    Oder

    Code
    ffmpeg -f alsa -i "plughw:CARD=C525,DEV=0" -f video4linux2 -vcodec mjpeg -s 640x480 -i /dev/video0 -y -sameq /var/www/webcam.mp4


    Oder

    Code
    ffmpeg -y -f video4linux2 -r 20 -s 160x120 -i /dev/video0 -acodec libfaac -ab 128k /var/www/webcam.avi


    Oder

    Code
    ffmpeg -f alsa -r 16000 -i hw:2,0 -f video4linux2 -s 800x600 -i /dev/video0 -r 30 -f avi -vcodec mpeg4 -vtag xvid -sameq -acodec libmp3lame -ab 96k /var/www/webcam.avi

    anstatt " -f video4linux2 " kann man wohl auch " -f v4l2 " nutzen..
    Wenn du für deine Cam spezielle Einstellungen vornehmen möchtest musst du das Paket v4l-utils installieren und dann zB v4l2-ctl --list-formats-ext oder v4l2-ctl -L usw nutzen


    Eine Alternative wäre ggf auch gstreamer aber kA, vom Aufnahmen mit Audio hab ich keine Ahnung


    Ggf. müssten auch noch ein paar Pakete installiert werden:

    Code
    apt-get install libasound2 libasound2-plugins alsa-base alsa-utils linux-sound-base libopenal1 pulseaudio
    Spoiler anzeigen

    google suche nach: Linux webcam record audio and video with ffmpeg

  • Code
    arecord -L

    da bekomme ich folgendes:

    pi@raspberrypi ~ $ arecord -L
    null
    Discard all samples (playback) or generate zero samples (capture)
    default:CARD=C525
    HD Webcam C525, USB Audio
    Default Audio Device
    sysdefault:CARD=C525
    HD Webcam C525, USB Audio
    Default Audio Device
    front:CARD=C525,DEV=0
    HD Webcam C525, USB Audio
    Front speakers
    surround40:CARD=C525,DEV=0
    HD Webcam C525, USB Audio
    4.0 Surround output to Front and Rear speakers
    surround41:CARD=C525,DEV=0
    HD Webcam C525, USB Audio
    4.1 Surround output to Front, Rear and Subwoofer speakers
    surround50:CARD=C525,DEV=0
    HD Webcam C525, USB Audio
    5.0 Surround output to Front, Center and Rear speakers
    surround51:CARD=C525,DEV=0
    HD Webcam C525, USB Audio
    5.1 Surround output to Front, Center, Rear and Subwoofer speakers
    surround71:CARD=C525,DEV=0
    HD Webcam C525, USB Audio
    7.1 Surround output to Front, Center, Side, Rear and Woofer speakers
    iec958:CARD=C525,DEV=0
    HD Webcam C525, USB Audio
    IEC958 (S/PDIF) Digital Audio Output

    Code
    apt-get install ffmpeg

    habe ich gemacht.


    Ggf. müssten auch noch ein paar Pakete installiert werden:

    Code
    apt-get install libasound2 libasound2-plugins alsa-base alsa-utils linux-sound-base libopenal1 pulseaudio


    da bekomme ich folgendes:

    pi@raspberrypi ~ $ sudo apt-get install libasound2 libasound2-plugins alsa-base alsa-utils linux-sound-base libopenal1 pulseaudio
    Reading package lists... Done
    Building dependency tree
    Reading state information... Done
    alsa-base is already the newest version.
    alsa-base set to manually installed.
    alsa-utils is already the newest version.
    libasound2 is already the newest version.
    libasound2 set to manually installed.
    Some packages could not be installed. This may mean that you have
    requested an impossible situation or if you are using the unstable
    distribution that some required packages have not yet been created
    or been moved out of Incoming.
    The following information may help to resolve the situation:

    The following packages have unmet dependencies:
    alsa-base : Breaks: linux-sound-base but 1.0.23+dfsg-4 is to be installed
    E: Unable to correct problems, you have held broken packages.

    Und dann sähe der Aufnahme-Befehl irgendwie so aus:

    Code
    ffmpeg -f video4linux2 -i /dev/video0 -r 30 -vcodec mpeg4 -b 1000 -qscale 0.1 -bt 256k -y -f alsa -ac 2 -i hw:1,0 -ar 44100 /var/www/webcam.mp4


    da bekomme ich das:


    pi@raspberrypi ~ $ ffmpeg -f video4linux2 -i /dev/video0 -r 30 -vcodec mpeg4 -b 1000 -qscale 0.1 -bt 256k -y -f alsa -ac 2 -i hw:1,0 -ar 44100 /var/www/webcam.mp4
    ffmpeg version 0.8.6-6:0.8.6-1+rpi1, Copyright (c) 2000-2013 the Libav developers
    built on Mar 31 2013 13:58:10 with gcc 4.6.3
    *** THIS PROGRAM IS DEPRECATED ***
    This program is only provided for compatibility and will be removed in a future release. Please use avconv instead.
    [video4linux2 @ 0x5b9660] Estimating duration from bitrate, this may be inaccurate
    Input #0, video4linux2, from '/dev/video0':
    Duration: N/A, start: 2131.125692, bitrate: 9216 kb/s
    Stream #0.0: Video: rawvideo, yuyv422, 160x120, 9216 kb/s, 30 tbr, 1000k tbn, 30 tbc
    [alsa @ 0x5b9f20] cannot set channel count to 2 (Invalid argument)
    hw:1,0: Input/output error


    Soll ich avconv installieren?

  • Hm dann hast du anscheint nur einen channel, also "-ac" auf 1 ändern:

    Code
    ffmpeg -f video4linux2 -i /dev/video0 -r 30 -vcodec mpeg4 -b 1000 -qscale 0.1 -bt 256k -y -f alsa -ac 1 -i hw:1,0 -ar 44100 /var/www/webcam.mp4


    Soll ich avconv installieren?

    Kannst du aber musst du denk ich erstmal nicht

  • Code
    ffmpeg -f video4linux2 -i /dev/video0 -r 30 -vcodec mpeg4 -b 1000 -qscale 0.1 -bt 256k -y -f alsa -ac 1 -i hw:1,0 -ar 44100 /var/www/webcam.mp4

    jetzt bekomme ich leider folgende Fehlermeldung:

    pi@raspberrypi ~ $ ffmpeg -f video4linux2 -i /dev/video0 -r 30 -vcodec mpeg4 -b 1000 -qscale 0.1 -bt 256k -y -f alsa -ac 1 -i hw:1,0 -ar 44100 /var/www/webcam.mp4
    ffmpeg version 0.8.6-6:0.8.6-1+rpi1, Copyright (c) 2000-2013 the Libav developers
    built on Mar 31 2013 13:58:10 with gcc 4.6.3
    *** THIS PROGRAM IS DEPRECATED ***
    This program is only provided for compatibility and will be removed in a future release. Please use avconv instead.
    [video4linux2 @ 0x4e3660] Estimating duration from bitrate, this may be inaccurate
    Input #0, video4linux2, from '/dev/video0':
    Duration: N/A, start: 11792.758308, bitrate: 9216 kb/s
    Stream #0.0: Video: rawvideo, yuyv422, 160x120, 9216 kb/s, 30 tbr, 1000k tbn, 30 tbc
    Option framerate not found.


    ich habe angenommen dass "-r 30" die framerate (30 frames in der sekunde) ist und diese mal auf 20 und 10 gestellt, aber ich bekomme leider immer die gleiche Fehlermeldung

  • da ich es nicht schaffe mit der Webcam, bin blutiger Anfänger, habe ich mit der RaspberryPI-Cam herumexperimentiert.

    Mit "raspivid -w 1280 -h 720 -fps 15 -t 600000 -o - > my_file.h264" nimmt er auch brav auf.

    Wie schaffe ich es jetzt dass automatisch eine neue Aufnahme beginnt, sobald die aktuelle zu ende ist, damit ich "sozusagen" eine "Langzeitaufnahme" habe, die aus Einzelaufnahmen besteht?

  • Bash
    #!/bin/bash
    x=0
    while :; do
      x=$(($x + 1))
      raspivid -w 1280 -h 720 -fps 15 -t 600000 -o - > my_file_$x.h264
    done
    
    
    exit 0

    Scripts usw werden von oben nach unten abgearbeitet. Eine while Schleife dreht sich im Kreis. $x wird hoch gezählt also immer wieder +1 addiert. Das Script pausiert solange wie ein Befehl oder Programm beschäftigt ist und macht erst weiter wenn der Befehl/Programm eben fertig ist.
    Wird die Aufnahme beendet, fängt die Schleife von vorne an, $x wird +1 addiert und eine neue Aufnahme gestartet allerdings mit einem neuen File - wenn du das nicht möchtest nimmst du alles was mit x zu tun hat wieder raus...


    -t 600000 begrenzt die Aufnahmezeit - wenn du das auf 0 stellen würdest gäbe es keine Begrenzung und somit wäre so ein Script überflüssig..

  • DANKE meigrafd, Du bist mir echt eine grosse Hilfe, ohne Dich wäre ich noch nicht soweit.
    Wie schnell Du auf Fragen reagierst gehört auch mal lobend erwähnt.


    Habe Dein Script jetzt unter /user/local/bin/aufnahme.sh gespeichert und kann es mit "aufnahme.sh" ausführen und es macht was es soll.
    Nur wie kann ich es stoppen?

    Werde jetzt mal herumexperimentieren (aufnahmegröße, fps,...)

    Ich setze den Beitrag noch nicht auf erledigt, denn eigentlich möchte ich auch Ton mit aufnehmen, ob mit extra Mikro für RaspberryPi-Cam oder mit meiner Webcam.
    Vielleicht fällt ja noch jemanden was ein.
    Aber ich bin schon mal happy mit dem was ich jetzt habe.

  • Kein Problem :)

    Wenn du das Script normal ausführst, du also die Ausgabe in der Konsole siehst und keinen neuen Promt kriegst, drückst du einfach die Tastenkombination STRG+c
    Dann brichst du das Script quasi ab
    Wenn du das Script in den Hintergrund schicken willst, das es also im Hintergrund weiter läuft und du mit der Konsole normal weiter arbeiten kannst, führst du das Script mit angehängtem " & " aus, also zB so:

    Code
    /usr/local/bin/aufnahme.sh &


    Oder du gehst direkt in das Verzeichnis und führst es dann aus:

    Code
    cd /usr/local/bin/
    ./aufnahme.sh &

    Wenn du es dann beenden willst musst du in die Process Liste gucken und die PID killen (Process ID):

    Code
    ps aux

    Oder zum gezielten suchen:

    Code
    ps aux | grep aufnahme


    In der ersten Spalte steht der Benutzer der den Prozess ausführt, in der zweiten Spalte steht die PID

    Zum beenden der PID führst du dann folgenden Befehl aus:

    Code
    kill -9 1234

    Alternativ kann man aber auch einfach alle Prozesse eines bestimmten Names killen:

    Code
    killall -9 aufnahme.sh


    Bezüglich Ton mit aufnehmen kann ich dir leider nicht helfen - habe keine Möglichkeit das zu testen


  • Kein Problem :)

    Wenn du das Script normal ausführst, du also die Ausgabe in der Konsole siehst und keinen neuen Promt kriegst, drückst du einfach die Tastenkombination STRG+c
    Dann brichst du das Script quasi ab

    Bei mir bricht das Script kurz ab, wenn ich STRG+c (bei mir am Mac, ctrl+c, ich hoffe das stimmt) drücke, aber es startet scheinbar sofort wieder (die aktuelle Aufnahme wird abgebrochen, aber es beginnt sofort eine neue).
    Im Terminal erscheint kein Promt, sondern nur "^C", aber kein Promt, ich kann nur ein zweites Terminal Fenster aufmachen und mit Deinen restlichen Tips beenden.

    Aber das ist kein Problem starte jetzt mit "/usr/local/bin/aufnahme.sh &" und dann kann ich mit "killall -9 aufnahme.sh" beenden.

    Wieder mal ein ganz grosses DANKE !!!!


    Eine Frage nebenbei:

    Um die Aufnahmen auf meinen Rechner (Mac) zu bekommen verwende ich CyberDuck.
    Ich habe "SFTP (SSH Verbindung) gewählt, als Benutzer habe ich "pi" mit dem entsprechenden Passwort.
    Dadurch habe ich natürlich nur Rechte als "pi".
    Ich wollte das Script (aufnahme.sh) am Mac erstellen und dann mit Cyberduck nach /usr/local/bin/ auf meinem Raspberry kopieren, das hat natürlich wegen den Rechten nicht funktioniert.
    Kann ich mich mit Cyberduck als root einloggen, oder gibt es eine andere Möglichkeit?

  • Nein root ist der Standard/Haupt Benutzer den es auf jedenfall gibt - das is der Administrator

    Bei Raspbian ist das root Password normalerweise: raspberry

    Ansonsten meldest du dich normal als " pi " auf der Konsole an, und setzt ein neues root-Password mit dem Befehl:

    Code
    sudo passwd root
  • Schau dir mal diesen Fred hier an (ist auf english)

    http://www.raspberrypi.org/phpBB3/viewtopic.php?f=43&t=63276

    Aktuell die beste Möglichkeit VideoSurveillance zu betreiben. Es geht aber nur um Video, ohne Audio. Aber besser als alle anderen Frickellösungen wie v4l, oder uv4l, und sonstige die ein /dev/video? device voraussetzen. Denn die CPU kommt niemals hinterher ansehnliche FPS zu liefern. Bei der von silvanmelchior geposteten Version kannst du Full-HD mit 30fps erzielen und obendrauf hast ein tolles Web-Kontrollzentrum wo du alles steuern kannst. Das ganze funktioniert super mit "motion" und die aufgenommenen Dateien landen normalerweise unter /var/www/media/* wo du sie auch über die WebGUI komfortabel betrachten kannst. Wenn du das ganze woanders speichern möchtest, musst du ein klein wenig scripten. Ich z.B. mach das so, dass alle durch Bewegung ausgelösten Videos erst auf dem RPi gespeichert werden, und erst nach Beendigung des Konvertiervorganges von .h264-->.mp4 auf einen anderen meiner Hosts verschoben werden (auf eine SMB-Freigabe im NAS).
    Viele Grüße,
    Sloop

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!