Verwenden von EXIFTool zum Hinzufügen von EXIF-Daten aus Dateinamen

Verwenden von EXIFTool zum Hinzufügen von EXIF-Daten aus Dateinamen

Es gibt eine Reihe von Fotos mit Zeitstempeln in ihren Dateinamen wie diesen:

Photo on 3-09-12 at 9.24 PM #2.jpg

Photo on 3-09-12 at 9.24 PM #1.jpg

Photo on 3-09-12 at 8.23 PM.jpg

usw.

(„3-09-12“, bedeutet „3. September 2012“ oder TT-MM-JJ)

Diese Fotos haben jedoch überhaupt keine EXIF-Daten. Bevor Sie sie in eine größere Sammlung importieren, wie würden Sie diese Informationen weiterleiten exiftoolund sie auch anweisen, neue Zeitstempel als EXIF-Daten hinzuzufügen, und zwar alles aus den Dateinamen der Fotos?

Aktualisieren: (Der jetzige Teil 1) meiner Frage zum Parsen von Dateinamen mit TT-MM-JJ und 12-Stunden-Zeit wurde sehr freundlich von @Stephane beantwortet. Aber ich habe festgestellt, dass derselbe Stapel von Fotos Dateinamen mit einer Variation enthält, die ich übersehen hatte. Ich hoffe, es macht mehr Sinn, einen „Teil 2“ hinzuzufügen, anstatt eine ganz neue Frage zu beginnen.

Zusamenfassend:

Wie könnte ich @Stephanes brillante Antwort ändern –

exiftool '-CreateDate<${FileName;use Date::Manip;
                      Date_Init("DateFormat=non-US");
                      /on (.*?at.*?[AP]M)/;$_=$1;
                      y/./:/;$_=UnixDate($_,"%Y-%m-%d %T")
                      }' ./*on\ *at*[PA]M*.jpg

– damit es möglicherweise mit dem unten stehenden Dateinamenformat funktioniert, das sich geringfügig vom ersten Teil der Frage unterscheidet, da es JJJJ-MM-TT und eine 24-Stunden-Zeit verwendet:

Photo on 2010-09-15 at 18.44 #4.jpg

Photo on 2010-09-15 at 18.44 #3.jpg

Photo on 2010-09-15 at 18.44.jpg

Weitere Erklärung:

Date::ManipBeim Versuch, diesen Teil von Stephanes Skript zu bearbeiten , wird offenbar, dass ich nicht weiß, was in den wichtigsten Teilen davon vor sich geht.

Ich habe versucht, die Date_InitZeile wegzulassen, da wir wieder zu einem ISO-ähnlichen Ganzjahresdatumsformat zurückgekehrt sind und dann

/on (.*?at.*?)/;$_=$1;
y/./:/;$_=UnixDate($_,"%Y-%m-%d %T")
' ./*on\ *at*.jpg

Aber exiftoolgibt mir no writeable tagsund FileName not defined. Anweisungen beihttp://search.cpan.org/~sbeck/Date-Manip-5.56/lib/Date/Manip.podscheinen (zumindest für mich) nicht hilfreich zu sein, um zu verstehen, was mit diesen Punkten, diesem „y“ am Zeilenanfang, dem Semikolon usw. los ist, und sie sind ziemlich ungoogelnd :S

Antwort1

Versuchen:

exiftool '-CreateDate<${FileName;use Date::Manip;
                      Date_Init("DateFormat=non-US");
                      /on (.*at.*?)(?: #\d+)?\.jpg$/;$_=$1;
                      y/./:/;$_=UnixDate($_,"%Y-%m-%d %T")
                      }' ./*on\ *at*.jpg

(möglicherweise müssen Sie das Date::Manip perlModul installieren).

Das -Tag<valuesetzt das entsprechende Tag. Das ${tag;perl-code}kann verwendet werden, um auf den Wert von zu erweitern, tagnachdem dieser durch das verarbeitet wurde perl-code.

Date::ManipHier besteht der Plan darin, die Funktion von zu verwenden, UnixDateum das Datum im Dateinamen zu analysieren und in ein für das CreateDateTag ( 2011-04-15 21:38:00) akzeptables Format zu konvertieren.

Date::Manipversteht viele gängige Datumsformate. Beispielsweise versteht es 3-09-12 at 9:24 PM(obwohl Sie angeben müssen, ob es sich um die US-amerikanische oder nicht-US-amerikanische Konvention handelt, bei der der Tag oder der Monat zuerst steht) und 2010-09-15 at 18.44(beachten Sie das :anstelle von .).

Also extrahieren wir diesen Teil aus dem Dateinamen, konvertieren ihn .in :und übergeben ihn an UnixDate.

verwandte Informationen