Photo_Details.csv - Exif-Daten aus CSV-File übernehmen

L

Lukejack

Mitglied
Thread Starter
Dabei seit
07.03.2014
Beiträge
58
Reaktionspunkte
2
Hallo zusammen,
vielleicht hat ja noch jemand eine konkrete Idee.

Ich möchte iCloud Fotos in einer anderen Software verwenden und habe mir eine Foto Mediathek über die Anforderung persönlicher Daten heruntergeladen.
Der Export von icloud.com direkt hat nicht wirklich gut funktioniert.
Daher habe ich die Daten in 10GB-Paketen bei Apple angefordert. Das ging ganz gut.

Nun ist es so, dass viele Fotos bereits mit korrekten EXIF-Daten versehen sind.

Alle Fotos, die jedoch über Umwege in die Mediathek gelangt sind, haben aber bspw. kein Aufnahmedatum in den EXIF-Tags.
Stattdessen wird eine CSV-Datei mitgeliefert, die den Dateinamen und das Import-Datum enthält.
Das Import-Datum würde ich gern als Aufnahme-Datum verwenden.

Der Aufbau ist wie folgt:

imgName,importDate
IMG_2901.JPG,"Thursday August 2,2018 11:19 AM GMT"
IMG_2904.JPG,"Wednesday August 25,2021 3:35 PM GMT"

Nun wäre das ganze kein großes Problem.
Ein Shell-Script kann ja durchaus CSV-Dateien einlesen und den Inhalt der 2.Spalte bspw. als Dateidatum setzen.
Allerdings nur, wenn das Datum auch in einem korrekten Format wäre.
Das ist leider nicht der Fall und ich weiß auch nicht, wie ich es umwandeln kann bspw. in ein Format YYYY:MM:DD HH:MM:SS

Es gibt auch Programme, die das grundsätzlich können, wie bspw. exiftool.
Aber auch da scheitert es an dem eigenwilligen Datumsformat.

Weder Numbers noch LibreOffice können das irgendwie wandeln.

Hat jemand eine Idee, wie man's hinbekommen könnte oder kennt gar ein Tool, welches mir diese Aufgabe abnimmt?

Beste Grüße,
Luke
 
Vielleicht einmal einen Blick auf den GraphicConverter werfen, der kann per script oder Mehrfachkonvertierung und Stapelverwaltung Bild- und Meta-Daten bearbeiten, Formate konvertieren (automatische Konvertierung) und hat zahlreiche Automatisierungsfunktionen. Gezielt dieses Datumsformat habe ich nicht probiert, aber auch das sollte funktionieren (mal in die Scripte unter Mehrfachkonvertierung schauen)

- Das "Schweizer Offiziersmesser" für Bildformate ermöglicht beinahe jede Art der Bearbeitung.
Man kann das Programm testen, im AppStore kaufen oder direkt bei Lemke
Gerade bei größeren Dateimengen ist es nahezu unersetzlich.
 
  • Gefällt mir
Reaktionen: dg2rbf
Mahlzeit.
Ich habe das Problem mittlerweile übrigens gelöst.
Ich habe ein Shell-Script geschrieben, dass die Umwandlung des Datums vornimmt und dann das Dateidatum an Hand der CSV-Datei entsprechend setzt.
Anschließend kann man mit den üblichen Tools das Dateidatum in die EXIF-Parameter übernehmen.
Bei Bedarf kann ich das Skript hier gerne posten oder anhängen.
War im Grunde keine große Sache.
 
Hallo,
Danke für die Dokumentation der Fragestellung und der Antwort. Ich würde mich freuen, wenn du das Script die nächsten 4 Wochen mal teilen könntest.

Vielen Dank und viele Grüße
Chirstoph
 
Hallo Christoph,
gerade erst wieder darüber gestolpert.
Ich gehe mal auf die Suche. Ist ja schon ein Weilchen her mit dem Skript.

Beste Grüße,
Luke
 
Ich habe ein Shell-Script geschrieben, dass die Umwandlung des Datums vornimmt und dann das Dateidatum an Hand der CSV-Datei entsprechend setzt.
Bin erst jetzt über den Thread gestolpert und freue mich, dass Du es lösen konntest. Welche Skriptsprache hast Du verwendet? Könnte mir vorstellen, dass man sowas mit "Perl" ganz gut lösen kann. Ich würde mich auch gerne daran versuchen. Wärst Du bereit, Teile deines Sourcecodes zu teilen?
 
Hallo,
hab's gefunden. Ich hänge es hier unten mal an.
Es handelt sich um ein einfaches Shell-Skript.
Eigentlich kein Hexenwerk, daher kann es sich jeder gerne nochmal im Detail anschauen.
Bei mir funktionierte es ziemlich gut.
Ich habe hingegen eher das Problem, das Synology Photos Mobile die Daten offensichtlich teilweise durcheinander bringt.
Obwohl die EXIF-Tags korrekt sind. Weiß der Geier, woran das liegt.

Code:
INPUT=combined.csv
OLDIFS=$IFS
IFS=','
[ ! -f $INPUT ] && { echo "$INPUT file not found"; exit 99; }
while read imgName importOne importTwo
do
    echo "imgName : $imgName"
importDate="$importOne,$importTwo"
    echo "importDate : $importDate"

M="$(cut -d' ' -f2 <<<"$importDate")"

case "$M" in
    "January")
        M=01
        ;;
    "February")
        M=02
        ;;
    "March")
        M=03
        ;;
    "April")
        M=04
        ;;
    "May")
        M=05
        ;;
    "June")
        M=06
        ;;
    "July")
        M=07
        ;;
    "August")
        M=08
        ;;
    "September")
        M=09
        ;;
    "October")
        M=10
        ;;
    "November")
        M=11
        ;;
    "December")
        M=12
        ;;
    *)
        ;;
esac
echo "M $M"

X="$(cut -d' ' -f3 <<<"$importDate")"

D="$(cut -d',' -f1 <<<"$X")"
if test "$D" -lt 10
then
    D="0$D"
fi
echo "D $D"

Y="$(cut -d',' -f2 <<<"$X")"
echo "Y $Y"

Z="$(cut -d' ' -f4 <<<"$importDate")"

H="$(cut -d':' -f1 <<<"$Z")"
echo "H $H"

MI="$(cut -d':' -f2 <<<"$Z")"
echo "MI $MI"

AMPM="$(cut -d' ' -f5 <<<"$importDate")"
echo "AMPM $AMPM"

if test "$AMPM" == "PM"
then
    H=$(expr $H + 12)
fi

echo "H ist $H"

if test "$H" -lt 10
then
    H="0$H"
fi

V="$Y-$M-$D $H:$MI"

echo "$V"

U="$Y$M$D$H$MI"

echo "$U"

touch -t $U $imgName


done < $INPUT
IFS=$OLDIFS


Beste Grüße,
Luke
 
  • Gefällt mir
Reaktionen: Mankind75
Zurück
Oben Unten