• Herzlich willkommen im "neuen" DSLR-Forum!

    Wir hoffen, dass Euch das neue Design und die neuen Features gefallen und Ihr Euch schnell zurechtfindet.
    Wir werden wohl alle etwas Zeit brauchen, um uns in die neue Umgebung einzuleben. Auch für uns ist das alles neu.

    Euer DSLR-Forum-Team

  • In eigener Sache!

    Liebe Mitglieder, liebe Besucher und Gäste
    ich weiß, es ist ein leidiges Thema, aber ich muss es ansprechen: Werbung, Werbeblocker und Finanzierung des Forums.
    Bitte hier weiterlesen ...

  • DSLR-Forum Fotowettbewerb neu erfunden!
    Nach wochenlanger intensiver Arbeit an der Erneuerung des Formates unseres internen Fotowettbewerbes ist es Frosty als Moderator
    und au lait als Programmierer gelungen, unseren Wettbewerb auf ein völlig neues Level zu heben!
    Lest hier alle Infos zum DSLR-Forum Fotowettbewerb 2.0
    Einen voll funktionsfähigen Demowettbewerb kannst du dir hier ansehen.
  • Neuer Partner: AkkuShop.de
    Akkus, Ladegeräte und mehr (nicht nur) für Digitalkameras und Drohnen
  • Neuer Gutscheincode unseres Partners Schutzfolien24:
    DSLR-Forum2024
    Dauerhaft 10% Rabatt auf alle Displayschutzfolien der Eigenmarken "Upscreen", "Brotec", "Savvies".
    Der Code ist für alle Geräteklassen gültig.
  • Mitmachen beim DSLR-Forum Fotowettbewerb Mai 2024.
    Thema: "Diagonale"

    Jeden Monat attraktive Gewinnprämien, gesponsert von unserem Partner PixelfotoExpress.
    Alle Infos zum Mai-Wettbewerb hier!
WERBUNG

exiftools: Rename anhand EXIF-Daten (Expertenhilfe gesucht)

Patrick_CGN

Themenersteller
Hallo zusammen,

ich versuche es mal hier, bevor ich mich mit meinem schlechten Englisch im EXIFTool-Forum bemühe ... vielleicht haben wir hier ja paar Technik-Geeks ;)

Wenn ich Fotos von den Kameras (Formate: CR3, CR2, GPR/DNG, HEIC) auf den PC überspiele, startet ein Workflow.

Aktuell sieht dieser so aus:
Lightroom ("Arbeitskatalog") -> Laden -> Rename nach yyyymmdd-hhmm.iphone/gopro/nix[bei CR2/3].*
Lighroom -> erstellen der XMP-Dateien (für CR3, HEIC; GPR und CR2 kann Lightroom direkt beschreiben)
Rename GPR in DNG (GPR ist DNG mit GoPro-Extras, daher kann Lightroom das auch von hause aus beschreiben), DNG ist aber problemloser in der Weiterverarbeitung.
Aufbereiten GPS-Log
Geosetter: GeoTagging, Künstler etc. setzen, Ort etc. (ich mag das bei Lightroom nicht)
Lightroom: Bilder aus Arbeitskatalog löschen und in regulären Katalog einfügen
=> Fertig.

Jetzt möchte ich das ganze Scripten.
Rename, XMP etc. geht auch bequem per exiftool auf der Konsole (WSL2@Windows; WSL2->aktuelles Ubuntu, also Linux)

Bequem dachte ich - deswegen bin ich hier:

Rename mit EXIFTools auf der Konsole klappt so:

exiftool '-filename<datetimeoriginal' -d %Y%m%d-%H%M%S%%-2nc.%%le -r -ext CR3 (oder HEIC oder CR2 oder DNG ...)

Das Problem ist %-2nc. Dieses sorgt dafür das Dateien mit identischen "DateTimeOriginal" durchnummeriert werden. Leider orientiert sich das durchnummerieren an den Dateinamen und somit der Reihenfolge im Dateisystem. Prinzipiell ist das kein Problem - prinzipiell ist aber kein Standard für mich ;):

Wenn ich bei CR2/3 3 Fotos mit gleichen DateTimeOriginal habe, liegt das meist an Serienbilder oder Belichtungsreihe. Die Serienbildern mache ich um mir hier ggf. ein besseres rauszusuchen, Belichtungsreihe sind 3 Bilder ... die Reihenfolge in Lightroom ist da relativ egal. Bei HEIC ist es das gleiche. Problem sind die GoPro-Bilder ... die sollten in der Reihenfolge bleiben, da hier ggf. Timelaps-Fotos etc sind. Am liebsten würde ich das aber einheitlich "gleich" gestalten .. also ohne "relativ egal" ;)

Jetzt brauch ich also eine Möglichkeit mit exiftools oder linux shell/bash eben diesen Faktor zu berücksichtigen. Rename ausschließlich und 100% sicher nach Aufnahmereihenfolge.

Keiner der von mir genutzten Formate hatte ein Counter in den Exifs. Was CR, HEIC aber haben: SubSecTimeOriginal - das sind die MILLISEKUNDEN ... das 2 Bilder die gleiche Millisekunde haben -> unwahrscheinlich.

Gefunden hab ich unter Google daher folgende Erweiterung zu oberen Befehl:
-FileOrder SubSecTimeOriginal

Tjoa ... ich sag mal ... das ganze bringt NULL. (bei GoPro hat man den PreserverdFilename - das ist der Dateiname aus der Kamera - der bleibt fix gespeichert - daran könnte man sortieren).

Leider klappt FileOrder aber nicht so wie ich das oft gelesen habe.

Nächste Möglichkeit wäre (nur bei HEIC/CR)
-fileorder '${subsectimeoriginal;$_.=0 x(3-length)}'

exiftool -d %Y%m%d-%H%M%S '-filename<${datetimeoriginal}.iPhone-%-c${subsectimeoriginal;$_.=0 x(3-length)}.%e' -ext heic ./

Jetzt sind die ms Bestandteil des Dateinamens - das ist SAVE. ABER: Leider stört mich das Aussehen des Dateinamens (bin da etwas empfindlich) -010.heic, -011.heic ... kann ich aber zur Not mit leben (Workaround) - aber was endgültig stört: auch Dateien die nicht Teil einer "Serie" sind, werden so umbenannt. Da komme ich nicht auf eine Lösung.

Workaround wäre eine Kombi aus beiden Befehlen. Erst den unschönen (mit ms; und leichter Modifikation), danach hätte ich eine 100% valide Reihenfolge und dann den oberen Befehl (der nur bei identischen Datum durchnummeriert). Aber möchte ich erstmal ausschließen die Variante. Das muss doch mit Boardmitteln gehen. Lightroom kann das doch auch (wobei ich ehrlich gesagt nie geprüft habe ob LR das wirklich richtig macht... mhhhh)

Vielleicht hat sich hier ja schon mal mit dem Problem beschäftigt und hat da einen guten Ansatz oder kennt sich in und auswendig mit Exiftools aus ;) Ansonsten muss ich doch Google-Translate und das Exiftool-Forum bemühen :(

Grüße
 
...
Rename mit EXIFTools auf der Konsole klappt so:

exiftool '-filename<datetimeoriginal' -d %Y%m%d-%H%M%S%%-2nc.%%le -r -ext CR3 (oder HEIC oder CR2 oder DNG ...)

Das Problem ist %-2nc. Dieses sorgt dafür das Dateien mit identischen "DateTimeOriginal" durchnummeriert werden. Leider orientiert sich das durchnummerieren an den Dateinamen und somit der Reihenfolge im Dateisystem. Prinzipiell ist das kein Problem - prinzipiell ist aber kein Standard für mich ;):
...

exiftool scheint die Dateinamen wie
Code:
ls -f
zu lesen, also in der Reihenfolge wie sie der "directory stream" liefert. Dann wird nach der Extention ".CR3" gefiltert.

Die Reihenfolge nach Dateiname lässt sich per shell-globbing erzwingen:

Code:
exiftool '-filename<datetimeoriginal' -d %Y%m%d-%H%M%S%%-2nc.%%le *.CR3

Das hat halt einen kleinen Nachteil, es geht nicht rekursiv.
 
du hast ja im Prinzip nur das -r und -ext weggelassen.

Test mit exiftool '-filename<datetimeoriginal' -d %Y%m%d-%H%M%S%%-2nc.%%le *.CR2

Code:
exiftool -s -a -G0:1 20190601-122932.CR2 | grep SubSecTimeOriginal
[EXIF:ExifIFD]  SubSecTimeOriginal              : 00
exiftool -s -a -G0:1 20190601-122932-03.CR2 | grep SubSecTimeOriginal
[EXIF:ExifIFD]  SubSecTimeOriginal              : 19
exiftool -s -a -G0:1 20190601-122932-02.CR2 | grep SubSecTimeOriginal
[EXIF:ExifIFD]  SubSecTimeOriginal              : 39
03 und 02 sind also vertauscht. Es waren auch nur die 3 Bilder im Verzeichnis.

Mal die 03 in 77 und die 02 in 88 umbenannt. Dann einzeln per Exiftool: 77 wurde zu 02, 88 zu 03 => Exiftool sortiert also im Filesystem und nennt dann um - wie du angedeutet hast.

Nur was macht -FileOrder ... irgendwie scheint dieser Parameter (bei meinen anderen Versuchen), keinen Einfluss zu haben .. Deko? ;)

Selbes übrigens bei GoPro:
Code:
exiftool -s -a -G0:1 20200827-163516.GoPro.jpg | grep Preserved
[XMP:XMP-xmpMM] PreservedFileName               : G0084334.JPG
xiftool -s -a -G0:1 20200827-163516-02.GoPro.jpg | grep Preserved
[XMP:XMP-xmpMM] PreservedFileName               : G0084333.JPG
exiftool -s -a -G0:1 20200827-163516-03.GoPro.jpg | grep Preserved
[XMP:XMP-xmpMM] PreservedFileName               : G0084335.JPG
exiftool -s -a -G0:1 20200827-163516-04.GoPro.jpg | grep Preserved
[XMP:XMP-xmpMM] PreservedFileName               : G0084339.JPG
exiftool -s -a -G0:1 20200827-163516-05.GoPro.jpg | grep Preserved
[XMP:XMP-xmpMM] PreservedFileName               : G0084337.JPG
Es wird auch die Filesystemreihenfolge genommen. BEI neuen kann man das ja durchaus machen - aber bei alten die vllt. falsch durchnummeriert worden ... oder mal ein Fehler beim umbenennen unter Windows (wenn man alles markiert hat kann man schnell gleich mal alle Dateien gleich umbenannt *G*).

Wenn es mit ExifTool-Hausmitteln nicht geht, muss wohl per Umweg gearbeitet werden. Ich stelle erstmal sicher das jeder einen UNIQUE-Name nach irgedeiner EXIF-Info enthält. Bei GoPro-Bildern ändert sich irgendwann PreservedFileName (auf den potentiell falschen; ist mir jetzt bei einem GPR aufgefallen, während ein JPG immer noch den "alten Original" hat (ändert das Lightroom?). Hier muss ich was "sicheres" finden in den Exifs). Bei CR2/3/HEIC kann ich aber den NAMEN bis auf die ms ebene setzen temp_20200904-160001.123.cr2 ... dann hab ich eine saubere Reihenfolge und kann dann z.b. exiftool '-filename<datetimeoriginal' -d %Y%m%d-%H%M%S%%-2nc.%%le *.CR2 (oder ähnlich) den Namen "schön" machen. Also 2x rename ...

EDIT: hab es jetzt noch mal mit -FileOrder probiert ... wird ignoriert.
 
Zuletzt bearbeitet:
Den Parameter -fileOrder hatte ich gar nicht auf dem Schirm.

Ich habe nochmal die Lesereihenfolge mit 4 gleichen Bildern - sind einfach umbenannte Kopien - getestet:

Reihenfolge, so wie der directory stream die Dateinamen liefert:
Code:
masche@linux-rofz:/dev/shm/test/tool3> ls -f
.  ..  DSC01377.ARW  DSC01376.ARW  DSC01375.ARW  DSC01374.ARW
masche@linux-rofz:/dev/shm/test/tool3>

Reihenfolge wie exiftool die Dateinamen liest, das ist die gleiche Reihenfolge:
Code:
masche@linux-rofz:/dev/shm/test/tool3> exiftool -a -u  -ext ARW . | egrep -i -e"File Name|Create Date"
File Name                       : DSC01377.ARW
Create Date                     : 2019:08:28 17:24:18
File Name                       : DSC01376.ARW
Create Date                     : 2019:08:28 17:24:18
File Name                       : DSC01375.ARW
Create Date                     : 2019:08:28 17:24:18
File Name                       : DSC01374.ARW
Create Date                     : 2019:08:28 17:24:18
masche@linux-rofz:/dev/shm/test/tool3>

und jetzt mit -fileOrder FileName:
Code:
masche@linux-rofz:/dev/shm/test/tool3> exiftool -a -u -fileOrder FileName -ext ARW . | egrep -i -e"File Name|Create Date"
File Name                       : DSC01374.ARW
Create Date                     : 2019:08:28 17:24:18
File Name                       : DSC01375.ARW
Create Date                     : 2019:08:28 17:24:18
File Name                       : DSC01376.ARW
Create Date                     : 2019:08:28 17:24:18
File Name                       : DSC01377.ARW
Create Date                     : 2019:08:28 17:24:18
masche@linux-rofz:/dev/shm/test/tool3>

Die Lese- und Verarbeitungs-Reihenfolge in exiftool wird durch den Parameter -fileOrder hier korrekt verwendet - sortiert nach FileName aufsteigend.

Warum sollte das bei dir nicht gehen?
 
Hallo ;)

Sorry - war ein wenig beschäftigt die letzte Zeit ...

fileorder klappt ja wenn die Reihenfolge zufällig auch richtig ist. OOC passt das ja somit immer. OOC kommt dann
20200101-111111.jpg
20200101-111112.jpg
20200101-111113.jpg
Wobei die Sekunde bei allen 1 wäre (die 2 und 3 wären z.b. falsch) ... was mit Fileorder hab ich danach:
20200101-111111.jpg -> 20200101-111111.jpg
20200101-111112.jpg -> 20200101-111111-01.jpg
20200101-111113.jpg -> 20200101-111111-02.jpg


Andere Situation:
Jetzt hab ich aber unglücklicherweise mit einem Tool umbenannt was sich über die Reihenfolge keine wirklichen gedanken gemacht hat ... ich möchte das jetzt korrigieren

20200101-111111.jpg -> richtig wäre 20200101-111111-01.jpg
20200101-111111-01.jpg -> richtig wäre 20200101-111111-02.jpg
20200101-111111-02.jpg -> -> richtig wäre 20200101-111111.jpg

und nutzte jetzt Fileorder - dann klappt das nicht.

Ich glaub der Fehler liegt daran das hier exiftool-Rename bei schon vorhandensein des Dateinamens hochzählt. Ist der Dateinamen schon vorhanden +1 ... und zudem hier wird jede Datei einzeln betrachtet (und es findet keine gesamtbetrachtet aller betroffenen Dateinamen statt) ... das führt dann zu folgenden Problem:

Fileorder:
1. File: 20200101-111111.jpg -> rename zu 20200101-111111-01.jpg
-> Fehler: es gibt aktuell ja schon eine 20200101-111111-01.jpg
-> exiftool rename jetzt also zu 20200101-111111-02.jpg

2. File: 20200101-111111-01.jpg -> rename zu 20200101-111111-02.jpg
-> Fehler: es gibt aktuell ja schon eine 20200101-111111-02.jpg
-> 20200101-111111.jpg ist frei ... neuer Name

3. File: 20200101-111111-02.jpg -> rename zu 20200101-111111.jpg
-> ist jetzt ja ebenfalls belegt (siehe 2. File)
-> rename zu 20200101-111111-01.jpg

Das rename mit exiftools -fileorder klappt also wie es soll - ist nur nicht das was ich suche - da es keine Fehler der Vergangenheit ;) Korrigiert.

Lösung wäre hier also also mit einem unschönen Namen als Zwischenlösung zu arbeiten - wie unten beschrieben: CR2/3/HEIC können Millisekunden (SubSecTimeOriginal). Die packe ich an den Dateinamen ran:
20200101-111111.001.jpg, 20200101-111111.002.jpg usw.
Und DIESE Dateinamen wandel ich dann ich dann in mein Format um: 20200101-111111.jpg, 20200101-111111-01.jpg usw. MIT Fileorder sollte das klappen. Doppelte Dateinamen können hier nicht entstehen und somit ungewünscht korrigiert werden.

Problem bleibt dann bei GoPro-Bildern. Die kennen keine ms. Hier wird aber leider irgendwann der PreservedFileName (der dem OOC-Dateinamen entspricht) überschrieben. WANN in meiner Kette hab ich noch nicht raus - sehr mühselig. Den kann ich also nicht nehmen. (also ein falsches 20200101-111111.jpg in G010100.jpg umbenennen). Ich brauch in den Exifs bei GoPro-Bildern also irgendwas UNIQUEmässiges was HOCHZÄHLT ... dann rename dahin und dann mein Wunschname. Da konnte ich noch nicht weiterforschen ;(

Im Moment bin ich nur etwas ausgelastet sonst würde ich zumindest CR2/3/HEIC schon probieren. Ich denke mit dem Zwischenschritt sollte es gehen.

Im Moment kann ich das Script also nur bei Bildern OOC nutzen - sobald händisch was bearbeitet wurde, kann das Script fehlerhaft laufen. Und das stört mich halt - das Script soll zu jeder Zeit ein IDENTISCHES Ergebnis bringen ...

Grüße
 
...

Problem bleibt dann bei GoPro-Bildern. Die kennen keine ms. Hier wird aber leider irgendwann der PreservedFileName (der dem OOC-Dateinamen entspricht) überschrieben. WANN in meiner Kette hab ich noch nicht raus - sehr mühselig. Den kann ich also nicht nehmen. (also ein falsches 20200101-111111.jpg in G010100.jpg umbenennen). Ich brauch in den Exifs bei GoPro-Bildern also irgendwas UNIQUEmässiges was HOCHZÄHLT ... dann rename dahin und dann mein Wunschname. Da konnte ich noch nicht weiterforschen ;(
...

Mit
Code:
exiftool bild_a.jpg > bild_a.txt
exiftool bild_b.jpg > bild_b.txt
diff bild_a.txt bild_b.txt | less
nach Tags suchen die ein Reihenfolgenkriterium darstellen könnten.

Wenn da nichts gefunden wird, bleibt nur noch den Bildinhalt visuell betrachten und daraus die richtige Reihenfolge ableiten.
 
WERBUNG
Zurück
Oben Unten