Modifier les métadonnées EXIF de ses photos

Modifier les métadonnées EXIF avec Exiv2Modifier les métadonnées EXIF de ses photos

Comment rajouter des informations aux données « EXIF » d’une photo? En effet il manque souvent l’auteur, le commentaire… Je vous propose l’une des méthodes sous linux…

Rapide, car légère, puisqu’en ligne de commande.

Avant de commencer, ayez une idée de ce qu’est un fichier EXIF d’une photographie, ensuite prenez connaissance des variables susceptibles d’enrichissement.
C’est fait? Alors c’est parti…

Imaginons, j’ai pris une série de photographies, avant de les renommer je souhaite rajouter d’autres renseignement aux métadonnées « EXIF »: Un commentaire, le lieu de prise et nom de la plante que j’ai photographié dans la série, il s’agit de la colchique d’automne (Colchicum autumnale).
Si je n’avais qu’une photographie à modifier j’utiliserai la ligne suivante:

$ exiv2 -M"set Exif.Photo.UserComment charset=Ascii Paris - Colchicum autumnale (colchique d'automne) " DSC_0013.JPG

Mais voilà, j’ai plusieurs photographies à modifier, alors je vais utiliser une boucle « for, do, done » et pourquoi pas en faire un script pour éviter la réécriture de la ligne à chaque fois, à vous de voir.

Ajoutons aux données EXIF un commentaire pour le nom et lieu: Paris – Colchicum autumnale (colchique d’automne)

$ for i in *.JPG; do exiv2 -M"set Exif.Photo.UserComment charset=Ascii Paris - Colchicum autumnale (colchique d'automne)" $i; done

Vérifions avec la commande exiv2 et l’option « -pt » pour plus de détail:

$ exiv2 -pt DSC_0012.JP
(...)
Exif.Nikon3.Saturation           Ascii      16  NORMAL
Exif.Nikon3.VariProgram          Ascii      16  AUTO
Exif.Photo.UserComment           Undefined  56  Paris - Colchicum autumnale (colchique d'automne)
Exif.Photo.SubSecTime            Ascii       3  50
(...)

De la même façon on peut mettre le nom d’auteur, le Copyright etc.
Exemple:

$ for i in *.JPG; do exiv2 -M"set Exif.Image.Artist Mon_prenom et NOM" $i; done
$ for i in *.JPG; do exiv2 -M"set Exif.Image.Copyright Creative Commons BY-NC-SA" $i; done
$ exiv2 -pt DSC_0012.JP
(...)
Exif.Image.Artist                 Ascii      18  Mon_prenom et NOM
Exif.Image.YCbCrPositioning       Short       1  Co-sited
Exif.Image.Copyright              Ascii      26  Creative Commons BY-NC-SA
(...)
Exif.Photo.UserComment            Undefined  56  Paris - Colchicum autumnale (colchique d'automne)
(...)

Renommer les photos par lot en utilisant les métadonnées EXIF

Renommer une photo en utilisant les métadonnées exif avec exiv2Renommer des photos par lot en utilisant des données EXIF de chaque image.

Ou comment avoir un nom ressemblant à « 2010-0613-16h07m08s-chantier.JPG » au lieu de « DSC_0005.JPG »

Prérequis:
« exiv2 » doit être installé.
On va utiliser les commandes « find » et « exiv2 « 

Voyons ce qu’il y a dans le répertoire courant:

$ ls
DSC_0005.JPG DSC_0006.JPG DSC_0007.JPG DSC_0008.JPG

On va renommer les photos en utilisant une partie des métadonnées EXIF de chaque image en une seule commande (ici date et heure de prise de vue).

$ find -iname "DSC_*" -exec exiv2 -r %Y-%m%d-%Hh%Mm%Ss-chantier mv {} +
$
$ ls -l
total 10004
-rwxr-xr-x 1 sima sima 2976990 2010-06-13 16:07 2010-0613-16h07m08s-chantier.JPG
-rwxr-xr-x 1 sima sima 2538376 2010-06-13 16:07 2010-0613-16h07m27s-chantier.JPG
-rwxr-xr-x 1 sima sima 2231659 2010-06-13 16:07 2010-0613-16h07m51s-chantier.JPG
-rwxr-xr-x 1 sima sima 2472989 2010-06-13 16:07 2010-0613-16h07m57s-chantier.JPG

Que c’est-il passé?
La commande find a recherché les fichiers dont le nom commence par DSC_
Lorsque la réponse est vrai (renvoi 0) exécute la commande exiv2
La commande exiv2 va renommer en prenant l’année (%Y), le mois (%m), le jour (%d), l’heure (%H), les minutes (%M) et les secondes (%S) de prise de vue en y ajoutant les personnalisations les () (hms) de heure, minutes et secondes puis chantier.

En faisant «man exiv2» ou «man find» on peut voir l’étendue des possibilités.

ATTENTION ! cette commande est récursive et si vous avez des sous-répertoires avec des fichiers correspondant à la requête, ils seront également modifiés. Dans ce cas, vous pouvez utiliser la commande exiv2 dans une boucle for, do, done

Il est facile d’en faire un script…

Renommer les photos sans utiliser les métadonnées Exif

Renommer les photos sans utiliser les métadonnées EXIFRenommer sans utiliser les métadonnées Exif.

De retour de vacances, il n’est pas rare de se retrouver avec répertoire contenant plus de 400 photos avec des noms de fichiers du genre:
dsc_0007.jpg
dsc_0009.jpg
dsc_0016.jpg

Or on souhaite que les noms soient plus explicites, genre «2010-07-vancances-numéro.jpg»

Faire des modifications une par une est fastidieux, c’est là qu’intervient la commande «sed»

On va utiliser une boucle «for, do, done», J’ai déjà donné les explications sur le billet « Initiation au shell boucle (for, do, done) » (la punition de mon fils).

Voici la ligne magique avec la commande «sed»:

for i in dsc_*; do mv $i `echo $i | sed "/^dsc_/s//2010-07-vacances-/"`; done

« dsc_ » sera remplacé par « 2010-07-vacances-« 

Ce qui donnera des noms de fichier du genre :

2010-07-vacances-0007.jpg
2010-07-vacances-0009.jpg
2010-07-vacances-0016.jpg

Pour éviter de retaper la ligne on peut faire un mini script:

#!/bin/bash
# renommer des photos dans le répertoire courant.
echo "Entrez ce que vous souhaitez remplacer, ex. dsc_, DSC ..."
echo "Gardez la numérotation finale des photos..."
echo -n "respectez les la casse, majuscules / Minuscules : "
read rempl
echo -n "Entrez ce que vous souhaitez voir à la place : "
read souhait
for i in "$rempl"*
do mv $i `echo $i | sed "/^"$rempl"/s//"$souhait"/"`
done
echo "TERMINE"

On va le nommer « renom-photos.sh »

Le rendre exécutable par:

chmod +x renom-photos.sh

Plaçons-le dans le répertoire courant et utilisons-le.
Voyons ce qu’il y a dans le répertoire courant.

$ ls -l
total 10764
-rwxr-xr-x 1 sima78 sima78 2231659 2010-06-13 16:07 DSC_0007.JPG
-rwxr-xr-x 1 sima78 sima78 2720329 2010-06-13 16:09 DSC_0009.JPG
-rwxr-xr-x 1 sima78 sima78 1996609 2010-06-18 15:04 DSC_0016.JPG
-rwxr-xr-x 1 sima78 sima78     383 2010-08-17 20:55 renom-photos.sh
-rwxr-xr-x 1 sima78 sima78 2036985 2010-06-18 15:03 souhait0015.JPG
-rwxr-xr-x 1 sima78 sima78 1996609 2010-06-18 15:04 souhait0016.JPG

On voit aussi le script qui se termine par .sh et je souhaite renommer mes photos DSC_*
Je lance le script et réponds au 2 questions…

$ ./renom-fotos.sh
Entrez ce que vous souhaitez remplacer, ex. dsc_, DSC ... (ici se serait DSC_)
Gardez la numérotation finale des photos...
respectez les la casse, majuscules / Minuscules : DSC_
Entrez ce que vous souhaitez voir à la place : 2010-07-vacances-
TERMINE

Voyons le résultat.

$ ls -l
total 10764
-rwxr-xr-x 1 sima78 sima78 2231659 2010-06-13 16:07 2010-07-vacances-0007.JPG
-rwxr-xr-x 1 sima78 sima78 2720329 2010-06-13 16:09 2010-07-vacances-0009.JPG
-rwxr-xr-x 1 sima78 sima78 1996609 2010-06-18 15:04 2010-07-vacances-0016.JPG
-rwxr-xr-x 1 sima78 sima78     383 2010-08-17 20:55 renom-fotos.sh
-rwxr-xr-x 1 sima78 sima78 2036985 2010-06-18 15:03 souhait0015.JPG
-rwxr-xr-x 1 sima78 sima78 1996609 2010-06-18 15:04 souhait0016.JPG
drwxr-xr-x 2 sima78 sima78    4096 2010-08-17 20:50 sous-photos

Il a donc bien modifier les fichiers commençant par « DSC_ »

Maintenant, tout ça peut être perfectionné… à vos shells.

Métadonnées EXIF d’une photo

Métadonnées Exif d'une photographieMétadonnées EXIF d’une photo.

Lorsque vous prenez une photo avec votre appareil photo numérique, il crée, en plus de l’image, une multitude de données EXIF (Exchangeable Image File format).

Ces données EXIF nous renseignent sur les propriétés de l’image (elles peuvent être modifiées, il ne s’agit donc pas de valeurs sûres):

– date,heure de la prise de vue
– marque de l’appareil
– ouverture et vitesse de prise de vue
– avec ou sans flash
– etc.

Exemple de métadonnées exif.

$ EXIF DSC_0132.JPG
Marqueurs EXIF dans'DSC_0132.JPG' (ordre des octets 'Motorola') :
---------------------+-----------------
Marqueur            |Valeur
---------------------+-----------------
Constructeur         |NIKON CORPORATION
Modèle               |NIKON D50
Orientation          |haut - gauche
x-résolution         |300,00
y-résolution         |300,00
Unité de la résolu   |pouces
Logiciel             |Ver.1.00
Date et heure        |2010:07:11 18:41:01
Positionnement YCbCr |co-situés
Compression          |Compression JPEG
x-résolution         |300,00
y-résolution         |300,00
Unité de la résolu   |pouces
Positionnement YCbCr |co-situés
Temps d'exposition   |1/250 sec.
Focale               |f/2,8
Exposure Program     |Priorité ouverture
Version d'exif       |Exif version 2.21
Date et heure (origi |2010:07:11 18:41:01
Date et heure (numé  |2010:07:11 18:41:01
Components Configura |Y Cb Cr -
Bits compressés par  |4,00
Correction d'exposit |0,00 EV
MaxApertureValue     |1,00 EV (f/1,4)
Mode de mesure       |Motif
Source lumineuse     |0
Flash                |Le flash ne s'est pas déclenché.
Longueur focale      |50,0 mm
Note du créateur     |28700 bytes undefined data
Commentaire de l'uti |
SubsecTime           |90
SubSecTimeOriginal   |90
SubSecTimeDigitized  |90
FlashPixVersion      |FlashPix version 1.0
Espace des couleurs  |sRGB
PixelXDimension      |3008
PixelYDimension      |2000
Méthode d'acquisiti  |Sonde de couleur à un capteur
Source du fichier    |DSC
Type de scène        |1
Motif CFA            |8 bytes undefined data
Rendu personnalisé   |Processus normal
Mode d'exposition    |Exposition automatique
Balance des blancs   |Balance des blancs automatique
Valeur du zoom numé  |1,00
Longueur focale dans |75
Type de capture de l |Standard
Contrôle du gain     |Normal
Contraste            |Normal
Saturation           |Normal
Netteté              |Normal
Échelle de distance  |Inconnu
InteroperabilityInde |R98
InteroperabilityVers |0100
---------------------+-----------------
Les données EXIF contiennent une vignette (8581 octets).