Share via


[TIP] [Updated] Exif Daten mit Powershell

Die hier gezeigten Scripte/Codebeispiele sind “as is”. Weder Microsoft Deutschland noch ich selber übernehmen hierfür irgendwelche Haftung, Garantie oder Support.

Die Script Downloads finden sich unten.

 

Update: Damit das 2. Script korrekt funktioniert, müssen für die verwendeten Dateien entsprechende Codecs installiert sein. Für die gängigsten Formate habe ich bei den Downloads Links zu den entsprechenden Herstellerseiten eingefügt. Leider verfügt noch nicht jeder Hersteller über 64bit Treiber. Hier wäre es wünschenswert, wenn die Hersteller dies endlich nachholen würden, da in Zukunft davon auszugehen ist, dass 32bit OS an Bedeutung verlieren werden!

Update2: Habe das Script um ein bisschen Fehlertolleranz erweitert, jetzt klappt Excel auch besser! ;)

Da ich heute ein wenig Zeit hatte und mich mal wieder etwas mit der Powershell möchte ich euch das Resultat nicht vorenthalten.

Wie vielleicht bekannt ist, Fotografiere ich sehr gerne und habe dadurch das ein oder andere Foto “rumfliegen”.

Oftmals wünscht man sich insb. für die Tourplanung eine Statistik über die Meistgenutzte Brennweite, Blende, etc.

Hierzu gibt es verschiedene Tools, aber ich wollte (zu Trainingszwecken) eine Lösung mit der Powershell erstellen.

Angeregt durch 1:

$exif = New-Object System.Drawing.Bitmap($file.FullName)
$exif.GetPropertyItem($FOCALID)

und 2 :

$shell=new-object -com Shell.Application$folder=$shell.Namespace((split-path $this))$folder.items() | % { $folder.GetDetailsOf($_,$i) }

habe ich mich dann an die Arbeit gemacht.

Die Implementierung aus der Lösung von 1 hat auch sehr schnell gut funktioniert, jedoch hat sich gezeigt, dass der Umweg über System.Drawing.Bitmap extreme Performance Einbußen nach sich gezogen hat [für ~733 JPGs brauchte mein Notebook ca. 7min!!!, ], habe ich nach einem besseren und vor allem schnelleren Weg gesucht.

Hier kam mir 2 zur Hilfe. Die Idee ist, über ein Shell Objekt einfach die Metadaten ohne Konvertierung auszulesen, ganz so wie es z.B. der Explorer auch macht:

image

Hierzu war es zuerst notwendig, die IDs für die einzelnen Metadaten auszulesen (finden sich im Anhang zu Script 2) und die für mich relevanten entsprechend zu nutzen.

Nun musste noch etwas Feintuning betrieben werden, sprich die tatsächliche Sammlung der statistischen Daten und die anschließende Ausgabe, bzw. Export und fertig ist das Script zur Analyse von Exifdaten [ok, ganz so schnell war es nicht, aber hat trotzdem Spaß gemacht und meine eingerosteten Kenntnisse mal wieder etwas geölt.]

Ach, an der Performance hat sich natürlich auch etwas getan: von den ~7min sind noch 35s übrig geblieben. [Ob sich der Aufwand gelohnt hat steht auf einem anderen Blatt! Winking smile ]

Der Export ist “nur” in CSV möglich, kann aber in Excel recht einfach genutzt werden:

  1. Erste Spalte selektieren und im Daten-Reiter auf “Convert Text to columns” auswählen
    image
  2. ggf. über Filter noch sortieren
  3. Spalten A und B selektieren und über Einfügen ein Linien Diagramm einfügen
    image
  4. ggf. unsinnige Werte (das sind vermutlich ungenau geschriebene Werte) ausblenden und/oder Werte, die nur eine geringe Relevanz haben (z.B. alles mit 1-5 Fotos) ausblenden
  5. Sich darüber freuen, dass man (hoffentlich) ein paar wenige Peaks hat (so wie ich) und seine Objektive in Zukunft besser auswählen kann.

Parameter:

  • dir, default: aktueller Pfad; hier den Pfad zu dem (root) Verzeichnis der Fotos angeben
  • recursive, default: false, auf $true setzen, um auch Unterverzeichnisse mitzunehmen
  • doExposure, default: true, auf $false setzen, um Verschlusszeiten nicht zu berechnen
  • doFocals,default: true, auf $false setzen, um Brennweiten nicht zu berechnen
  • doFNumbers,default: true, auf $false setzen, um Blendeneinstellungen nicht zu berechnen
  • doIsos,default: true, auf $false setzen, um verwendete ISO nicht zu berechnen
  • doFlash,default: true, auf $false setzen, um Blitznutzung nicht zu berechnen
  • doProgress,default: true, auf $false setzen, um den Progress nicht anzuzeigen (etwas schneller)
  • output, default: nicht definiert, sofern man einen Output in CSV erhalten möchte, hier einen sinnvollen Pfad+Dateinamen angeben (ich überprüfe weder den Pfad noch erstelle ich ihn, etc, hier war ich etwas faul! Winking smile)

Verbesserungen: Ich könnte noch einen gescheiten Hilfetext einbauen und die Sortierung noch verbessern, bin aber soweit erst mal zufrieden, würde mich aber trotzdem über Feedback und weitere Änderungsvorschläge freuen!

Downloads:

 

Bis zum nächsten Post

Es ist wichtig, die Fehler zuzugeben, bevor sie einem vorgeworfen werden. David Ogilvy

 

-Stephanus