Zeitraffer / Timelapse von Obst am Teller: Nachbearbeitung mit Open-Source-Tools – Hugin, ImageMagick, mencoder, Perl und OpenShot

2 Kommentare Autor: Jürgen (jdo)

Vor ein paar Tagen hatte ich das Tool DSLR Controller vorgestellt und angedeutet, dass ich damit ein Zeitraffer über sechs Tage gemacht hatte. Das Objekt: Obst. Selbst in den sechs Tagen hat sich schon einiges getan.

Der Raum war abgedunkelt und mit Lichtquellen ausgestattet, damit die Licht-Verhältnisse so stabil wie möglich waren. Nacht und Tag hatte aber trotzdem Einfluss. Am Morgen des sechsten Tages hatten es dann diese nervigen Fruchtfliegen irgendwie geschafft, den Obst-Teller zu finden. Deswegen wurde an dieser Stelle der Zeitraffer abgebrochen, da ich keine Insekten-Zucht eröffnen wollte.

In den vergangenen Tagen ging es dann an die Nachbearbeitung. Es gab diverse Hürden zu nehmen:

  • Meine Canon EOS 7D war zwar auf einem Stativ, ich musste aber dennoch den Akku dann und wann wechseln. Da die Bilder mit einem Zoom-Objektiv aus der Ferne geschossen wurde, merkt man hier die kleinste Bewegung. Somit würde es leichte Hüpfer im Video geben.
  • Wie gesagt war der Raum abgedunkelt. Dennoch spielten die Lichtverhältnisse eine Rolle und das Video würde somit leicht flackern.
  • Ziel war es, ein HD-Video zu erschaffen (1280×720). Meine 7D schießt in kleinster JPG-Auflösung 2592×1728. Somit würde auch Full HD funktionieren, Du musst nur die Zahlen entsprechend anpassen. Aber verrottendes Obst in Full HD – gut übertreiben wollte ich nun auch wieder nicht. Im Endeffekt wollte ich die Bilder alle auf 1280×720 bringen, um damit gleich ein HD-Format zu haben. Rechne ich die 2592×1728 der Kamera auf 1280 Breite herunter, käme dabei 853 Höhe heraus. Deswegen muss man noch ein paar Pixel wegschneiden, sonst sieht das Video gequetscht aus.
  • Alles sollte unter Linux mit Open-Source-Tools realisiert werden. Bei der Bildbearbeitung und 1500 Bildern muss man automatisieren, sonst würde man durchdrehen. Ich habe es zwar nicht verwendet, Teile der Aktionen ließen sich aber auch mit Phatch durchführen – wer lieber ein GUI statt die Kommandozeile benutzt.

Während des Workflows bei dem Zeitraffer sind mir Dinge aufgefallen, die ich nun anders machen würde. Da ich eine Aktion in diesem Umfang das erste Mal durchgeführt habe, konnte ich es vorher nicht wissen. Deswegen beschreibe ich, wie ich es gemacht habe und am Ende des entsprechenden Kapitels, was ich anders machen würde. Doch hier erst einmal das Ergebnis – besonders interessant war, dass der Basilikum einfach weiter Blüten produziert hat – ohne Wasserquelle – faszinierend:

Wer YouTube nicht mag, kann sich das Video hier auch herunterladen (zirka 75 MByte).

Erster Schritt: Backup!!!

Bevor Du irgendetwas tust, mach ein Backup der Original-Bilder. Solltest Du etwas verhauen und Dir gehen Bilder aus sechs Tagen flöten, ist das echt richtig richtig scheiße. Deswegen:

  • Bilder vielleicht auf der Speicherkarte lassen
  • Zusätzlich ein Backup auf einen externen Datenträger

Nun kannst Du mit den Fotos auf Deiner Festplatte hantieren – die Original-Fotos sind gleich wieder rüber kopiert.

Zweiter Schritt: Bilder ausrichten

Ich hatte bereits erwähnt, dass das Video gehüpft wäre und ich die Bilder allerdings ausrichten wollte. Es sieht einfach so viel besser aus, wenn das Auge nicht dauern durch Sprünge belästigt wird. Diese Sprünge sieht man gut, wenn man zwei Bilder vor und nach Akku-Wechsel in GIMP überlagert. Die Linie sollte nicht vorhanden sein. Würde man die Bilder “normal” überlagern, sähe das Bild komplett unscharf aus. Das scheint ein minimales Problem zu sein. Aber man sieht es im Video.

Diese Linie sollte nicht da sein

Diese Linie sollte nicht da sein

Dazu verwenden wir das Kommandozeilen-Tool align_image_stack aus dem Hugin-Paket (man align_image_stack für die Mapage). In meinem Ordner mit den JPG-Dateien sieht der Befehl so aus:

align_image_stack -a tif *.JPG -v

align_image_stack würde per Standard eine .pto-Datei erzeugen. Möglich sind auch .hdr- oder .tif-Dateien. Dewegen wandle ich an dieser Stelle die ausgerichteten Dateien in ein .tif-Format um, weil die Weiterverarbeitung für meinen Fall damit am einfachsten ist.

Was ich anders machen würde: Dieser Schritt käme später der Bildbearbeitungs-Liste. 1500 Bilder ausrichten ist ein Monster. Mein Rechner hat über fünf Tage gebraucht, um die Aktion durchzuführen. Ich habe einen i7 mit acht GByte RAM. Arbeitsspeicher war komplett ausgelastet. Leider verwendet align_image_stack derzeit nur eine CPU (Single Threaded). Ich glaube gelesen zu haben, dass man an einer Multi-Thread-Version arbeitet. Da ich nun weiß, wie Ressourcen-hungrig das Ding ist, würde ich den Rechner für die Aktion außerdem in einem Kommandozeilen-Modus starten. Außerdem wäre es wesentlich schlauer gewesen, die Fotos erst zu verkleinern und dann align_image_stack darauf los zu lassen. Auch wenn es lange gedauert hat (und über 14 GByte an tif-Dateien dabei herausgekommen sind), funktionierte es dennoch.

align_image_stack: Ressourcen-hungrig aber für den Zeitraffer notwendig

align_image_stack: Ressourcen-hungrig aber für den Zeitraffer notwendig

Was align_image_stack macht, sieht man gut an diesem Bild:

nach align_image_Stack

nach align_image_Stack

Diese Ränder würden im Video schwarz auftauchen und müssen deswegen weg. Führt man den Schritt align_image_stack später aus, muss man aber in den nachfolgenden Schritte Spielraum lassen, damit man solche Ränder noch wegschneiden kann!!!

Dritter Schritt: Die Ränder loswerden

Ab nun geht es mit ImageMagick weiter. Ich habe, wie bereits erwähnt, noch massig Spielraum bei meinen Bildern. Deswegen kann ich es mir leisten, einfach 50 Pixel an jeder Seite weg zu nehmen. Dafür habe ich den Befehl mogrify (man mogrify) verwendet. mogrify und convert (man convert) sind sehr ähnlich, außer dass mogrify das Original-Bild überschreibt (Backup!) – außer man wandelt das Format. Ich habe an dieser Stelle wieder in .jpg umgewandelt und mein Befehl sie so aus:

mogrify -shave 50x50 -format jpg *.tif

oder ausgeschrieben: rasiere von allen tif-Bildern in diesem Verzeichnis 50 Pixel weg (-shave 50×50) und speichere als jpg ab (-format jpg).

Die daraus resultierenden jpg-Dateien habe ich dann in einen neuen Ordner verschoben.

Vierter Schritt: Auf Breite 1280 bringen

Nun war es an der Zeit, die Bilder auf die Breite für HD-Video zu konvertieren. Dazu habe ich ebenfalls mogrify bemüht – natürlich in dem Verzeichnis, wohin ich die Bilder verschoben hatte.

mogrify -resize 1280 *.jpg

Nach den Aktionen shave und resize waren meine Bilder dann 1280×836. Also 116 Pixel zu hoch für das HD-Format 1280×720.

Fünfter Schritt: Oben abschneiden

Bei meinen Bildern war oben reichlich Spielraum, der nicht unbedingt für die Zeitraffer-Aufnahme relevant ist. Also schneiden wir oben ab und verwenden dafür abermals mogrify.

mogrify -chop 0x116 *.jpg

Das Bild von oben mit den Rändern sieht nun so aus:

Nach Bearbeitung mit ImageMagick / mogrify

Nach Bearbeitung mit ImageMagick / mogrify

Sechster Schritt: Entflackern

Nun sind alle Bilder ausgerichtet und fast fertig für die Video-Erstellung. Für das Entflackern der Bilder habe ich ein Perl-Script gefunden, das unter einer Open-Source-Lizenz steht und dessen Verbreitung gestattet ist. Deswegen habe ich es hier zum Download zur Verfügung gestellt (timelapse_deflicker von Vangelis Tasoulas).

Das Bild geht über alle Bilder und entflackert diese so gut wie möglich. Die Originale werden dabei nicht überschrieben. Das Script legt die Bilder in einen Unterordner Deflickered ab. Ich habe das Script in den Ordner der zu bearbeitenden Fotos gelegt und folgenden Aufruf verwendet:

perl timelapse-deflicker_pl -p 2 -v

Die verfügbaren Schalter für das Script erhältst Du so:

perl timelapse-deflicker_pl -h

Hier noch jeweils fünf Sekunden “nicht entflackert” und “entflackert”. Ich bekam das Flackern nicht komplett weg, aber der Unterschied ist schon deutlich.

Siebter Schritt: Video / Zeitraffer erzeugen

Nun geht es endlich an das Erschaffen des Videos und dafür dienst folgender Befehl:

mencoder "mf://*.jpg" -mf fps=24:type=jpg -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell:vbitrate=7000 -vf scale=1280:720 -oac copy -o timelapse.mp4

Mehr zu diesem Thema steht in diesem Beitrag, wo es ebenfalls um Zeitraffer / Timelapse geht (allerdings mit gphoto2).

Zusatz-Tipp: Möchtest Du Video mithilfe von mencoder rückwärts erzeugen, geht das nur über einen kleinen Umweg. Ist aber trotzdem nur ein Einzeiler. Für meinen Fall sieht das so aus:

ls -r *.jpg >> filelist.txt; mencoder "mf://@filelist.txt" -mf fps=24:type=jpg -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell:vbitrate=7000 -vf scale=1280:720 -oac copy -o timelapse-rueckwaerts.mp4

mencoder ist übrigens auch nützlich, wenn man Videos mit vielen FPS in OpenShot langsam (Zeitlupe) darstellen möchte.

Wenn Dich das Thema Zeitraffer / Timelapse interessiert, möchtest Du vielleicht auch den Beitrag zum Sternenhimmel lesen. Dort habe ich ein Video mithilfe der Open-Source-Software SlowMoVideo gelängt.

Tja, das waren nun spannende zwei Wochen mit meinem dahinsiechendem Obst und der Nachbearbeitung, für die ich keine Software kaufen musste. Linux und Open-Source haben dazu vollkommen ausgereicht.

Die Moral von der Geschicht …

Melone deutlich geschrumpft, Erdbeere flach – aber die Mandarine hat sich tapfer geschlagen -> Mandarinen sind zähe Biester! … 🙂

P.S: Wer etwas Bewegung beim Zeitraffer ins Spiel bringen möchte, kann das auch komplett mithilfe von Open-Source-Software machen. In diesem Beitrag mehr dazu …




 Alle Kommentare als Feed abonnieren

2 Kommentare zu “Zeitraffer / Timelapse von Obst am Teller: Nachbearbeitung mit Open-Source-Tools – Hugin, ImageMagick, mencoder, Perl und OpenShot”

  1. Henrikx says:

    Super!! Super!! Super !!

    (verlinkt nach Despora.de)

  2. chriis says:

    Danke für deine Anleitungen! Finde es immer interessant.

    Die Trackingfunktion von Blender kann man übrigens auch zum Entruckeln des Ausgangmaterials verwenden.
    Einzelbilder in einen Film umwandeln, Ränder abschneiden, skalieren und rendern ist damit auch kein Problem.
    (Entflackern weiß ich allerdings nicht)