Die Bilanz und Archiv-Video von IP-Kameras, LucaTNT - s

Artikelnavigation

Die Bilanz und Archiv-Video von IP-Kameras, LucaTNT - s

Eines, was ich wollte, war allerdings mit den Aufnahmen aus den letzten 1-7 Tagen jederzeit zur Verfügung. Die Onboard-Firmware auf einen FTP-Server aufzeichnen kann, aber das war nicht optimal, gab es keine einfache Möglichkeit, die Cliplänge und war ziemlich klobig zu definieren, einzurichten.







Ich begann um zu graben, und ich fand, dass ffmpeg leicht den RTSP-Stream von den Kameras aufzeichnen kann. In den Kameras Einstellungen können Sie das Video-Bitrate, bis zu 4 Mbit wählen. Ich fand, dass die optimalen Bitrate 2 Mbit: gehe bis 4 bedeuten nur, dass die Dateien doppelt so groß waren ohne spürbare Verbesserung der Qualität.
Dies führt zu etwa 15 Gb pro Tag und Kamera von Video-Dateien. Das ist viel weniger als 2 Mbit Durchschnitt, und das auf die Tatsache zurückzuführen ist, dass in der Nacht, mit der IR-Lichtern auf, das Bild wird schwarz und weiß und die Bitrate sinkt auf etwa der Hälfte des üblichen Wertes.

Ich kam mit einer Komplettlösung auf, die aus folgenden Teilen:

  • Zwei Foscam FI9805W IP-Kameras, aber jede vernünftige Anzahl von Nocken verwendet werden,
  • My Home-Server, die unter Debian laufen, die auf 24/7
  • Ein cronjob, der alle 15 Minuten ffmpeg feuert bis zu 15 Minuten Clips aufnehmen. Das macht viel einfacher suchen, als wenn man mit riesiger mehrstündigen Aufnahme beschäftigen.
  • Ein cronjob, die jeden Tag um Mitternacht löst, die Aufnahmen älter als 24 Stunden auf eine viel kleinere Low-Framerate und minderwertige Dateien konvertiert Plattennutzung zu reduzieren
  • Ein cronjob, die jeden Tag um 04.00 Uhr löst, um ältere Aufnahmen zu löschen.

Aufnehmen von Video

Das ist der einfache Teil. Ich verwende nur dieses Skript, das ich recordCam.sh genannt:

Zeigen Sie den Code auf Gist.

Sie benötigen einen Cronjob zu Ihrem System hinzufügen, dieses Skript zu schießen alle 15 Minuten:

Die Umstellung auf minderwertige für die Archivierung

Das Skript, das ich verwende, convertVideo.sh, ist dies:

Zeigen Sie den Code auf Gist.

Es nimmt die Datei, die Sie es passieren, erstellt die entsprechende Ordnerstruktur und kodiert sie, dann ist es die ursprüngliche Datei löscht.

Ich benutze den Befehl find die Videos zu bekommen, die konvertiert werden müssen, und es sucht nach Dateien über 10 MB an, wurden zuletzt geändert mehr als 1440 Stunden. Natürlich können Sie diese Parameter ändern, wie Sie es wünschen.

Pruning alten Videos

So, hier ist der cronjob die Arbeit zu tun (Wortspiel beabsichtigt):

Die -mindepth 3 Parameter wurden durch die Ordnerstruktur erforderlich Ich wählte, nämlich:. Archiv / camXX / YYYY-MM / DD / * mp4

  • Bei der ersten Tiefen Ebene gibt es die Ordner jede Kamera. Ihre Datum der letzten Änderung ändert sich jedes Mal, wenn Sie eine Datei hinzufügen oder / foder Inneren entfernen, so dass dies tatsächlich geschieht, das erste von Evert Monat, wenn Sie den Ordner des Monats erstellt wird.
  • Auf der zweiten Ebene gibt es den YYYY-MM-Ordner, also sollten wir sie nicht antasten
  • Schließlich auf der dritten Ebene gibt es unsere „Tag“ Ordner, die wir löschen wollen, wenn sie zu alt werden.

Dann wird eine endgültige cronjob, die alte und leere Monat entfernt Verzeichnisse

Sie sind fertig

26 Gedanken über „Record und Archiv-Video von IP-Kameras“

Sie da. Das ist eine sehr schöne Anleitung. Genau das, was ich suche, aber ich kann es nicht funktioniert.






Wäre es möglich, eine detaillierte Anleitung zu machen, wie diese Arbeit zu machen.
Welches OS sollte ich installieren. Welches ist die beste für dieses Projekt?

Mit freundlichen Grüßen.
Michael Pedersen

Hallo Michael,
Ich benutze Debian, aber jede Linux-Distribution Sie bequem mit tun wird, die einzige Voraussetzung ist ffmpeg zu installieren.
Eine detaillierte Anleitung würde mich Stunden zu schreiben, und ich wirklich nicht im Moment, dass viel Zeit haben.
Ein schneller Vorschlag: das bereitgestellte Skript im selben Ordner speichert, bearbeiten Sie sie nach Bedarf (meist IP-Adressen ändern, Anmeldedaten und Pfaden), sie ausführbar machen (chmod + x /path/to/the/script.sh), fügen Sie die erforderlich Cronjobs, wie die Beispiel, die ich geschrieben, von crontab -e ausgeführt wird. Einfügen der Zeile vorgesehen, und speichern Sie die Datei.

Das sollte es sein, ich hoffe, es hilft.

Zur Zeit arbeite ich auf ffmpeg und RTSP Kamera als gut, und ich habe mich gefragt:
Warum nicht mal die Kamera einen zweiten Stream in niedriger Qualität senden (manche Kamera kann dies tun), und Sie diesen Strom aufnehmen als gut, aber dann als (niedrig) Qualität Stream. Nach einer Woche, wenn Sie die hohen Qualitätsströme löschen wollen, alles was man braucht ist ein einfacher Löschbefehl. Der niedrige Qualität Strom ist nach wie vor in Ihrem Archiv.

Sie können sogar so weit lassen ffmpeg schaffen statischen JPEG-Dateien alle 2-3 Sekunden und sicher sie für ewig gehen.

Wichtig ist, dass Sie das System funktionieren, wenn gewünscht wird, und es nicht durch ständig Umkodierung olders Dateien crunch Ihre CPU lassen, während Sie es in geringer Qualität zum ersten Mal gespeichert haben könnten, und lassen Sie Ihre Kamera das harte Wort.

Hallo Edwin,
Sie haben völlig Recht, dass eine schöne Lösung wäre.
Aber auch die die Ausgabedatei Sekundärstrom der Kamera ist ziemlich groß, etwa 4 mal so groß wie ich für meine minderwertigen „langfristig“ Lagerung erhalten.

Es stimmt aber, dass Festplattenspeicher in diesen Tagen ziemlich billig ist, so dass ich vielleicht darüber nachdenken, um Ihre Lösung Schalten und etwas Energie in die Zukunft retten.

Zum Glück ist die Lösung ist einfach. In killall -INT ffmpeg an die Spitze des recordCam.sh Skript. Der -INT Schalter simuliert ein Benutzer-Interrupt (ctrl-c), und wird ffmpeg ermöglichen sauber zu verlassen und in eine nutzbare Datei zu schreiben.

Das ist ein guter Tipp, danke!

Stattdessen 2 Arbeitsplätze mit Dateien und Ordnern zu löschen, können Sie eine haben. Auf dem ersten „finden“ Befehl, die Ordner älter als 5 Tage findet, den exec Befehl ändern „rm -rf“ zu sein. Es wird der Ordner und alle Dateien in ihm zugleich entfernen. Nizza Skripte!

Hallo Bill!
Der erste Fund erhält alle Dateien, die konvertiert werden müssen, und die Conversion-Skript übernimmt die Originale zu löschen, sobald es fertig ist, also muss ich die zweite die leeren Verzeichnisse zu löschen, die zurückgelassen wurden.
Ich kann in der ersten nicht rm -rf, weil es noch Videos könnten in den Ordner umgewandelt werden.

Könnten Sie oder jemand etwas vorschlagen, wie das Problem zu lösen?

Vielen Dank,
Csaba

Hallo Csaba,
Ich habe doppelt mein Setup überprüft und ich nicht verlieren jedes Video, ohnehin zu helfen, die Quelle Ihres Problems zu diagnostizieren ich Ihnen vorschlagen würde, eine andere Protokolldatei für jede 15-Minuten-Futter zu sparen, indem Sie die letzten Zeilen von recordCam ersetzen /tmp/cam01.log mit /tmp/cam01-$name.log oder so ähnlich

Sehr gute Idee, danke. Inzwischen habe ich herausgefunden habe, dass es 3 RTP verpassten Pakete in jeder Protokolldatei. Ich verwende statt ffmpeg avconv für ich es nicht unter Raspbian Jessie arbeiten konnte. Ich glaube nicht, dass der Ursprung des Problems ist. Soweit ich weiß, avconv und ffmpeg sind sehr ähnlich in Syntax, sind sie nicht.
Sollte es in dieser Frage jede Entwicklung sein, werde ich es mit U und anderen teilen.

Hallo Luca, vielen Dank für Ihre Skripte zu teilen, hat mich gerettet viel Zeit sie alle aus von mir herauszufinden!

Ich bin froh, dass es geholfen!

Hallo Kleriger,
Eigentlich, dass Parameter nie wirklich für mich gearbeitet entweder, ich denke, ffmpeg nur die fps Rate der Quelle folgt.

es ist genau das, was ich suche, vielen Dank bro
aber wie das Audio zu bekommen?
und es gibt einige Artefakte auf meinem Video, kann ich dieses Problem beheben?

Warum sind Sie mit „-t 900“ statt „-segment_time 900“?

Um ehrlich zu sein ich nicht wusste, dass Option existiert, aber es sah zu haben Ich würde sagen, es ist ziemlich bequem, aber es sieht aus wie kann es nur Ausgabedateien mit einer progressiven Dateinamen, ohne explizit das Datum und die Uhrzeit der Aufnahme enthalten .

Datum und Uhrzeit auf die Segmentdateinamen hinzufügen

-segment_atclocktime 1 -strftime 1 „cam1-% Y-% m -._% H% M-% S.mp4“

Danke für den Tipp!

Hallo
Das sieht gut aus, ich habe noch, es zu versuchen, aber ich frage mich,
Was passiert, wenn die Verbindung während des Zeitraums von 15 Minuten verloren, dass der ffmpeg läuft?
Wenn die Kamera zurück kommt, wird die gesamte 15 Minuten Sitzung verloren, oder wird ffmpeg warten, bis die Verbindung kommt zurück und weiterhin das Speichern des Stroms?

Wenn die Verbindung unterbrochen wird ffmpeg Zeitüberschreitung und speichern, was sie hat (die Datei manchmal beschädigt werden, aber 95% der Zeit wird VLC Lage sein, es zu spielen, sowieso).
Unter der Annahme, die Kamera ist wieder online, die nächsten 15 Minuten Brocken bleiben davon unberührt.

Lassen Sie eine Antwort Antworten abbrechen







In Verbindung stehende Artikel