#1 Le 05/04/2010, à 16:14
- Lapogne71
Renommer en masse les photos avec date/heure système et exif
Voici quelques commandes utiles pour traiter rapidement les photos récupérées sur un appareil numérique, par traitement j'entends le renommage en masse par date de prise et par thème/série.
Par exemple je veux changer les noms :
M4110001.JPG ==> 2009-05-01_Week-end_en_Ardeche_01.JPG
M4110002.JPG ==> 2009-05-01_Week-end_en_Ardeche_02.JPG
....
M4110011.JPG ==> 2009-05-02_Week-end_en_Ardeche_11.JPG
.....
M4110023.JPG ==> 2009-05-03_Week-end_en_Ardeche_23.JPG
et faire la même chose pour les autres thèmes
La date peut être théoriquement récupérée depuis les données EXIF de chaque photo ou depuis la date système du fichier.
Cela parait facile, mais certains obstacles peuvent apparaître :
- la date "système" des fichiers a été modifiée et ne correspond plus à la date de prise, par exemple à l'occasion d'un téléchargement ou d'une simple rotation de l'image.
- la date de prise (stockée dans les données "EXIF" de la photo) est incorrecte. Par exemple pour une série de photos, elle est positionnée au 1er janvier de l'année de l'achat de l'appareil, cela arrive typiquement lorsqu'on a changé les piles et que l'appareil s'est repositionné à sa date d'usine.
- quand on rassemble les photos d'appareils différents pour un même évènement, aucun n'est reglé sur la même date/heure,..... quand c'est reglé...
Passons à la pratique.
Il faut tout d'abord installer quelques outils (jhead et exiv2) :
sudo apt-get install jhead exiv2
Après avoir isolé, dans son répertoire dédié, une série de photos sur le même thème :
Pour un traitement "normal" :
jhead -ft *.JPG ==> copie la date/heure de l'exif vers la date/heure du fichier
exiv2 -r '%Y-%m-%d_:basename:' *.JPG ==> ajoute la date exif au debut du nom de fichier
rename 's/_M4110/_Week-end_en_Ardeche_/' *.JPG ==> remplace la partie "M4110" dans le nom du fichier par "_Week-end_en_Ardeche_"
Pour réparer/modifier les dates dans l'EXIF des photos (à faire avant le "traitement normal")
jhead -ta+1:00 *.JPG ==> rajoute 1 heure à l'exif des photos
jhead -ds2008:09:23 *.JPG ==> force une date précise dans l'exif des photos
Voilà c'est à adapter en fonction de chacun, et les outils jhead et exiv2 permettent toutes sortes de manipulation (man jhead, man exiv2)
Hors ligne
#2 Le 05/04/2010, à 16:21
- bluc
Re : Renommer en masse les photos avec date/heure système et exif
Salut,
ça m'intéresse ton truc , je regarderai ça ce soir
Dernière modification par bluc (Le 05/04/2010, à 16:22)
Clevo : Ubuntu 24.04 ❖ Xubuntu 24.04 ❖ Kubuntu 23.10
avec partition data commune Une fraction de seconde Multiboot
Hors ligne
#3 Le 10/04/2010, à 14:10
- soupaloignon
Re : Renommer en masse les photos avec date/heure système et exif
j'ai bricolé un truc sur ce principe :
http://forum.ubuntu-fr.org/viewtopic.php?id=387297
==> Libérez les huitres du bassin d'Arcachon <==
Hors ligne
#4 Le 10/04/2010, à 23:17
- Lapogne71
Re : Renommer en masse les photos avec date/heure système et exif
j'ai bricolé un truc sur ce principe :
http://forum.ubuntu-fr.org/viewtopic.php?id=387297
Ok merci.
Je me suis permis de faire quelques commentaires sur ton script
Hors ligne
#5 Le 11/04/2010, à 01:10
- soupaloignon
Re : Renommer en masse les photos avec date/heure système et exif
soupaloignon a écrit :j'ai bricolé un truc sur ce principe :
http://forum.ubuntu-fr.org/viewtopic.php?id=387297Ok merci.
Je me suis permis de faire quelques commentaires sur ton script
Et tu as eu tout à fait raison . Je viens de les voir, j'y répondrai demain
==> Libérez les huitres du bassin d'Arcachon <==
Hors ligne
#6 Le 11/04/2010, à 12:15
- soupaloignon
Re : Renommer en masse les photos avec date/heure système et exif
Voilà, c'est fait
==> Libérez les huitres du bassin d'Arcachon <==
Hors ligne
#7 Le 11/04/2010, à 14:27
- Ras'
Re : Renommer en masse les photos avec date/heure système et exif
Quelques commentaires :
_Personnellement j'aime avoir l'heure à laquelle à été prise la photo, et ça permet d'être sur de les avoir dans l'ordre
_Tu peux utiliser exifautotran pour les tourner dans le bon sens par la même occasion
_Il y avait déja plusieurs scripts faisant la même chose, notamment un que j'ai fait, et qui a été amélioré par la suite par pmd : http://forum.ubuntu-fr.org/viewtopic.php?pid=1885502#p1885502
Celà dit c'est cool de faire des scripts comme ça, ça permet d'avoir le choix de celui qu'on préfère
Va t'faire shampouiner par le compteur_V2 en timezone[Canada/Eastern] !
Les types awesome n'ont rien à prouver. À personne.
'k bye là
Hors ligne
#8 Le 11/04/2010, à 14:30
- Fake
Re : Renommer en masse les photos avec date/heure système et exif
Sinon Pyrename et d'autres logiciels de ce genre font ça pas mal...
Mais on peut préférer faire ça a la console, c'est comme on veut...
Hors ligne
#9 Le 11/04/2010, à 15:14
- Ras'
Re : Renommer en masse les photos avec date/heure système et exif
Ben le mieux c'est d'en faire un nautilus script, pour faire ça d'un clique droit
Va t'faire shampouiner par le compteur_V2 en timezone[Canada/Eastern] !
Les types awesome n'ont rien à prouver. À personne.
'k bye là
Hors ligne
#10 Le 11/04/2010, à 15:46
- bluc
Re : Renommer en masse les photos avec date/heure système et exif
Ben le mieux c'est d'en faire un nautilus script, pour faire ça d'un clique droit
je l'ai mis en Nautilus script c'est impeccable !...
Dernière modification par bluc (Le 11/04/2010, à 22:07)
Clevo : Ubuntu 24.04 ❖ Xubuntu 24.04 ❖ Kubuntu 23.10
avec partition data commune Une fraction de seconde Multiboot
Hors ligne
#11 Le 02/01/2025, à 22:45
- poumtatalia
Re : Renommer en masse les photos avec date/heure système et exif
Bonjour,
Je me permets de réactiver ce post pour une question similaire: comment changer les dates "Access" ou "Created on" pour qu'elles prennet les dates exif "Date taken" (en masse parce que plusieurs dizaines de milliers de photos dans des centaines de repertoires!).
Preneur d'idées
Rookie abonné au LTS, en ce moment Ubuntu 24.04, mais pas moins débutant pour autant...
Hors ligne
#12 Le 07/01/2025, à 00:01
- Frankkunst
Re : Renommer en masse les photos avec date/heure système et exif
bonjour,
regarde ceci
#!/bin/bash
#
#-----------------------------------------------------------Renommage de fichier "jpeg" sur la base des données EXIF----------------------
#-----------------------------------------------------------nom : RenomJPEG-Selec - auteur : Frankkunst - version :1 - date 12/2024
#---------------------------------------------------------------------------*************-------------------------------------------------
#-------------------------------------------------------------------# Nettoyage #----------------------------------------------------------------------
printf >~/temp/data
#------------------------------------------------------------# Déclaration + Fonction #----------------------------------------------------------------------
export RESULTAT=()
#------------------------
function abandon() {
zenity --info --timeout=3 --text="Abandon de l'opération\nAucun fichier n'a été renommé\nCette fenêtre ce fermera dans 3\""; exit
}
function rnm() { ## fonction de rennommage
g=0 m=0 h=0 k=0 ## mise à zero des compteurs
for z in ${Args[@]}
do
testfil=`file -b -i "$z" | cut -d"/" -f2 | cut -d";" -f1` ; ((g++)) ## test fichier jpeg
set `exiv2 -g Exif.Photo.DateTimeOriginal "$z"` ## extraction données de datations
datefich="$4"
if [[ $testfil == "jpeg" ]] ## contrôle jpeg
then
if [[ -n $4 ]] && [[ $4 != 0000:00:00 ]] ## contrôle présence de données
then ((m++))
f=$(printf "%03d" $m) ; e=${f: -3} ## mise en forme compteur sur trois chiffres
exiv2 -r$ordre$e rename "$z" 2>/dev/null ## renommage
else printf "\"$z\" n'a pas de données de date !\n" >>fichInvalide.txt ; ((h++))
fi
else printf "\"$z\" n'est pas un fichier \"jpeg\" donc pas traité !\n" >>fichInvalide.txt ; ((k++))
fi
done
ret=([0]="$g" [1]="$m" [2]="$k" [3]="$h") ; printf '%s\n' "${ret[@]}" >>~/temp/data ## export des variables hors fonction
}
readarray -t Args <<< "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS"
nf=${#Args[*]} ; ((nf--))
#-------------------------------------------------------------------# Entrée + Choix #-------------------------------------------------------------------------------
rep=`zenity --forms --width=800 --title=" RenomJPEG - Frankli " \
--text=" Ce script utilise les données <span color=\"green\">\"exif\"</span> pour renommer les fichers .\nIl va rechercher la date originale de la prise de vue pour composer le nom de fichier .\n\nVous pouvez aussi entrer à l'invite une <span color=\"green\">\"étiquette\"</span> sous la forme d'un mot (Ceci est optionnel) .\nCe dernier sera repporté à la fin du nom de fichier\n\nPuis appuyer sur <span color=\"green\">"Valider"</span> pour continuer" \
--add-entry="Étiquette :"`
#---------------------------------------------------
if [[ $? == 1 ]] ; then abandon ; fi
#---------------------------------------------------
format=`zenity --list --height=300 --title="Choix format date" --text="Veuillez choisir entre ces formats :" --column="format de date"\
"AAAAMM"\
"AAAAMMJJ"\
"AAAAMMJJ-hhmmss"\
"MMJJ-hhmm"`
#---------------------------------------------------
if [[ $? == 1 ]] ; then abandon ; fi
##--------------------------------------------------------------------## Préparation Nom de renommage ##--------------------------------------------------------
if [[ -z $format ]] ; then format="AAAAMMJJ-hhmmss" ; fi
case $format in
AAAAMM) formDate="%Y%m" ;;
AAAAMMJJ) formDate="%Y%m%d" ;;
AAAAMMJJ-hhmmss) formDate="%Y%m%d-%H%M%S" ;;
MMJJ-hhmm) formDate="%m%d-%H%M";;
*) formDate="%Y%m%d-%H%M%S" ;;
esac
supp="$rep"
if [[ ${#rep} -ne 0 ]]
then
ordre=`echo -e ""$formDate"_"$supp"-"` ## préparation base de renommage avec ou sans complément
else
ordre=`echo -e ""$formDate"-"`
fi
##--------------------------------------------------------------------# lancement tache #-------------------------------------------------------------------------
zenity --question --text="Vous avez sélectinné $nf fichiers pour les renommer .\nIl vont être renommé sous le format :\n\n\
<span color=\"green\"> "$format"_"$rep"-000 </span> \n\n\
\nDésirez-vous continuer ?"
#----------------------------------------------------
if [[ $? == 1 ]] ; then abandon ; fi
#----------------------------------------------------
rnm | zenity --progress --pulsate --auto-close --text="veuillez patienter, renommage en cours ... "
##------------------------------------------------------------------# Affichage résultat #------------------------------------------------------------------------
for y in $(cat ~/temp/data)
do
RESULTAT+=($y)
done
zenity --info --width=900 --title="Résultat des course" \
--text="${RESULTAT[0]} fichiers du dossier :\n\n<span color=\"green\">\"$PWD\"</span>\n\nOnt été éxaminé \!\n\nDont ${RESULTAT[1]} rennomé\n\nEt ${RESULTAT[3]} ne possèdent pas de date\n\n<span color=\"red\"> ${RESULTAT[2]} fichier\\s n'ont pas été traité </span>"
FICHIER=fichInvalide.txt
if [[ -f "$FICHIER" ]] ; then zenity --text-info --width=1400 --height=300 --title="Fichier non renommé" --filename=fichInvalide.txt ; fi
rm fichInvalide.txt 2>/dev/null
exit
tu le met dans le dossier : ~/.local/share/nautilus/scripts
puis tu le rend executable , tu as maintenant un outil dispo dans nautilus click droit !
Dernière modification par Frankkunst (Le 07/01/2025, à 08:41)
C'est en forgeant que l'on devient forgerons ...
et
...petit à petit l'oiseau fait son nid !
Hors ligne
#13 Le 07/01/2025, à 00:11
- Frankkunst
Re : Renommer en masse les photos avec date/heure système et exif
Poste #12, c´était la version pour les petites selections, car le noyaux a une limitation de longueur de commande, dicussion ici
Voici la version pour traiter tout le dossier courant
#!/bin/bash
#
#-----------------------------------------------------------Renommage de fichier "jpeg" sur la base des données EXIF----------------------
#-----------------------------------------------------------nom : RenomJPEG-All - auteur : Frankkunst - version :1 - date 12/2024
#---------------------------------------------------------------------------*************-------------------------------------------------
#-------------------------------------------------------------------# Nettoyage #----------------------------------------------------------------------
printf >~/temp/data
#------------------------------------------------------------# Déclaration + Fonction #----------------------------------------------------------------------
export RESULTAT=()
#------------------------
function abandon() {
zenity --info --timeout=3 --text="Abandon de l'opération\nAucun fichier n'a été renommé\nCette fenêtre ce fermera dans 3\""; exit
}
function rnm() { ## fonction de rennommage
g=0 m=0 h=0 k=0 ## mise à zero des compteurs
for z in $(ls $PWD)
do
testfil=`file -b -i "$z" | cut -d"/" -f2 | cut -d";" -f1` ; ((g++)) ## test fichier jpeg
set `exiv2 -g Exif.Photo.DateTimeOriginal "$z"` ## extraction données de datations
datefich="$4"
if [[ $testfil == "jpeg" ]] ## contrôle jpeg
then
if [[ -n $4 ]] && [[ $4 != 0000:00:00 ]] ## contrôle présence de données
then ((m++))
f=$(printf "%03d" $m) ; e=${f: -3} ## mise en forme compteur sur trois chiffres
exiv2 -r$ordre$e rename "$z" 2>/dev/null ## renommage
else printf "\"$z\" n'a pas de données de date !\n" >>fichInvalide.txt ; ((h++))
fi
else printf "\"$z\" n'est pas un fichier \"jpeg\" donc pas traité !\n" >>fichInvalide.txt ; ((k++))
fi
done
ret=([0]="$g" [1]="$m" [2]="$k" [3]="$h") ; printf '%s\n' "${ret[@]}" >>~/temp/data ## export des variables hors fonction
}
while read ; do Args[$n]=$REPLY ; ((n++)) ; done < <(ls $pwd)
nf=${#Args[*]}
#-------------------------------------------------------------------# Entrée + Choix #-------------------------------------------------------------------------------
rep=`zenity --forms --width=800 --title=" RenomJPEG-All - Frankli " \
--text=" Ce script utilise les données <span color=\"green\">\"exif\"</span> pour renommer les fichers .\nIl va rechercher la date originale de la prise de vue pour composer le nom de fichier .\n\nVous pouvez aussi entrer à l'invite une <span color=\"green\">\"étiquette\"</span> sous la forme d'un mot (Ceci est optionnel) .\nCe dernier sera repporté à la fin du nom de fichier\n\nPuis appuyer sur <span color=\"green\">"Valider"</span> pour continuer" \
--add-entry="Étiquette :"`
#---------------------------------------------------
if [[ $? == 1 ]] ; then abandon ; fi
#---------------------------------------------------
format=`zenity --list --height=300 --title="Choix format date" --text="Veuillez choisir entre ces formats :" --column="format de date"\
"AAAAMM"\
"AAAAMMJJ"\
"AAAAMMJJ-hhmmss"\
"MMJJ-hhmm"`
#---------------------------------------------------
if [[ $? == 1 ]] ; then abandon ; fi
##--------------------------------------------------------------------## Préparation Nom de renommage ##--------------------------------------------------------
if [[ -z $format ]] ; then format="AAAAMMJJ-hhmmss" ; fi
case $format in
AAAAMM) formDate="%Y%m" ;;
AAAAMMJJ) formDate="%Y%m%d" ;;
AAAAMMJJ-hhmmss) formDate="%Y%m%d-%H%M%S" ;;
MMJJ-hhmm) formDate="%m%d-%H%M";;
*) formDate="%Y%m%d-%H%M%S" ;;
esac
supp="$rep"
if [[ ${#rep} -ne 0 ]]
then
ordre=`echo -e ""$formDate"_"$supp"-"` ## préparation base de renommage avec ou sans complément
else
ordre=`echo -e ""$formDate"-"`
fi
##--------------------------------------------------------------------# lancement tache #-------------------------------------------------------------------------
zenity --question --text="Vous avez sélectinné $nf fichiers pour les renommer .\nIl vont être renommé sous le format :\n\n\
<span color=\"green\"> "$format"_"$rep"-000 </span> \n\n\
\nDésirez-vous continuer ?"
#----------------------------------------------------
if [[ $? == 1 ]] ; then abandon ; fi
#----------------------------------------------------
file_list=* ; for z in $ $file_list ; do mv "$z" "${z// /_}" 2>/dev/null ; done
rnm | zenity --progress --pulsate --auto-close --text="veuillez patienter, renommage en cours ... "
##------------------------------------------------------------------# Affichage résultat #------------------------------------------------------------------------
for y in $(cat ~/temp/data) ; do RESULTAT+=($y) ; done
zenity --info --width=900 --title="Résultat des course" \
--text="${RESULTAT[0]} fichiers du dossier :\n\n<span color=\"green\">\"$PWD\"</span>\n\nOnt été éxaminé \!\n\nDont ${RESULTAT[1]} rennomé\n\nEt ${RESULTAT[3]} ne possèdent pas de date\n\n<span color=\"red\"> ${RESULTAT[2]} fichier\\s n'ont pas été traité </span>"
FICHIER=fichInvalide.txt
if [[ -f "$FICHIER" ]] ; then zenity --text-info --width=1400 --height=300 --title="Fichier non renommé" --filename=fichInvalide.txt ; fi
rm fichInvalide.txt 2>/dev/null
exit
meme installation, par contre il te suffit de selectionner un seul fichier pour traiter tout le repertoire
Dernière modification par Frankkunst (Le 08/01/2025, à 17:50)
C'est en forgeant que l'on devient forgerons ...
et
...petit à petit l'oiseau fait son nid !
Hors ligne
#14 Le 07/01/2025, à 00:18
- Frankkunst
Re : Renommer en masse les photos avec date/heure système et exif
je suis entrain de faire un script pour modifier les dates dans les donnees exif des fichiers jpeg
je reviens plus tard !
C'est en forgeant que l'on devient forgerons ...
et
...petit à petit l'oiseau fait son nid !
Hors ligne