Je vous ai déjà présenté Exiftool comme un outil indispensable pour compléter vos données Exif quand on utilise des objectifs manuels (comprendre sans contacts). Son utilisation ne se limite pas à ça bien entendu :), si vous scannez des négatifs, vous pourrez compléter vos fichiers avec des métadonnées boitier/objectif/film qui peuvent être très intéressantes dans la maintenance de votre bibliothèque.

Bref ! Cet article est à considérer comme un recueil de notes explicatives, de réflexions, d’extraits de documentation, et autres ressources sur Exiftool. Un peu à la façon d’une cheatsheet, le contenu de cet article évoluera avec le temps, au fur et à mesure que j’améliorerai mon workflow. Si vous avez des astuces, n’hésitez pas à les partager en commentaire ! Je les intégrerai volontiers :).

Précisions

De toutes évidences, l’utilité de cette ressource ne se prêtera à vous que si vous disposez au minimum d’une connaissance de base d’Exiftool. Il est aussi préférable que vous vous familiarisiez avec l’utilisation d’une invite de commande (Terminal, …).

Dernière précision, les commandes et processus sont décrits pour un environnement OSX/Linux. Dans la majeure partie des cas, ce sera identique pour Windows mais je ne peux rien garantir. Donc si vous êtes sur Windows, je vous conseille de consulter la documentation d’Exiftool (en anglais) :).

Dans tous les cas, si vous avez des questions, n’hésitez pas non plus à les poser dans les commentaires !

Paramètres fréquemment utilisés

Dans les différents articles du blog au sujet d’Exiftool, vous rencontrerez quelques paramètres de manière récurrente. Pour éviter de me répéter, je vais les expliquer ici une bonne fois pour toutes ;).

  • -m est utilisé pour ignorer les éventuelles erreurs mineures et les avertissements ;
  • -overwrite_original_in_place signifie que l’on va écrire directement dans le fichier original (et pas dans une copie) ;
  • -P, quant à lui, est utilisé pour préserver les dates de création originales.

Traiter des fichiers par lots

Quand on revient d’un shooting avec plusieurs centaines de photos, on ne veut pas passer des semaines à compléter les métadonnées d’un fichier à la fois ;). Heureusement, Exiftool permet de traiter des fichiers par lots. Pour cela, il suffit de donner un chemin de dossier (en lieu et place d’un chemin de fichier) et il scannera l’ensemble des fichiers contenus directement dans ce dossier. Il peut s’agir d’un chemin absolu (du genre /Volumes/MonDisque/MonDossier/…) ou d’un chemin relatif (du genre ~/karl/Images/…). Ajoutez le paramètres -R si vous souhaitez qu’il scanne récursivement les sous-dossiers à la recherche d’autres fichiers à traiter. Par exemple :

exiftool -R … "/chemin/vers/le/dossier"

Accéder aux métadonnées propriétaires

De base, les métadonnées affichées par Exiftool sont les métadonnées dites « connues ». Les métadonnées connues regroupent les tags standards et certains tags propriétaires nommés. Mais parfois, on doit accéder aussi à des tags propriétaires non-nommés  (ou inconnus). Ces derniers peuvent être chargés par l’ajout du paramètre -u (pour unknown). Aussi, pour accéder à certains tags, il faudra les préfixer du nom de leur groupe. Par exemple :

exiftool -u … -Olympus:Olympus_ImageProcessing_0x1905 "/chemin/vers/le/dossier"

Cibler certains fichiers

Quand on traite par lots, on ne veut pas forcément appliquer les mêmes modifications à tous les fichiers d’un lot. Il convient donc de cibler certains fichiers en les différenciant des autres par tel ou tel critère.

Non seulement Exiftool permet d’agir sur les métadonnées d’un fichier, mais il permet aussi de le faire conditionnellement ! Pour cela, il suffit d’ajouter le paramètre -if que l’on fait suivre par une chaine de condition à laquelle un fichier répondra ou non.

Cette chaine de condition respecte la structure des expressions logiques Perl, on y retrouve donc les tags préfixés par le signe $, les opérateurs && (et), || (ou), l’équivalence de chaînes est écrite eq (à ne pas confondre avec le signe d’égalité == pour les autres types de données), … Pour plus d’informations, je vous conseille de lire un peu de documentation sur les expressions logiques Perl.

Dans cette chaine de condition, on décrit une ou plusieurs condition(s) sur des métadonnées. Par exemple, si je veux cibler toutes les images prises avec une focale de 50mm, je peux tester le tag FocalLength. J’écrirai alors $FocalLength eq "50". Exemple pour cibler les fichiers sans objectif défini :

exiftool … -if '$LensModel eq ""' "/chemin/vers/le/dossier"

Quand on souhaite combiner plusieurs conditions, il convient de définir comment elles se comportent entre elles en utilisant les structures de contrôle && (et) et/ou || (ou). Pour plus de lisibilité, il est recommandé dans ce cas d’englober chaque condition entre des parenthèses « ()« . Exemple pour cibler les fichiers sans objectif défini avec une focale de 50mm :

exiftool … -if '($LensModel eq "") && ($FocalLength eq "50")' "/chemin/vers/le/dossier"

Marquer des fichiers pour les reconnaitre plus tard

Quand j’ai commencé à réfléchir à la question, je me suis dit que le meilleur des moyens était d’ajouter un mot clé dans les métadonnées, dans le tag Keywords. Sémantiquement, ça serait le top. Le problème, c’est que si on ne le fait pas avant l’import initial dans Lightroom, le nouveau mot clé ne sera jamais synchronisé du fichier vers Lightroom. Ce qui rend la démarche inutile. (WTF Adobe ?!)

La meilleure idée que j’ai eue jusqu’à maintenant, c’est d’utiliser le tag Instructions. Ce tag est rarement utilisé mais pour ne pas prendre le risque d’écraser une éventuelle donnée, ajouter notre mot clé à la suite de la valeur de ce tag convient parfaitement.

L’ajout d’une chaine à la fin d’un tag s’écrit … '-Instructions<${Instructions} Test' … où les '' sont très importants (sous Windows, il faudra utiliser des "" à la place).

C’est tout pour maintenant !

N’oubliez pas de revenir de temps à autres sur cette page au cas où je l’aurais complétée davantage, et surtout n’hésitez pas à partager vos propres astuces pour faire évoluer cette ressource :).