Ich möchte ein Video von einem Teil meines Hauses mit einer Webcam aufnehmen, während ich ein paar Tage weg bin, um sicherzustellen, dass alle Burger fotografiert und das Foto auf meinen Server hochgeladen werden, bevor sie es überhaupt bemerken.
Ich habe eine Webcam eingerichtet, um Filmmaterial mit mjpg_streamer zu streamen. Das funktioniert und läuft OK.
Es ist möglich, eine Standbildaufnahme aus dem Stream zu erstellen, wann immer Sie "FileName.jpg" möchten:
wget http://127.0.0.1:8080/?action=snapshot -O FileName.jpg
Ich habe einen Amazon FTP-Server mit Amazon Web Services und FTP-Zugriff über sFTP. Ich bin derzeit mit dem Firefox-Plugin von Firefox verbunden, damit das funktioniert. Die Idee ist, den Computer mit der Verbindung live laufen zu lassen.
Ich möchte die Aufnahme eines Bildes aus dem Stream alle 1 Minute per Skript ausführen und das Bild über die Live-FTP-Verbindung auf meinen Server hochladen lassen. Entweder möchte ich die Originaldatei von meinem PC löschen, damit die nächste O speichert oder fügen Sie eine Nummer an das Ende jeder Datei an und senden Sie sie per FTP. zB FileName1.jpeg, Filename2.jpeg.
Ich habe stundenlang gegoogelt und obwohl es viele Beiträge zum Skripten eines FTP-Uploads gibt, kann ich keinen konstanten Stream zum Hochladen finden ... dh "Diesen Ordner ansehen, den Inhalt alle 1 Minute und dann eine Minute später hochladen Laden Sie alle neuen Inhalte hoch ".
Ich brauche wohl ein Bash-Skript, das:
- Behalten Sie einen Zähler bei, damit jede neu erstellte Datei einen anderen Namen erhält
- Senden Sie diesen Dateinamen alle 30 Sekunden oder 1 Minute an "wget http://127.0.0.1:8080/?action=snapshot -O FileName XX .jpg"
- Laden Sie den Dateinamen XX .jpg auf den FTP-Server hoch
Aber ich habe keine Ahnung, wie das geht! Kann mich jemand leiten? Oder kennt jemand eine Möglichkeit, mit FileZilla oder etwas anderem umzugehen (die einen Ordner AFAIK nicht sehen kann: https://forum.filezilla-project.org/viewtopic.php?t=41609 ?
quelle
Antworten:
Mein erster Tipp wäre, die Dateien anhand des Datums und der Uhrzeit ihrer Aufnahme zu benennen. Auf diese Weise müssen Sie nirgendwo einen Zähler aufbewahren, was in einem Skript, das nicht kontinuierlich ausgeführt wird, schwierig wäre, da seine Variablen bei jedem Aufruf zurückgesetzt werden. Sie könnten die Variablen in Dateien speichern, aber es ist einfacher, wenn Sie sicherstellen, dass die Namen nicht kollidieren. So etwas wie
wget http://127.0.0.1:8080/?action=snapshot -O "Snapshot-$(date).jpg"
wenn Sie Bash verwenden. (Entschuldigung, wenn die Syntax nicht funktioniert, ich bin kein Bash-Experte und tippe dies in mein Telefon ein.)Wie Sie bereits erwähnt haben, stehen verschiedene Tutorials zum Erstellen von Skripten für FTP-Uploads zur Verfügung. Mindestens einer von ihnen sollte ein Beispiel enthalten, das Dateien nach einem Muster hochlädt, z. B. "Snapshot - *. Jpg", bei dem der Platzhalter mit dem Zeitstempel übereinstimmt. Sie können auch das FTP-Programm (z. B. lftp oder ncftp mit Binärdateien für die Skripterstellung) so einstellen, dass alles in einen bestimmten Ordner hochgeladen wird. Löschen Sie dann den Ordner, wenn das Programm erfolgreich war. Auf diese Weise können Sie Ihr Skript so oft ausführen, wie Sie möchten, indem Sie cron oder einen systemd-Timer verwenden. Es ist flexibel genug, um immer zu versuchen, Dateien hochzuladen, die zum späteren Zeitpunkt nicht erfolgreich waren.
Es gibt auch Software, die für diese Aufgabe entwickelt wurde, und vieles mehr. Ein solches Programm, das ich selbst verwendet habe, heißt einfach "motion" und ist für die meisten Distributionen verfügbar. Es verfügt über eine integrierte Bewegungsauslösung (Aufzeichnen und / oder Aufnehmen von Schnappschüssen) oder einen kontinuierlichen Modus. Auf Systemen wie einem Raspberry-Pi kann es etwas CPU-intensiv sein, aber es funktioniert auf jeden Fall.
Wenn Sie die Leistung etwas steigern möchten, möglicherweise mehrere Remote- / lokale Kameras ausführen und die Bewegungserkennung auf eine leistungsstärkere Zentralmaschine auslagern möchten, schauen Sie sich Zoneminder an. Das Einrichten dauert länger und ist meiner Erfahrung nach wählerisch, wenn Sie die richtigen Auflösungen für Ihre Kamera-Feeds manuell einstellen. Es kann jedoch bis zu einem gewissen Grad per Skript ausgeführt werden.
quelle
Ich würde AWS S3 anstelle eines FTP-Servers in EC2 und das AWS CLI-Tool verwenden, um die Dateien hochzuladen. Es ist eine viel leichtere Lösung, die keine Systemadministration erfordert. S3 bietet viel dauerhafteren Speicher als die Volumes für EC2.
Tool herunterladen: https://aws.amazon.com/cli/
Relevante Dokumente: http://docs.aws.amazon.com/cli/latest/reference/s3/
Sie können einen Benutzer erstellen, der nur mit IAM in den S3-Bucket hochladen kann (damit die Kriminellen die Dateien nicht löschen können!).
Ich würde diese Aufgabe erfüllen, indem ich ein Bash-Skript (oder Perl, Node.js, Ruby, Powershell?, ...) erstelle, das wget aufruft und einen Dateinamen mit dem Datum / Uhrzeit ausgibt. Rufen Sie
aws s3 cp ...
eine for-Schleife auf, um alle Dateien im Ordner hochzuladen.aws s3 cp
Verschieben Sie die Datei bei jedem erfolgreichen Aufruf für jede Datei in einen Archivordner, um sie auch lokal zu speichern. Wenn Sie nicht möchten, dass ein lokales Archivaws s3 mv
die bereits hochgeladenen Objekte automatisch magisch löscht.quelle
Herren - ein großes Dankeschön an alle, die geholfen haben. Zum Teil haben mir alle Ihre Vorschläge geholfen, zum Endergebnis zu gelangen. Ich habe Ihnen alle Anerkennung für die Antworten gegeben, aber meine eigene Antwort unten veröffentlicht, in der Hoffnung, dass sie für andere nützlich ist. Mir ist klar, dass dies im Allgemeinen nicht der Fall ist, aber in diesem Fall gibt es viele Bereiche, um die Lösung zu bilden. Deshalb habe ich alles unten in einem zusammengefasst.
Installieren Sie die Dienste, die für die Verwendung von AWS S3 erforderlich sind
Melden Sie sich mit Ihrem eigenen Amazon-Konto für den AWS S3-Service an: https://aws.amazon.com/s3/
Definieren Sie einen neuen Zugriffsschlüssel für Ihr Benutzerkonto über "Zugriffsschlüssel -> Neuen Zugriffsschlüssel erstellen" und laden Sie die CSV-Datei herunter, wenn Sie dazu aufgefordert werden. Wenn Sie dies nicht tun, können Sie die Befehlszeilenfunktionen von S3 nicht verwenden: https://console.aws.amazon.com/iam/home?#security_credential
Öffnen Sie die Datei ROOTKEY.CSV, kopieren Sie den enthaltenen AccessKeyID-Wert und den SecretKey-Wert und fügen Sie ihn ein, wenn Sie beim Starten von 'aws configure', das Sie über die Befehlszeile starten, bevor Sie AWS unter Linux verwenden, dazu aufgefordert werden.
Testen Sie, ob Sie eine Datei mit einer sample.txt-Datei verbinden und hochladen können:
> aws s3 mv ~/SourceFolder/sample.txt s3://NameOfYourAWSS3Bucket
/ AFolderYouHaveCreatedLaden Sie mjpg_streamer herunter und installieren Sie es gemäß den Build-Anweisungen hier: https://github.com/jacksonliam/mjpg-streamer#building--installation Navigieren Sie anschließend zu seinem Ordner
Starten Sie den mjpg-Streamer:
Überprüfen Sie, ob es ausgeführt wird, indem Sie den folgenden Link in Ihrem Webbrowser besuchen:
Nehmen Sie eine einzelne Datei mit Datums- und Zeitstempel (und speichern Sie sie in dem lokalen Verzeichnis, aus dem sie ausgeführt wird) mit:
Dadurch wird eine Datei im Unterordner 'www' Ihres Ordners mjpeg_streamer mit dem Namen 'output-16-09-01-22-35-30.jpg' erstellt, wenn sie am 1. September 2016 um 22:35 Uhr ausgeführt wird.
Erstellen Sie ein neues Bash-Skript (z. B. MyScript.sh), erteilen Sie ausführbare Berechtigungen und kopieren Sie den Inhalt unten hinein. Bei der Ausführung wird alle 5 Sekunden ein JPEG mit Zeitstempel erstellt, bis das aktuelle Datum das angegebene Enddatum erreicht. In diesem Fall beginnt es am Datum A und endet am Datum B. Ersetzen Sie Ihre eigenen Daten.
Kopieren Sie dies in das Skript und ersetzen Sie relevante Pfade:
Verbesserungsvorschläge sind willkommen.
Sie können auch den Fortschritt Ihres Speichers im AWS S3 mit überprüfen
Ich ließ es zwei Stunden lang alle 10 Sekunden feuern und es erzeugte 74 MB Uploads. Ich rechne damit für eine Woche mit 6,5 GB - weniger als die Preisstufe für den Service, bei dem die Kosten anfallen, was meiner Meinung nach 8 GB beträgt.
Danke noch einmal.
quelle