In diesem Artikel habe ich verschiedene Metadaten vorgestellt, die oft unbewusst zusammen mit den Bildern veröffentlicht werden und welche Probleme damit entstehen können. Auch habe ich dort die Tools JHead und ExifTool erwähnt, mit denen diese Metadaten angesehen, bearbeitet oder entfernt werden können. Hier stelle ich in einigen Szenarien die mögliche Anwendungen dieser beiden Tools auf der Kommandozeile vor.

Bilder automatisiert umbenennen

Für die Bennennung von Bildern gibt es die unterschiedlichsten Konventionen und jede Kameramarke und jedes Bildverwaltungsprogramm vergibt wieder eigene Namen. Auch wenn dieses Namenschaos bei der Verwendung moderner Bildverwaltungssoftware nicht stört, da diese die Bilder anhand der darin enthaltenen Metadaten ordnen kann, so bin ich beim Export aus der Bildverwaltungssoftware doch bestrebt eine gewisse ordnende Struktur zu erstellen. Hier bietet sich ExifTool an, da das Tool nicht nur in der Lage ist Bilder nach Mustern umzubenennen, oder in neu erstellte Unterordner zu verschieben, sondern weil es zur Benennung zusätzlich auf die in den Bildern enthaltenen Metadaten zugreifen kann. Das Tool ist für unterschiedlichste Betriebsysteme erhältlich, wobei ich hier die Kommandozeilenversion unter Linux behandle. Unter Windows ist die Anwendung mit einer GUI verfügbar bzw. für den Kommandozeilenbetrieb müssten die Hochkommas durch doppelte Anführungszeichen ersetzt werden. Hier ein einfacher Befehl, wie ich ihn nach dem Export häufig auf meine Bilder anwende:

exiftool -fileOrder datetimeoriginal \
'-FileName[lt]${DateTimeOriginal}%-.2nC.%le' \
-d %Y-%m-%d -r -P ~/Bilder/export/

-fileOrder
Mit dem Parameter -fileOrder kann angeben werden, in welcher Reihenfolge ExifTool die Bilder bearbeiten soll. Dies ist vor allem praktisch, wenn Bilder aus unterschiedlichen Kameras gemeinsam weitergeben werden sollen.
-FileName
Hier wird das Format für den Dateinamen angegeben. In diesem Fall, wird das Erstellungsdatum als Präfix für den Bildnamen genommen und anschließend eine aufsteigende zweistellige Ziffer angehängt (%-.2nC). Weitere Codes gibt unter dem Parameter -w in der Dokumentation von ExifTool. Außerdem wird die Dateierweiterung einheitlich in Kleinbuchstaben umgewandelt (%le). Dieser Parameter ist in Anführungszeichen zu schreiben, um die Interpretation von Sonderzeichen in der Shell zu verhindern. Mit dem Tag Directory könnte auch ein Verzeichnisname konstruiert werden, in den das Bild anschließend verschoben wird. Die Platzhalter %d, %f und %e stehen hier für den aktuellen Verzeichnisnamen, den Dateinamen und die Dateierweiterung des zu bearbeitenden Bildes. Weitere Beispiele zur automatischen Unbenennung und Sortierung von Bildern mit Exiftool finden sich in der Dokumentation von ExifTool.
-d
Hier wird das Datumsformat für den Bildnamen extern formatiert. In der Dokumentation von Exiftool sind noch weitere Codes zur Formatierung von Datums- und Zeitangaben finden.
-r
Dieser Parameter gibt an, dass ExifTool nicht Bilder im übergebenen Ordner, sondern auch rekursiv die Bilder in den Unterordnern dieses Ordners bearbeiten soll.
-P
Dieser Parameter verhindert, dass ExifTool beim Bearbeiten des Dateinamens das Änderungsdatum der Datei neu setzt.
~/Bilder/export/
ExifTool akzeptiert als Argument auch ganze Verzeichnisse, deren Inhalte es dann verarbeitet.

Eine andere, häufig von mir verwendete Parameterkombination sieht wie folgt aus:

exiftool -fileOrder datetimeoriginal \
'-FileName[lt]${DateTimeOriginal} %d/%f%-c.%le' \
-d %Y/%Y-%m-%d -r -P Sortieren

Im Gegensatz zu dem ersten Beispiel werden die Bilder hier in verschiedene Unterordner %d einsortiert und der ursprüngliche Bildname %f beibehalten → neue Struktur: 2011/2011-10-31 Halloween/Bild_1337-1.jpg. Die unterschiedliche Bedeutung von %d einmal in der Formatangabe für den Dateinamen und einmal in der Formatangabe für das Datum ist zu beachten! Im Ersten Fall steht dieser Platzhalter für den ursprünglichen Ordnernamen, und einmal für den Tagesbestandteil des Datums. Auch wurde der Ordner für die zu sortierenden Bilder relativ angegeben und nicht absolut, da ansonnsten die generierte Ordnerstruktur eine andere ist. Auch ist der Platzhalter %c diesmal klein geschrieben, so dass eine Zahl nach dem Dateinamen – aber vor der Dateiendung – nur angehängt wird, wenn sonst eine andere Datei überschrieben werden würde.

Bilder mit Geotags aus Track/Log versehen

Geolokalisierung mit DigiKam

Geolokalisierung mit DigiKam

Jede gängige Bilderverwaltungssoftware bietet inzwischen auch eine Synchronisation zwischen GPS Logfiles und Bildern an. Dabei lassen sich auch Zeitdifferenzen zwischen Kamera und GPS Logger ausgleichen… Manchmal ist es jedoch müßig dies für wirklich große Bildersammlungen durchzuführen, vor allem wenn diese evtl. gar nicht erst in die eigene Sammlung importieren, sondern direkt weitergegeben werden sollen. Auch für diese Aufgabe bietet ExifTool eine einfache Lösung an.

exiftool -overwrite_original -geotag ~/GPS/log.gpx -P ~/Bilder/geotag/

Die neuen Parameter erklärt:

-overwrite_original
Beim geotaggen ist dieser Parameter notwendig, damit keine Kopie angelegt, sondern der Tag direkt in das Original geschrieben wird.
-geotag
Eine Datei mit einem GPS Log. Es ist auch möglich mehrere Dateien zu berücksichtigen, indem eine Wildcard verwendet wird: ~/GPS/2011-10-*.gpx.

ExifTool bietet noch mehr interessante Optionen an, so kann z.B. angegeben werden, welche Zeit zum Geotagen berücksichtigt werden soll, es können Zeitverschiebungen angegeben, oder automatisch berechnet werden, verschiedene Formate gelesen (GPX, KML, …) und auch geschrieben werden (Exif oder XMP). Wenn es also öfter mal schnell gehen soll, es sehr umfangreich wird oder besondere Bedürfnisse erfüllt werden sollen, so lohnt es sich durchaus sich die betreffende Seite in der Dokumentation zu ExifTool einmal genauer anzusehen.

Ein Track/Log mit Geodaten aus einer Bildersammlung erstellen

Was wenn eine schön getaggte Bildersammlung existiert, und daraus ein neues Log mit Geodaten erstellen werden soll? Auch hierfür bietet ExifTool eine Lösung an.

# get gpsdatetime from original time if not set
exiftool -if '$gpsposition' -if 'not $gpsdatetime' \
'-gpsdatetime[lt]datetimeoriginal' -overwrite_original -P ~/Bilder/export/
# now extract gps data
exiftool -if '$gpsposition' -if '$gpsdatetime' \
-fileOrder gpsdatetime -p ~/Bilder/Vorlagen/gpx.fmt \
-d %Y-%m-%dT%H:%M:%SZ ~/Bilder/export/ > ~/Bilder/export/save_track.gpx
# …
# now write geotags back to files
exiftool -fileOrder datetimeoriginal '-geotime[lt]${DateTimeOriginal}+00:00' \
-geotag /tmp/save_track.gpx -overwrite_original -P ~/Bilder/export/

Diese drei Kommandozeilenaufrufe sehen auf den ersten Blick ziemlich aufwendig aus, weshalb ich sie ausführlich erklären werde:

Mit ExifTool einen Tag schreiben

Beim Schreiben von GPS Daten in Bilder wird ab und zu das Datum und die Zeit ausgelassen, da diese mit dem Erstellungszeit des Bildes identisch ist. In dem ersten Beispiel wird bei allen Bilder, die zwar GPS Metadaten in Form einer Position haben, jedoch keine GPS Zeit, dieser Tag mit dem Originalzeitstempel des Bildes geschrieben. Zum Auswählen der Bilder wird der Parameter -if verwendet. Dieser überprüft den angegebenen Tag, in dem Fall ob ein Tag für die GPS Position existiert und die GPS Zeit nicht gesetzt ist. Mehr über den -if Parameter ist in er Dokumentation zu ExifTool zu finden.

Geodaten aus Bildern in eine GPX Datei exportieren

In dem zweiten Beispiel werden alle Bilder, bei denen die GPS Medatedaten für die Position und die Zeit gesetzt sind in der Reihenfolge ihrer Erstellung bearbeitet und diese Daten in eine GPX Datei gespeichert. Für diese Datei ist eine Vorlage nötig, die entweder bei ExifTool schon dabei ist, auf der Projektseite heruntergeladen werden, oder auch selbst erstellt werden kann. Wenn in der erstellten GPX Datei immer nur der String gpx.fmt vorkommt, so sollte die Pfadangabe zu der Formatdatei überprüft und evtl. absolut angeben werden. Auch sollte auf zusätzliche Ausgaben (Verbose, Parameter -v) verzichtet werden, da diese ansonnsten ebenfalls in der Ausgabedatei stehen. Anstatt wie hier beschrieben in einem ersten Schritt die GPS Zeit in den Metadaten zu ersetzen, könnte auch das Template bearbeiten und $gpsdatetime durch $datetimeoriginal ersetzt werden. Der Parameter -fileOrder ist nicht zwingend notwendig, jedoch empfehlenswert, da der Track ansonnsten nicht in chronologischer Reihenfolge vorliegt.

Die Geodaten aus der selbst erstellten GPX Datei zurückschreiben.

Dies erfolgt wie schon weiter oben beschrieben, nur dass zur Zeitsynchronisation explizit die Erstellungszeit der Bilder ohne Zeitverschiebung verwendet werden soll, da ansonnsten die Zeitzone auf dem Betriebsystem verwendet wird. Dies wird zum Beispiel dann benötigt, wenn mit JHead sämtliche Metadaten entfernt, die Geodaten aber anschließend wieder hinzugefügt werden sollen.

Metadaten auf ein Minimum reduzieren

Wenn es darum geht schnell und gründlich Metadaten aus Bildern zu entfernen ist JHead ein sehr hilfreiches Tool. Im Gegensatz zu ExifTool kann es jedoch keine ganzen Verzeichnisse bearbeiten. Zur Weitergabe von Bildern verwende ich häufig die folgenden vier Befehle:

F=~/Bilder/export/*.jpg
jhead -autorot $F
jhead -ft $F
jhead -purejpg $F
jhead -mkexif $F

Nachdem der Ordner in der Variable F gespeichert wurde, rotiert der erste Befehl die Bilder entsprechend den Angaben in den Metadaten. Der Zweite Befehl schreibt das Erstellungsdatum des Bildes aus den Exif Daten in die Dateiangaben. Das Erstellungsdatum des Bildes ist die Zeit, zu der es geschossen wurde, das Erstellungsdatum der Datei, ist der Zeitpunkt zu dem es auf den Computer importiert wurde. Durch diesen Befehl sind diese beiden Werte gleich und der erste kann gelöscht werden, was im nächsten Befehl geschieht. Der dritte Befehl entfernt sämtliche Metadaten aus dem Bild und der vierte Befehl erstellt einen minimalen Exifheader. So werden alle Metadaten, welche die Kamera oder andere Programme hinterlassen haben entfernt und nur eine minimale Datenmenge weitergegeben.

Natürlich können auch nur einzelne Header entfernt, Dateien unbenannt werden usw. Die Optionen sind in der Dokumentation von JHead zu finden.

Bilder bearbeiten oder verkleinern

Bilder müssen nicht nur auf dem Dateisystem sortiert, sondern auch mit Tags versehen, bewertet, Rote Augen korrigiert, Bildausschnitte retuschiert oder Ränder weggeschnitten werden. Schön wäre es, wenn das alles ebenso automatisch und zuverlässig funktionieren würde. Noch ist das jedoch nicht der Fall aber mit ImageMagick lassen sich einfach Wasserzeichen in Bilder einfügen oder diese vor der Veröffentlichung im Internet verkleinern.

mogrify -resize 975x480 ~/Bilder/export/*.jpg

Fazit

Mit ExifTool, ImageMagick und JHead lassen sich Bilder schnell und komfortabel für die Weitergabe oder die Veröffentlichung im Internet aufbereiten, sofern die Reihenfolge der einzelnen Befehle eingehalten wird. So versteht es sich eigentlich von selbst, dass die Geodaten nicht mehr aus den Bildern ausgelesen werden können, nachdem sämtliche Metadaten mit JHead gelöscht wurden… Zwar kostet es Zeit sich in die Parameter und möglichen Optionen einzulesen, jedoch erspart die Anwendung dieser Tool auf Dauer viel Zeit und auch das Umstrukturieren oder Aufbereiten größerer Bildersammlungen ist bemerkenswert schnell zu erledigen. Wer häufig mehrere Aktionen hintereinander ausführen lässt, kann die einzelnen Befehle auch in einem Shellscript kombinieren oder im Falle von ImageMagick bzw. ExifTool auf eine der Schnittstellen zu anderen Programmiersprachen zurückgreifen.