+++ title = "Foto-Workflow" date = "2017-03-04" author = false cover = "icon.jpg" tags = ["fotografie"] keywords = ["linux", ""] description = "Terminal-basierter Workflow der digitalen Bildbearbeitung" showFullContent = false readingTime = false +++ Fotos von der Digitalkamera zum sicheren Ablageort zu bringen wird sehr schnell unübersichtlich. Die letzten Urlaubsfotos liegen noch unbearbeitet in einem tmp-Ordner und aus der Nachbearbeitung meiner Kalenderfotos ist auch noch nichts geworden. Ein strukturiertes System muss her... Es gibt viele Programme, um digitale Bildersammlungen zu verwalten. Hier geht es aber um den Schritt davor, also der Entwicklungsprozess vom Kamerabild über die Bearbeitung, Publizieren bis zum Archiv. Der hier skizzierte Workflow bedient sich vorhandener Tools und regelt lediglich die strukturierte Verwendung und systematische Abarbeitung der einzelnen Schritte. # Übersicht Folgende Aufgaben fallen in der Regel an (nicht alle Schritte sind immer nötig): 1. Bilddateien von der jeweiligen Kamera auf den Computer kopieren (Import) 1. Sicherungskopie der Dateien erstellen und Kamerabilder löschen (Backup) 1. Umbenennen der Bilder in eine einheitliches Zeitstempelformat (Rename) 1. Hinzufügen von Geopositionsdaten, von der Smartphone-App (Location) 1. Verschieben, löschen und gruppieren der Bilder in einzelnen Projektordner (Sort) ___ Nun wird in den Projekten, zeitlich unabhängig voneinander, jedes Bild bearbeitet. ___ 1. 'Entwickeln' der Bilder in der digitalen Dunkelkammer (Develop) - Bildbearbeitung ausführen - Titel setzen - Erstellen der finalen Bildes 2. Publizieren und Archivieren der Bilder (Export) 3. Aufräumen durch Löschen des Projekts incl. aller Bilder (Clean) Die gesamte Workflowbearbeitung erfolgt auf einem Linux-Computer. Der lokale Server fungiert als Datendrehscheibe für die GPS-Daten, als Backup-Speicher sowie als Archiv für die fertigen Bilder. ![Workflow-Übersicht](Workflow-Übersicht.png) Workflow-Übersicht Der Workflow lässt sich natürlich genauso auf einem Windows-PC durchführen. Hat man einen PC und möchte nicht auf die Linux-Umgebung verzichtet, bietet es sich an, Linux in einer virtuellen Umgebung zu betreiben. Auf meinem Windows-PC kommt seit Jahren VirtualBox mit Linux Mint/Mate zum Einsatz. Im Folgenden gehen wir aber von einem reinem Kubuntu-Computer aus. ## Das Workflow-Verzeichnis Der Workflow hat eine feste Verzeichnisstruktur mit den drei Hauptverzeichnissen 00_Inbox, 01_Import und 02_Progress. Das erste Verzeichnis **00_Inbox** dient als Eingangskorb. Hier werden die externen Bilder unverändert gesammelt. In das zweite Verzeichnis, **01_Import**, kommen die Bilder durch Umbenennung. Hier können auch die Geo-Positionen hinzugefügt werden. Das letzte Oberverzeichnis heist **02_Progress**, in welches die Bilder dann schließlich, in frei wählbaren Unterordnern, nach Projekten organisiert werden. ![Verzeichnisstruktur](verzeichnisstruktur.png) Verzeichnisstruktur Ein Projektverzeichnis selbst (z. B. 20170226) hat wiederum eine feste Verzeichnisstruktur mit folgenden Verzeichnissen: - final - Fertig bearbeitete Bilder - jpg - Originalbilder im JPG-Format - raw - Originalbilder im RAW-Format - videos - Originalvideos - work - Optionales Arbeitsverzeichnis für Hilfsdateien wie z. B. Gimp-Projektdateien Betrachten wir nun die einzelnen Schritte genauer und stellen vor, mit welchen Tools die einzelnen Schritte durchgeführt werden können. Welche Programme für die einzelnen Schritte einsetzt, ist letztendlich natürlich Geschmackssache. Wichtig ist nur, dass man das für jeden Zweck das passende Tool findet und dann möglichste dabei bleibt. Als Bilddateien werden hier JPG, RAW und Video-Dateien zusammengefasst. # Die einzelnen Schritte des Workflows Der Workflow setzt sich aus den einzelnen Schritten zusammen, welche vorwiegend streng sequenziell durchgeführt werden. Jeder Schritt hat einen definierten Anfangs- und Endzustand und eine definiertes Tooling. Kommen weitere Bilder hinzu, so wird der Workflow einfach wieder von vorne begonnen. ## Import ![Import](import-header.jpg) Eingang: Bilddateien liegen auf externem Medium, z. B. SD-Card Ausgang: Bilddateien liegen in 00_Inbox Import mit der Dateiverwaltung Dolphin im geteilten Modus. Die Dateien werden per Verschieben von der externen Quelle, abhängig von Dateityp, in das jeweilige Unterverzeichnis verschoben. ![Laden externer Bilder durch Verschieben](Laden-externer-Bilder-durch-Verschieben.jpg) Laden externer Bilder durch Verschieben Alternativ zum Drag'n Drop kann man den Import einfacher per Scripting durchführen. Befindet man sich im Workflow-Verzeichnis und hat 'sdcard' gemountet, dann verschiebt man die Dateien sortenrein in drei Schritten: ```bash photo-workflow$ find /media/sdcard/ -name *.jpg -exec mv "{}" 00_Inbox/jpg \; photo-workflow$ find /media/sdcard/ -name *.raf -exec mv "{}" 00_Inbox/raw \; photo-workflow$ find /media/sdcard/ -name *.mov -exec mv "{}" 00_Inbox/video \; ``` ## Backup ![Backup](backup-header.jpg) Eingang: Alle Bilddateien befinden sich innerhalb des Workflow-Verzeichnisses Ausgang: Workflow-Verzeichnis extern gesichert Der Backup erfolgt einfach per rsync: ```bash photo-workflow$ rsync -av --delete . /media/diskstation/christianDok/mirrors/photo-workflow ``` ## Rename ![Rename](rename-header.jpg) Eingang: Bilddateien in 00_Inbox Ausgang: Bilddateien in 01_Import, 00_Inbox ist leer. Die Dateien werden anhand Aufnahmezeitstempel aus den EXIF-Informationen und Originalname in eine einheitliches Format umbenannt. Der Originalname ist Teil des neuen Namens. Damit ist der neue Name immer eindeutig (z. B. bei Serienbildern oder Import von verschiedenen Kameras). Ausserdem gibt es so keine Probleme, falls eine Bilddatei aus versehen ein zweites mal importiert wird: Die alte Datei wird einfach überschrieben. Als Tool verwende ich Rapid Photo Downloader. Man legt einmal die Regeln fest, dass Umbenennen/Verschieben geht dann mit wenigen Klicks. ![Rapid Photo Downloader: Verschieben von jpg-Bildern](Rapid-Photo-Downloader-Verschieben-von-jpg-Bildern.jpg) Rapid Photo Downloader: Verschieben von jpg-Bildern ![Namensregel für JPG-Dateien](Namensregel-für-JPG-Dateien.jpg) Namensregel für JPG-Dateien ## Location ![Location](location-header.jpg) Eingang: Bilddateien in 01_Import, optional GPX-Dateien in externer Quelle Ausgang: Geänderte Bilddateien in 01_Import, GPX-Dateien unverändert Für JPG-Dateien werden die Geo-Koordinaten den Bildern hinzugefügt. Liegen RAW-Dateien vor, wird der Schritt übersprungen und erst vor dem Export mit den Final-Bildern durchgeführt. Um GPX-Dateien zu erstellen verwende ich meistens GPSLogger auf dem Android-Smartphone. Die so erstellten Dateien werden auf den lokalen Server synchronisiert (mit FolderSync geht das automatisch). Als Tool kommt Geotag zum Einsatz. Damit kann man für ein komplettes Bildverzeichnis anhand einer beliebigen Menge von GPX-Dateien die Koordinaten hinzufügen. Hat man keine GPX-Datei, kann man die Location auch per Google-Maps hinzufügen. ![Geotag](Geotag.jpg) Geotag ## Sort ![Sort](sort-out-header.jpg) Eingang: Bilddateien in 01_Import Ausgang: Bilddateien in 02_Progress, 01_Import ist leer In diesem Schritt werden zusammenhängende Bilddateien auf einzelne Projekte verteilt. Dazu wird zuerst das Projekt unter 02_Progress// angelegt. Ein Beispiel für eine Projektgruppe wäre 'weekly' und pro Woche erstellt man dann darin ein Projekt (z. B. '20170205'). Die Verzeichnisse werden per Dolphin von Hand erstellt. Die Dateien werden, ebenfalls mit Dolphin, im geteilten Modus per Drag'n Drop verschoben. ![Projekt füllen](Projekt-füllen.png) Projekt füllen Hat man neben JPGs noch RAW-Dateien, sind diese ebenfalls zu verschieben (ins Zielverzeichnis RAW). ### RAW automatisch verschieben Erstellt man mit der Kamera gleichzeitig JPGs und RAWs, verschiebt man erst die JPGs wie beschrieben. Die gleichnamigen RAWs sind dann zusätzlich zu verschieben (Zielverzeichnis RAW). Per Script kann man das auch automatisieren. Nachdem die JPGs verschoben sind, lässt man die gleichnamigen RAWs nachziehen. Dazu ruft man aus dem Projektverzeichnis heraus auf: ```bash 02_Progress/weekly/20170205$ ls ../../../01_Import/raw/ -1 20170202-103548-DSCF4580.raf 20170205-180804-DSCF4593.raf 02_Progress/weekly/20170205$ for f in jpg/*; do g="${f/.jpg/.raf}"; h="${g:4}"; mv "../../../01_Import/raw/$h" raw/ ; done 02_Progress/weekly/20170205$ ls raw/ -1 20170202-103548-DSCF4580.raf 20170205-180804-DSCF4593.raf ``` Das Beispiel geht davon aus, dass man sich im aktuellen Projektverzeichnis befindet und die JPG-Dateien bereits dort einsortiert worden sind. Im Verzeichnis 01_Import/raw befinden sich die korrespondierende raf-Dateien. Dieser Workflowschritt wird pro Projekt vollständig durchgeführt, d.h. die Bilder eines Projektes sind entweder noch alle in 01_Import oder **vollständig** nach 02_Progress verschoben worden. ### Projektbearbeitung Mit Sort sind nun die Bilddateien in Projekte einsortiert worden. Die weitere Bearbeitung erfolgt nun in diesen einzelnen Projekten. Das kann zeitlich unabhängig von einander erfolgen. ## Develop ![Develop](develop-header.jpg) Eingang: Originalbilder in den Projektverzeichnissen jpg, raw. Ausgang: Finale Bilddateien als Kopien im Projektverzeichnis final (Auswahl). Die JPGs bzw. RAWs werden nun vorsortiert, bearbeitetet und nach final exportiert. Die Originalbilder bleiben dabei unverändert. Dabei können die Bilder zusätzlich mit einem Titel ergänzt werden. Haben die Finals noch keine Geo-Positionsdaten, können diese, wie bereits in Schritt 'Location' beschrieben, um diese ergänzt werden. Das eingesetzte Tool ist Geschmackssache, ich verwende Darktable. Beim Vorsortieren werden die zu bearbeitenden Bilder markiert, z.B. durch Vergabe von drei Sternen: ![Darktable: Bilder auf dem Leuchttisch vorsortieren](Darktable-Bilder-auf-dem-Leuchttisch-vorsortieren.jpg) Darktable: Bilder auf dem Leuchttisch vorsortieren Nach der Bearbeitung wird das Bild nach final exportiert, ggf. mit einem Titel. ![Darktable: Export](Darktable-Export.jpg) Darktable: Export Das erstellte Bild kann direkt nach Final exportiert werden. Im Feld 'Speicherziel' gibt man dazu `'$(FILE_FOLDER)/../final/$(FILE_NAME)'` an. ## Export ![Export](export-header.jpg) Eingang: Finale Bilddateien liegen im Unterverzeichnis final Ausgang: Bilddateien wurden zu allen Zielen exportiert (Kopie) Lokale Exportziele werden durch Kopieren der Dateien aus dem final-Verzeichnis gefüllt (Dolphin). Hochladen in Webportale erfolgt mit deren Importseiten (flickr, Instagram, etc.). Exportieren der Daten auf den lokalen Server: ```bash photo-workflow/02_Progress/weekly/20170205$ ls final/ 20170202-103548-DSCF4580.jpg photo-workflow/02_Progress/weekly/20170205$ cp final/*.* media/diskstation/photp/tagesbild/2017 ``` ## Clean ![Clean](clean-header.jpg) Eingang: Projektverzeichnis mit Bilddateien Ausgang: Projekt mit allen Originaldateien und Zwischendateien wurden gelöscht Nach dem Export kann das Projektverzeichnis gelöscht werden: Alle finals wurden exportiert, alle Originalbilder liegen unter jpg bzw. raw. Die Originaldateien werden also nicht aufgehoben. Auch das Entfernen kann man mit dem Dolphin oder per Bash machen: ```bash photo-workflow/02_Progress/weekly$ rm -r 20170205 ``` Damit ist der Workflow für das Projekt durchgeführt. Aber sicherlich sind schon die nächsten Bilder auf der Kamera und der Prozess beginnt von vorne... # Links - Dolphin, wiki.ubuntuusers.de/Dolphin - Rapid Photo Downloader, www.damonlynch.net/rapid - Geotag, geotag.sourceforge.net - GPSLogger play.google.com/store/apps/details?id=com.mendhak.gpslogger - FolderSync play.google.com/store/apps/details?id=dk.tacit.android.foldersync.full - Darktable, www.darktable.org