UPDATE: Text aktualisert, Filme sind inzwischen alle h264 encodiert und es ist dank HTML 5 kein spezieller Flash-Player mehr notwendig.

Mitunter erreichen uns verzweifelte Mails mit technischen Anfragen, wie der tägliche Zeitrafferfilm realisiert wird, ob man das nicht auch selbst machen könnte, und ob wir dazu nicht eine Anleitung schreiben könnten.

Betreff: Suche Tipps zu Webcam Zeitraffer
Hallo,
Kann mir mal jemand einen Tip geben, wie man solche Zeitraffer- Flashvideos realisieren kann?
Ein Bekannter möchte gerne eine Webcam in seinem Kuhstall aufstellen – soll öffentlich zugängig sein.
Da die Bilder sicherlich nicht sooo prickelnd sind, kann man es vielleicht per Zeitraffer etwas aufpäppeln…
mit freundlichen Grüßen,

Dies wollen wir hiermit gerne tun und mit diesem HowTo etwas Licht in unsere Technik hinter den Kulissen werfen. Leider gibt es kein WordPress-Plugin o.Ä., das einem die Arbeit vollkommen abnimmt, daher ist etwas Gefummel vonnöten.

Zum technischen Hintergrund

Wir haben bei Hetzner einen dedizierten Server gemietet. Als Betriebssystem läuft Ubuntu Linux 16.04.

Das Erstellen der Zeitrafferfilme

Um das Rohmaterial zu gewinnen, muss die Kamera in regelmäßigen Abständen automatisch abgefragt und das aktuelle Bild gespeichert werden. Dazu benutzen wir Wget (Wikipedia). Bei einer Einstellung von 10 Sekunden,  wie für die KaiKam gewählt, werden in 24 Stunden 8640 Einzelbilder gespeichert. Setzt man diese Frequenz herab, so wird seltener ein Bild gespeichert und der Film ist schneller zu Ende. Eine hohe Frequenz bewirkt, dass der Film länger wird. Einige Kameras liefern ihre Bilder jedoch in grösseren zeitlichen Abständen. Das erklärt, warum etwa der Zeitrafferfilm der Hafenhaus-Kamera, die zur Zeit minütlich aktualisiert, kürzer ist, und die Fähren im Film schneller an- und ablegen, als es auf anderen Filmen zu sehen ist.
Das Kommando sieht bei uns so aus:

wget --tries=1 --timeout=30 -q --output-document=`date +%F_%H-%M-%S`.jpg http://www.adressederwebcam.de/
Das „–output-document=`date +%F_%H-%M-%S`.jpg“sorgt dafür, dass jedes Bild  Datum und Uhrzeit als Namen hat. Anschließend wird das Bild zu den anderen Bildern in einen Ordner kopiert.

Aus den vorhandenen Einzelbildern wird nun alle 10 Minuten ein Film der letzen 10 Minuten erstellt und an den bereits vorhandenen Film angehängt. Der werdende Zeitrafferfilm verlängert sich somit im Laufe des Tages. Das Tool MEncoder (Wikipedia) übernimmt bei uns die Erstellung des Films. Für das Anhängen sorgt ffmpeg. Bei uns sieht der Aufruf von mencoder etwa so aus:

mencoder mf://allebildermitdemnamenderletzten10minuten.jpg -mf fps=25:type=jpg -ovc x264 -x264encopts nocabac:level_idc=30:bframes=0:global_header:threads=auto:subq=5:frameref=6:partitions=all:trellis=1:chroma_me:me=umh:bitrate=2000 -vf scale=1280:-10 -of lavf -ofps 25 -lavfopts format=mp4 -o videoA.mp4  >/dev/null
Die Option fps=25 legt fest, dass der Film 25 Bilder pro Sekunde zeigen soll. bitrate=2000 sorgt für eine angenehme Qualität, bei nicht zu großen Dateien, scale=1280:-10 sorgt für das richtige Bildformat der Filme. Für die weiteren Optionen sei auf die Dokumentation verwiesen.

Die so erstellten 10 Minuten Film werden nun folgendermaßen an den bereits vorhandenen angehängt:

ffmpeg -f concat -safe 0 -i mylist.txt -c copy zusammengesetzerfilm.mp4
In der Datei mylist.txt stehen einfach untereinander die Namen der beiden Filmstücke, die zusammengesetzt werden sollen:

file 'filmstueck1.mp4'
file 'filmstueck2.mp4'

Na, dann mal los!