Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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

soupaloignon a écrit :

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 smile

Hors ligne

#5 Le 11/04/2010, à 01:10

soupaloignon

Re : Renommer en masse les photos avec date/heure système et exif

Lapogne71 a écrit :
soupaloignon a écrit :

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 smile

Et tu as eu tout à fait raison wink. 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 wink


==> Libérez les huitres du bassin d'Arcachon <==

Hors ligne

#7 Le 11/04/2010, à 14:27

Ras&#039;

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 wink
_Tu peux utiliser exifautotran pour les tourner dans le bon sens par la même occasion smile
_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 smile


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... smile

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&#039;

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 wink


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

Ras' a écrit :

Ben le mieux c'est d'en faire un nautilus script, pour faire ça d'un clique droit wink

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 wink


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