Zeitraffer Video aus JPGs mit ffmpeg

Die Outdoor-Cam über Berlin ist nach langer Zeit endlich auf dem Dach montiert und wird mit Strom versorgt. Zum Einsatz kommt eine Mobotix M26 Allround, die die Bilder z.B. per JPG oder wahlweise auch H.264 bzw. MJPEG Stream wiedergeben kann. Für Zeitraffer aufnahmen reicht es alle paar Sekunden ein Bild aufzuzeichnen, wer Echtzeit Videos möchte, bedient sich besser des H.264 Streams.

Alle 5 Sekunden ein JPG von der Kamera abzurufen und zu speichern ist relativ einfach. Wir bauen uns ein Script:

#!/usr/bin/env bash

date=$(date '+%s')
url="http://kamera/cgi-bin/DownloadLiveImage"

/usr/bin/curl -s -o liveimage-${date}.jpg ${url}

Und lassen das in den gewünschten Abständen laufen. Also zum Beispiel alle 5 Sekunden: while true; do (./get.sh; sleep 5); done

Wer genug hat, unterbricht die Schleife und die Datensammlung ist beendet. Im aktuellen Verzeichnis befinden dann allerhand JPG Dateien im Format liveimage-UNIXTIMESTAMP.jpg. Da der Unix-Timestamp sekündlich ansteigt, bekommen wir die Bilder schon richtig (aufsteigend) sortiert, wenn wir uns über globbing die Files ausgeben lassen oder an ein anderes Programm übergeben. Dieses Feature nutzen wir um ffmpeg mit den Bildern zu füttern.

ffmpeg -r 60 -pattern_type glob -i '*.jpg' -vcodec libx264 timelapse.mp4

Mit -r definieren wir wie viel Input wir pro Sekunde haben möchten - je nach Anzahl der Bilder möchte man hier variieren. Als Ausgabe bekommen wir in timelapse.mp4 unser Zeitraffer Video.

 

[itgaertner.net]

Words from a network guy


Aus einer Reihe JPG Bilder ein Zeitraffer Video generieren

2019-04-19