Modifier la date de vos photos sous linux en ligne de commande.
Votre appareil est resté longtemps sans ses piles, vous en avez mis des neuves, et pris des photo sans remettre votre appareil à la bonne date et heure…
Vous allez donc devoir…
Modifier la date sur le fichier EXIF de vos photos.
Mettez vos clichés à modifier dans un répertoire.
Voyez la suite….
Ouvrez un shell et vérifiez le contenu du répertoire avec la commande « ls ».
$ ls
DSCN3449.JPG DSCN3450.JPG DSCN3451.JPG DSCN3452.JPG DSCN3453.JPG DSCN3454.JPG DSCN3455.JPG DSCN3456.JPG
Vérifiez la date d’une des images du répertoire avec « exiv2 image.jpg »
$ exiv2 DSCN3449.JPG
Nom du fichier : DSCN3449.JPG
Taille du fichier : 1230426 Octets
Type MIME : image/jpeg
Taille de l'image : 2304 x 3072
Marque de l'appareil : NIKON
Modèle de l'appareil : COOLPIX L12
Horodatage de l'image : 2010:05:02 05:32:43
Numéro de l'image :
Temps d'exposition : 1/469 s
Ouverture : F2.8
La date affiche 02/05/2010 à 05:32:43 alors que l’image a été prise (supposons) le 01/05/2012 à entre 14h et 15h.
Nous allons modifier la ligne « Horodatage de l’image: 2010:05:02 05:32:43 » en ligne de commande. Plusieurs champs peuvent intervenir pour l’affichage de l’heure, on peut vérifier avec la ligne suivante:
exiv2 -p v DSCN3449.JPG | grep DateTime
$ exiv2 -p v DSCN3449.JPG | grep DateTime
0x0132 Image DateTime Ascii 20 2010:05:02 05:32:43
0x9003 Photo DateTimeOriginal Ascii 20 2010:05:02 05:32:43
0x9004 Photo DateTimeDigitized Ascii 20 2010:05:02 05:32:43
Il y a donc trois champs à modifier.
On peut déjà modifier la première photo en trois ligne avec la commande « exiv2 » et l’option « -Mset »
$ exiv2 -M"set Exif.Image.DateTime 2012:05:01 14:32:43" DSCN3449.JPG
$ exiv2 -M"set Exif.Photo.DateTimeOriginal 2012:05:01 14:32:43" DSCN3449.JPG
$ exiv2 -M"set Exif.Photo.DateTimeDigitized 2012:05:01 14:32:43" DSCN3449.JPG
Oui, mais si vous avez plusieurs photos cela risque de devenir très vite fastidieux, l’idéal est de trouver la bonne boucle à faire.
Déplacez l’image que vous venez de modifier pour éviter que les changements lui soient appliqués.
Faire une modification de date dans une boucle, c’est risquer de se retrouver avec tous les clichés à la même date, à la seconde près. A moins de faire un script assez complexe.
Nous allons nous simplifier la tâche en ajustant l’heure. L’option « ad » de la commande « exiv2 » permet l’ajustement de cette donnée en ajoutant ou retirant des tranches de temps. En fait, il faudra préciser le nombre d’années, mois, jours et heures de décalage.
Dans un premier temps nous allons chercher l’intervalle entre la date du cliché et celui de la prise de vue, soit (01/05/2012 14:32 – 02/05/2010 05:32).
Vous pouvez utiliser un tableur ou un calculateur en ligne.
Résultat: 1 year, 11 months, 29 days, 9 hours
Une fois le décalage évalué, on va l’appliquer avec « exiv2 », donc ajouter 1 ans, 11 mois, 29 jours, 9 heures et 00 minutes, il suffit d’exécuter:
« exiv2 -a 9:00 -Y 1 -O 11 -D 29 ad image.jpg »
Mais nous allons l’introduire dans une boucle « For Do Done »
$ for i in *; do exiv2 -a 9:00 -Y 1 -O 11 -D 29 ad $i;done
Vérifions sur une des images:
$ exiv2 -p v DSCN3452.JPG | grep DateTime
0x0132 Image DateTime Ascii 20 2012:05:01 14:36:22
0x9003 Photo DateTimeOriginal Ascii 20 2012:05:01 14:36:22
0x9004 Photo DateTimeDigitized Ascii 20 2012:05:01 14:36:22
Réussi !
Maintenant vous pouvez renommer vos photos en utilisant la date et heure du fichier exif.
