Timelapse (Langzeit) mit Raspberry PI Zero

Vor einiger Zeit wollte ich meinen Avoseedo ausprobieren, aber ich hatte noch einen ungenutzten Raspberry PI Zero herumliegen sowie die Idee das ich ja auch sehen möchte was dort passiert.

Aus diesen Grunde habe ich eine kleine und einfache Lösung erstellt, um Timelapse mithilfe des RPI-Zero über Tage aufnehmen zu können

Anforderungen

Nach etwas herum experimentieren hatten sich folgende Anforderungen für das Projekt ergeben:

  • Bildaufnahme im Abstand von 1 Minute und nur zwischen 5 bis 22 Uhr
  • Filehandling direkt über FTP Server um die SD-Karte nicht mit dauerhaften Schreibzugriffen zu belasten
  • Benennen + Einsortieren der Bilder nach Datum + Uhrzeit, aber auch zentralen Zähler um später einfach verschiedene Verfahren anwenden zu können
  • Erstellen der Timelapse als Video geschieht extern

Aufnahme

Die Aufnahmen werden per Cronjob und einen simplen Script erstellt, link zum Script: https://gist.github.com/Mario-F/c38ac7791c31ffab367e57cac611c6ab

Die nächsten Schritte werden als PI-User auf dem RPI durchgeführt und gehen davon aus das die RPI-Kamera mit raspistill Fotos erstellen kann.

Das Script herunterladen und ausführbar machen:

wget -O timelapse.sh 'https://gist.githubusercontent.com/Mario-F/c38ac7791c31ffab367e57cac611c6ab/raw/1ccfb16b51e2c9d30fe4923e99e21dea6e63b547/timelapse.sh'
chmod +x timelapse.sh

Die Datei sollte nun geöffnet werden `vim timelapse.sh` (oder Texteditor der Wahl) und im Configbereich die benötigen FTP-Daten eingetragen.

Im Anschluss kann per manueller Ausführung `./timelapse.sh` die Funktion getestet werden, wenn die Fotos ordentlich auf unseren FTP-Server angekommen können wir weiter machen.

Die Crontab wird nun bearbeitet um das Script dort jede Minute (oder wie gewünscht) ausführen lassen:

crontab -e
* 4-21 * * * /home/pi/timelapse.sh # Ausführung jede Minute zwischen 4 und 21:59 Uhr

Timelapse erstellen

Die Aufnahmen werden standardmäßig per Tag einsortiert, wir können diese Ordner jetzt von unseren FTP auf dem Computer herunterladen welcher die Konvertierung durchführen soll.

Aktuell habe ich hier nur Beispiele für Linux (evtl. auch MAC) und ffmpeg.

Als erstes schaue ich mir ein paar Stichproben an und definiere das ich nur Bilder größer 1 MB nutzen möchten, aus dem Grund da kleinere Bilder zu 99 % nur schwarz und nichts Erkennbares zeigen (Das sollte jedoch auf die Begebenheiten angepasst werden).

Im Anschluss werden die restlichen Bilder in eine Liste geschrieben:

# Create list
find . -mindepth 2 -type f -size +1024k | cut -c 3- | sort | xargs -i echo "file '{}'" > list.txt

Diese Liste kann ffmpeg nun nutzen um aus den einzelnen Bildern ein Video zu erstellen.

Ich habe hier zwei verschiedene Beispiele vorgesehen, einmal um eine Version möglichst original zu speichern und die zweite etwas stärker komprimiert für das hochladen und herzeigen auf diversen Plattformen.

# Full resolution video
ffmpeg -f concat -i list.txt -r 30 -vcodec libx264 timelapse_highq.mp4
# 720p video with higher compression
ffmpeg -f concat -i list.txt -r 30 -vcodec libx264 -crf 20 -preset slower -movflags +faststart -vf scale=-2:720,format=yuv420p timelapse_lowq.mp4

Ergebnis

Leider konnte der Avoseedo bisher keinen Avocadokern zum Keimen bringen, jedoch habe ich stattdessen 2 Tage im Leben einer Pflanze festgehalten.

https://youtu.be/9pbSi86cce0

Fazit

Dieses Projekt sollte für mich nur ein schneller Test sein um Timelapse mit RPI-Zero auszuprobieren, der Vorteil welcher sich durch FTP Upload einstellt besteht darin das dieser schon seit Wochen läuft und Speicherplatz kein Problem darstellt.

Im Bereich der Aufnahme gibt es jedoch mit den respistill Parametern noch einiges zu verbessern, um eine bessere gleichmäßigere Aufnahmeserie zu erstellen.