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 30/04/2007, à 21:01

castor_foudroyant

[Photos] Garder des dates de fichiers synchro avec Exif

hello,

je suis un peu rigide lorsqu'il s'agit de gérer mes albums photos. Et un truc important pour moi est de garder les dates et heures des images apparaissant dans l'explorateur de fichiers en concordance avec les informations stockées dans les photos.
Pour ceux qui ne le savent pas, sur la plupart des appareils photos numériques, des metadonnées sont stockées dans les images, en particulier l'heure et la date de la photo. (pour peu qu'on ait réglé l'appareil à la bonne heure/date)

J'ai donc créé un script qui prend en entrée une photo, et qui en sortie modifie l'heure et la date système  avec les données Exif.

#!/bin/bash
# find .  -iregex ".*\.jpe?g" -exec ./exif_change_date.sh {} \;
# verifying usage
if [ "$#" = "0" -o "$1" = "-h" -o "$1" = "--help" ]; then
    echo Usage : $(basename $0) image [ image ... ]
    echo Used to provide date information for a list of images.
    exit 1
fi

# loop that enables the treatment of a list of images
for i in "$@"; do
    # verifying file
    if [ -f "$i" ]; then
nom_du_fichier="$i"
type_du_fichier=`file "$nom_du_fichier" | awk -F":" '{print $2}'`
type_du_fichier=`echo "$type_du_fichier" | awk -F" " '{print $1}'`
echo Type de fichier $type_du_fichier
if [ $type_du_fichier == "JPEG" ]; then
 image="oui"
else
 image="non"
fi

if [ $image == "oui" ]; then
   date_exif=$(identify -format "%[EXIF:DateTime]" "$nom_du_fichier")
   date_modif=$(ls -lh "$nom_du_fichier" | awk -F" " '{print $6 " " $7}')
   date_exif2=`echo $date_exif | awk '{print substr($1,3,2) substr($1,6,2) substr($1,9,2) "-" substr($2,1,2) substr($2,4,2)}'`
   date_modif2=`echo $date_modif | awk '{print substr($1,3,2) substr($1,6,2) substr($1,9,2) "-" substr($2,1,2) substr($2,4,2)}'`
   echo nom de fichier $nom_du_fichier
   echo date Exif $date_exif $date_exif2
   echo date modif $date_modif $date_modif2
if [ $date_exif2 != $date_modif2 ]; then
        date_touch=`echo $date_exif2 | awk -F"-" '{print $1 $2}'`
        echo Les dates sont differentes !!! $date_touch
        touch -t $date_touch "$nom_du_fichier"
fi
   echo
fi

    else
        echo "$i" : file does not exist
    fi
done

Et si je veux modifier les photos du répertoire ~/temp :

gui@ubuntu:~/applis_to_install/exif$ find ~/temp  -iregex ".*\.jpe?g" -exec ./exif_change_date.sh {} \;
Type de fichier JPEG
nom de fichier /home/gui/temp/IMG_1978.jpg
date Exif 2007:02:03 19:49:09. 070203-1949
date modif 2007-04-30 21:58 070430-2158
Les dates sont differentes !!! 0702031949

Type de fichier JPEG
nom de fichier /home/gui/temp/IMG_1983.jpg
date Exif 2007:02:03 19:53:30. 070203-1953
date modif 2007-04-30 21:58 070430-2158
Les dates sont differentes !!! 0702031953

Bien sûr, si je relance la même commande:

gui@ubuntu:~/applis_to_install/exif$ find ~/temp  -iregex ".*\.jpe?g" -exec ./exif_change_date.sh {} \;
Type de fichier JPEG
nom de fichier /home/gui/temp/IMG_1978.jpg
date Exif 2007:02:03 19:49:09. 070203-1949
date modif 2007-02-03 19:49 070203-1949

Type de fichier JPEG
nom de fichier /home/gui/temp/IMG_1983.jpg
date Exif 2007:02:03 19:53:30. 070203-1953
date modif 2007-02-03 19:53 070203-1953

Il ne se passe rien parce que les fichiers ont déjà été corrigés.

Hors ligne

#2 Le 30/04/2007, à 21:04

castor_foudroyant

Re : [Photos] Garder des dates de fichiers synchro avec Exif

De plus, lorsqu'une image ne contient pas d'info Exif (exemple, une image scannée). Je ne me laisse pas faire et je viens écrire les informations Exif Heure et Date sur cette image grâce au programme mapivi. Je ne pense pas que mapivi soit dispo en dépôt.

Hors ligne

#3 Le 03/05/2007, à 15:39

Maxoubidou

Re : [Photos] Garder des dates de fichiers synchro avec Exif

tres interessant tout çà! et pour un Nebby pourrais tu expliquer brievement quoi faire avec le code? je suppose le copier et le coller dans un fichier mais surement qu'ensuite il y a une manip Linuxienne pour activer tout çà....

Merci d'avance.

Hors ligne

#4 Le 03/05/2007, à 18:29

castor_foudroyant

Re : [Photos] Garder des dates de fichiers synchro avec Exif

oui c'est vrai qu'on oublie parfois l'essentiel.

Il faut en effet sauver le code du script dans un fichier, chez moi j'ai appelé ce fichier exif_change_date.sh.
Ensuite il faut pouvoir executer ce fichier donc en ligne de commande, dans le répertoire contenant le script:

chmod +x exif_change_date.sh

Et après pour l'utiliser:

find ~/temp  -iregex ".*\.jpe?g" -exec ./exif_change_date.sh {} \;

Pour mettre à jour toutes les images dans ~/temp

Hors ligne

#5 Le 09/04/2013, à 10:06

Isaric

Re : [Photos] Garder des dates de fichiers synchro avec Exif

mapivi est disponible dans les dépôts, mais il est pas en français et difficile (pour moi) à prendre en main sad
Aussi j'ai l'impression qu'il ne détecte pas une image nommé "Forêt-" pourtant il crée l'image thumb...
Je bloque sur la synchronisation des dates et heures...


"Être bahá'í signifie simplement aimer la terre toute entière, aimer l'humanité et essayer de la servir, travailler pour la paix universelle et la famille humaine" 'Abdul'l-Bahá
"Vouloir s'ouvrir aux autres n'est pas une preuve de faiblesse, c'est une preuve d'intelligence"  Matthieu Ricard.

Hors ligne

#6 Le 31/10/2015, à 10:57

serged

Re : [Photos] Garder des dates de fichiers synchro avec Exif

Petit détail :
Avec un de mes appareils (Smartphone ZTE OpenC), la date n'est pas dans DateTime mais dans DateTimeOriginal.

Donc j'ai modifé ton script :
Remplacer la ligne :

   date_exif=$(identify -format "%[EXIF:DateTime]" "$nom_du_fichier")

par :

   date_exif=$(identify -format "%[EXIF:DateTime]" "$nom_du_fichier")
   if [ "$date_exif" == "" ] ; then
     date_exif=$(identify -format "%[EXIF:DateTimeOriginal]" "$nom_du_fichier")
   fi

LinuxMint Vera Cinnamon et d'autres machines en MATE, XFCE... 20.x , 21.x ou 19.x
Tour : Asus F2A55 / AMD A8-5600K APU 3,6GHz / RAM 16Go / Nvidia GeForce GT610 / LM21.1 Cinnamon
Portable : LDLC Mercure MH : Celeron N3450 /RAM 4Go / Intel HD graphics 500 i915 / biboot Win 10 (sur SSD) - LM21.1 MATE (sur HDD)

Hors ligne

#7 Le 31/10/2015, à 14:58

erresse

Re : [Photos] Garder des dates de fichiers synchro avec Exif

Bonjour,

Je n'ai encore pas pris le temps de faire une page de doc pour ce script, mais... essayez donc "Omnimages" pour tripatouiller vos fichiers de photos !
Je vous mets le script ici, vous pouvez le copier et l'exécuter pour vous faire une opinion...

Note : Pour son fonctionnement, Omnimages a besoin de quelques programmes complémentaires. Ils sont indiqués dans l'en-tête du script : zenity, jhead, exiv2, imagemagick, libimage-exiftool-perl, rsync. Vérifier que ces applications sont installées sur votre système.

#!/bin/bash

####################################################################################
#
# OmnImages - Utilitaires divers de traitement des fichiers d'image -
# Permet de travailler sur des fichiers d'image, et notamment sur des photos venant
# d'APN (Opérations : renommer, classer, redimensionner, dater, etc...)
# OmnImages reprend les fonctionalités de MultiScript, mais est entièrement réécrit
#
# Dépendances :
# zenity jhead exiv2 imagemagick libimage-exiftool-perl rsync
#
# Version :
# 0.1.0 2015/04/14
#
# Utilisation :
# Avec le navigateur de fichiers, se placer dans le répertoire contenant les photos
# à traiter, sélectionner les photos puis lancer le script par un clic droit sur la
# sélection et choix du script OmnImages dans la liste des scripts.
# Le script va travailler sur les images sélectionnées contenues dans le répertoire
# (et uniquement dans le répertoire, il n'est pas récursif, c'est voulu).
#
# Le script travaille beaucoup sur les données exif des photos JPEG, donc, malgré
# les contrôles qu'il effectue, si ces données ne sont pas cohérentes le résultat
# final pourra être incorrect ;)
#
# En fonction du volume de fichiers à traiter et des traitements exécutés, nombre
# d'opérations peuvent durer assez longtemps... Soyez patients, ça tourne !
#
# Prenez l'habitude de tester vos manips sur des copies de fichiers, avant de les
# exécuter sur les données réelles du répertoire, afin d'éviter de les perdre...
#
# Le fil de discussion sur le forum d'Ubuntu fr : 
# http://forum.ubuntu-fr.org/viewtopic.php?pid=3371321
#
# L'historique du script :
# http://soupaloignon.net/web/articles/articles.php?id=28&cat=3
#
# Testé sous Ubuntu-Mate 14.04 (Trusty)
#
# Référence : MultiScript de www.soupaloignon.net
# Auteur de cette réécriture : erresse (sur le forum d'Ubuntu fr)
#
####################################################################################

VERSION="0.1.0"

## On déclare les fonctions ##

# Variables typées pour conversion upper/lower
typeset -l MINUSCULE
typeset -u MAJUSCULE

# On vérifie que le fichier sélectionné soit bien une image
# valide en fonction du type d'opération demandé
function verif_type()
{
	TYPE_MIME=$(file -bi "${1}")
	TYPE="${TYPE_MIME%;*}"
	if [ "${TYPE%/*}" != "image" ]; then
		zenity --warning --title "OmnImages (v ${VERSION})" --text "${1}
Ceci ne semble pas être un fichier d'image
Il est exclu du traitement"
		return 1
	elif [[ "${2}" != "" && "${TYPE#*/}" != "jpeg" ]]; then
		zenity --warning --title "OmnImages (v ${VERSION})" --text "${1}
Ce fichier n'est pas une image JPEG
Il est exclu du traitement"
		return 1
	elif [[ "${2}" = "exif" && $(exiv2 -g Exif.Image.DateTime -pt "${1}") = "" ]]; then
		zenity --warning --title "OmnImages (v ${VERSION})" --text "${1}
Ce fichier JPEG ne contient pas d'en-tête EXIF
Il est exclu du traitement"
		return 1
	else
		return 0
	fi
}

# On acquiert la date
function saisie_date()
{
# Note: Exif nécessite le format "%Y:%m:%d" au lieu du standard "%F"<=>"%Y-%m-%d"
JOUR=$(zenity --calendar --title "Date" --text "Choisissez une date s.v.p" --date-format "%Y:%m:%d")
if ! [ "$?" = 0 ]; then JOUR=$(date +"%Y:%m:%d"); fi	# date du jour par défaut
}

# On acquiert l'heure
function saisie_heure()
{
HEURE=$(zenity --list --radiolist --title "Heure" --text "Choisissez l'heure de début s.v.p" --column="" --column="Heure" TRUE 00:00:00 FALSE 01:00:00 FALSE 02:00:00 FALSE 03:00:00 FALSE 04:00:00 FALSE 05:00:00 FALSE 06:00:00 FALSE 07:00:00 FALSE 08:00:00 FALSE 09:00:00 FALSE 10:00:00 FALSE 11:00:00 FALSE 12:00:00 FALSE 13:00:00 FALSE 14:00:00 FALSE 15:00:00 FALSE 16:00:00 FALSE 17:00:00 FALSE 18:00:00 FALSE 19:00:00 FALSE 20:00:00 FALSE 21:00:00 FALSE 22:00:00 FALSE 23:00:00)
if ! [ "$?" = 0 ]; then HEURE="00:00:00"; fi	# zéro heure par défaut
}

# On acquiert le délai
function saisie_delai()
{
TEMPS=$(zenity --entry --title="Délai" --entry-text="" --text="Avancer ou reculer de Heures:Minutes:Secondes\nEntrez d'abord le symbole + ou - (pour ajouter ou retirer du temps) puis les valeurs de temps :\n\n+10 ajoutera 10 heures, -10 retirera 10 heures\n+00:10 ajoutera 10 minutes, -00:10 retirera 10 minutes\n+00:00:10 ajoutera 10 secondes, -00:00:10 retirera 10 secondes\n\nAttention à bien mettre le \":\" (sans les guillements) entre les valeurs si nécessaire")
if ! [ "$?" = 0 ]; then TEMPS="+00:00:00"; fi	# délai nul par défaut
if ! [[ "${TEMPS::1}" = [-+] ]]; then TEMPS="+${TEMPS}"; fi	# si non précisé -> avancer
}

# On choisit sur quoi portera le changement de casse
function saisie_casse()
{
QUOI=$(zenity --list --radiolist --title "Changer la casse" --text "Choisissez quelle partie du nom sera modifiée" --height "280" --column="" --column="Étendue" --column="Code" --hide-column="3" --print-column="3" TRUE "Le suffixe seul en minuscules" SL FALSE "Le suffixe seul en majuscules" SU FALSE "Le nom racine seul en minuscules" RL FALSE "Le nom racine seul en majuscules" RU FALSE "Le nom complet en minuscules" NL FALSE "Le nom complet en majuscules" NU)
if ! [ "$?" = 0 ]; then QUOI=""; fi	# nul si l'opération est annulée
}

# On compose le texte changer le du nom du fichier
function saisie_masque()
{
MASQUE=$(zenity --entry --width=500 --height=150 --title="Changer le nom de fichier" --entry-text="" --text="Entrer la formule pour composer le nouveau nom de chaque fichier :\n\n& = Insérer le nom actuel du fichier à cette position\n% = Ajouter un compteur (un % par chiffre) à cette position\nXyz = Ajouter un intitulé fixe à cette position\n\nExemple : orig.jpg + ABC&DE%%YZ ==> ABCorigDE01YZ.jpg\nNote: On ne peut ajouter qu'un compteur et n'insérer qu'une fois le nom actuel.")
if ! [ "$?" = 0 ]; then MASQUE=""; fi	# nul si l'opération est annulée
}

# On acquiert le choix du (des) fichier(s) à générer
function saisie_genere()
{
DURPDF=$(( 12 * ${#SELECTION[@]} / 60 ))
DURJPG=$(( 30 * ${#SELECTION[@]} / 60 ))
GENERE=($(zenity --list --checklist --title "Générer un pêle-mêle" --text "Vous pouvez générer un fichier PDF, une planche de contact, ou les deux.\n** Attention: Ces opérations sont très gourmandes en ressources!\n\nLe fichier .pdf généré sera optimisé, avec des photos au format 800x600\n** Cette génération prendra environ ${DURPDF} minutes...\nLa planche de contact sera un fichier .jpg (7 rangées de 6 miniatures)\n** Cette génération prendra environ ${DURJPG} minutes..." --column="" --column="Fichier à générer" --column="Code" --hide-column="3" --print-column="3" --hide-header --separator "${IFS}" FALSE "Générer un fichier PDF" P FALSE "Générer une planche de contact JPG" J))
if ! [ "$?" = 0 ]; then GENERE=""; fi	# nul si l'opération est annulée
}

# On acquiert la dimension choisie pour le redimensionnement
function saisie_taille()
{
TAILLE=$(zenity --entry --title="Redimensionner les images" --entry-text="50%" --text="Saisir la dimension ou le pourcentage désiré\nExemples :\nRéduire de moitié -> 50%\nLargeur imposée -> 1234\nHauteur imposée -> x1234\nTaille absolue -> 1234x1234!\n\nQuelques formats photo standard :\nCm        Pxl\n11x15 1345x1794\n15x20 1794x2384\n20x27 2396x3198")
if ! [ "$?" = 0 ]; then TAILLE=""; fi	# nul si l'opération est annulée
}

# On acquiert le taux de compression à appliquer
function saisie_taux()
{
while true; do
TAUX=$(zenity --entry --title="Changer la compression" --entry-text="80" --text="Saisir le nouveau taux de compression des photos\n\nLa valeur est un pourcentage compris entre 10 et 90")
if ! [ "$?" = 0 ]; then TAUX="" && break; fi	# nul si l'opération est annulée
if [[ ${TAUX} -gt 9 && ${TAUX} -lt 91 ]]; then break; fi	# le taux est correct
done
}

# On acquiert le type-mime de sortie de la conversion
function saisie_mime()
{
MIME=$(zenity --list --radiolist --title "Convertir" --text "Choisissez le type d'image à produire s.v.p" --height "245" --width "370" --column="" --column="Nature de l'image" --column="Type-mime" --print-column="3" TRUE "Image JPEG (photo d'un APN)" jpeg FALSE "Image PNG (copie d'écran)" png FALSE "Image GIF (icône, animation)" gif FALSE "Image TIFF (issue d'un scanner)" tiff FALSE "Image BMP (dessin de Paint)" bmp)
if ! [ "$?" = 0 ]; then MIME=""; fi	# nul si l'opération est annulée
}

# On crée un EXIF de base pour la photo, avec vignette, date et heure
function cree_exif()
{
	jhead -mkexif -rgt -ts"${JOUR}-${HEURE}" "${1}"
	exiv2 -M"set Exif.Photo.DateTimeDigitized ${JOUR} ${HEURE}" -M"set Exif.Image.Make unknown" "${1}"
}

# On change l'horodatage de la photo
function change_horodatage()
{
	exiv2 -M"set Exif.Image.DateTime ${JOUR} ${HEURE}" -M"set Exif.Photo.DateTimeOriginal ${JOUR} ${HEURE}" -M"set Exif.Photo.DateTimeDigitized ${JOUR} ${HEURE}" "${1}"
}

# On change la date de la photo sans modifier l'heure
function change_date()
{
	jhead -ds"${JOUR}" "${1}"
}

# On (re)construit la vignette de la photo
function genere_vignette()
{
	jhead -rgt "${1}"
}

# On effectue le changement de casse de la partie concernée
function change_casse()
{
	MINUSCULE="${1}"; MAJUSCULE="${1}"
	if [[ "${QUOI}" == [RS][LU] ]]; then
		if ! [[ "${1}" =~ "." ]]; then
			zenity --warning --title "OmnImages (v ${VERSION})" --text "${1}
Ce nom de fichier n'a pas de suffixe
Il est exclu du traitement"
			return 1
		fi
	fi
	case "${QUOI}" in
		SL) mv "${1}" "${1%.*}.${MINUSCULE#*.}";;
		SU) mv "${1}" "${1%.*}.${MAJUSCULE#*.}";;
		RL) mv "${1}" "${MINUSCULE%.*}.${1#*.}";;
		RU) mv "${1}" "${MAJUSCULE%.*}.${1#*.}";;
		NL) mv "${1}" "${MINUSCULE}";;
		NU) mv "${1}" "${MAJUSCULE}";;
		*)	go_plantage
	esac
}

# On effectue le changement de nom du fichier
function change_nom()
{
	if [[ "${1}" =~ "." ]]; then
		ORI="${1%.*}" && SFX=".${1#*.}"	# récupère le nom racine et le suffixe
	else
		ORI="${1}" && SFX=""			# il n'y a pas de suffixe -> champ=vide
	fi
	NOM="${MASQUE//&/${ORI}}${SFX}"
	NOM="${NOM//${CTRMSK}/$(printf "%0"${CTRLNG}"d" ${COMPTEUR})}"
	mv "${1}" "${NOM}"
	((COMPTEUR++))
}

# On génère un fichier pdf
function genere_pdf()
{
	BAKIFS="${IFS}" && IFS=$'\n'
	convert -compress jpeg -quality 80 -resize '800x600^' $(cat /tmp/liste_fichiers) '00-mes-photos.pdf'
	IFS="${BAKIFS}"
}

# On génère une planche de contact
function genere_contact()
{
	BAKIFS="${IFS}" && IFS=$'\n'
	montage -label '%f' $(cat /tmp/liste_fichiers) -tile 6x7 '00-planche-contact.jpg'
	IFS="${BAKIFS}"
}

# On a demandé l'annulation de l'opération, le traitement est abandonné
function abandon()
{
	zenity --warning --title "OmnImages (v ${VERSION})" --text "Cette opération a été annulée
Le traitement est abandonné"
	exit 1
}

# On a détecté une erreur inattendue, le traitement est abandonné
function go_plantage()
{
	zenity --error --title "OmnImages (v ${VERSION})" --text "Une erreur inattendue s'est produite !
Le traitement est abandonné"
	exit 1
}

# On affiche la fenêtre d'attente pour faire patienter
function patienter()
{
	zenity --progress --title "OmnImages (v ${VERSION})" --text="Exécution en cours. Patientez s.v.p..." --auto-close --pulsate --no-cancel
}

# On récupère la liste des fichiers sélectionnés dans un tableau
SELECTION=("${@}")

# On affiche la fenêtre principale pour choisir l'opération
CHOIX=$(zenity --list --radiolist --title "OmnImages (v ${VERSION})" --text "Choisissez une opération à effectuer sur les photos sélectionnées" --height "465" --ok-label "Valider" --cancel-label "Quitter" --column="" --column="Opération" --column="Code" --hide-column="3" --print-column="3" TRUE "[Exif-jpeg] - Classer les photos en dossiers datés" J1 FALSE "[Exif-jpeg] - Cloner en effaçant TOUTE métadonnée" J2 FALSE "[Exif-jpeg] - Nommer chronologiquement par date" J3 FALSE "[Type-jpeg] - Créer un en-tête Exif (date et vignette)" J4 FALSE "[Exif-jpeg] - Changer la date et l'horodatage Exif" J5 FALSE "[Exif-jpeg] - Changer la date Exif uniquement" J6 FALSE "[Exif-jpeg] - (In/Dé)crémenter l'horodatage Exif" J7 FALSE "[Exif-jpeg] - Générer la vignette de l'en-tête Exif" J8 FALSE "[Exif-jpeg] - Afficher les champs date et heure Exif" J9 FALSE "[Type-jpeg] - Cloner en changeant le taux de compression" J10 FALSE "[Tout-type] - Changer la casse du nom de fichier" T1 FALSE "[Tout-type] - Changer ou modifier le nom de fichier" T2 FALSE "[Type-image] - Générer un pêle-mêle PDF ou JPG" T3 FALSE "[Type-image] - Cloner en redimensionnant les images" T4 FALSE "[Type-image] - Cloner en convertissant le type d'image" T5)

# Le bouton "Quitter" a été cliqué, on sort du script
if ! [ "$?" = 0 ]; then exit 0; fi

# Si l'opération nécessite une préparation, on l'effectue préalablement
case "${CHOIX}" in
	J1 | J2 | J3 | J8)	# Pas de préalable pour ces opérations
		: ;;
	J4 | J5)	saisie_date; saisie_heure
		# On convertit date / heure en timestamp (format "%Y:%m:%d" => "%Y-%m-%d")
		TEMPS=$(date -d "${JOUR//:/-} ${HEURE}" +"%s");;
	J6)	saisie_date;;
	J7)	saisie_delai
		if [ $(date -d "1970-01-01 ${TEMPS:1}" +%s) = -3600 ]; then
			zenity --warning --title "OmnImages (v ${VERSION})" --text "Le délai est nul !
Cette opération serait sans effet
Le traitement est abandonné"
			exit 1
		fi;;
	J9)	# Supprimer un ancien fichier éventuel
		rm /tmp/liste_date 2> /dev/null;;
	J10) saisie_taux
		if [ "${TAUX}" = "" ]; then abandon; fi;;
	T1) saisie_casse
		if [ "${QUOI}" = "" ]; then abandon; fi;;
	T2) saisie_masque
		if [ "${MASQUE}" = "" ]; then abandon; fi
		CTRMSK="${MASQUE//[^%]/}"; CTRLNG=${#CTRMSK}; COMPTEUR=1;;
	T3) saisie_genere
		if [ "${GENERE}" = "" ]; then abandon; fi
		# Supprimer un ancien fichier éventuel
		rm /tmp/liste_fichiers 2> /dev/null;;
	T4) saisie_taille
		if [ "${TAILLE}" = "" ]; then abandon; fi;;
	T5) saisie_mime
		if [ "${MIME}" = "" ]; then abandon; fi;;
	*)	go_plantage;;
esac

# On encapsule le traitement pour utiliser zenity --progress
(
# On boucle sur les fichiers de la sélection
for FICHIER in "${SELECTION[@]}"
do
	# On lance l'opération correspondant au choix qui a été fait
	case "${CHOIX}" in
		J1) verif_type "${FICHIER}" "exif"
			if [ ${?} = 0 ]; then
				exiftool "${FICHIER}" '-FileName<${DateTimeOriginal}' -d "%Y-%m-%d/"
			fi;;
		J2) verif_type "${FICHIER}" "jpeg"
			if [ ${?} = 0 ]; then
				# On crée un sous-répertoire et on y copie les fichiers
				rsync "${FICHIER}" ./Sans_EXIF/
				exiv2 -d a ./Sans_EXIF/"${FICHIER}"
			fi;;
		J3) verif_type "${FICHIER}" "exif"
			if [ ${?} = 0 ]; then
				exiv2 -r p%Y%m%d_%H%M%S mv "${FICHIER}"
			fi;;
		J4) verif_type "${FICHIER}" "jpeg"
			if [ ${?} = 0 ]; then
				cree_exif "${FICHIER}"
				TEMPS=$((${TEMPS} + 60)) # On ajoute un écart d'1 minute entre les photos
				JOUR=$(date -d @${TEMPS} +"%Y:%m:%d")
				HEURE=$(date -d @${TEMPS} +"%X")
			fi;;
		J5) verif_type "${FICHIER}" "exif"
			if [ ${?} = 0 ]; then
				change_horodatage "${FICHIER}"
				TEMPS=$((${TEMPS} + 60)) # On ajoute un écart d'1 minute entre les photos
				JOUR=$(date -d @${TEMPS} +"%Y:%m:%d")
				HEURE=$(date -d @${TEMPS} +"%X")
			fi;;
		J6) verif_type "${FICHIER}" "exif"
			if [ ${?} = 0 ]; then
				change_date "${FICHIER}"
			fi;;
		J7) verif_type "${FICHIER}" "exif"
			if [ ${?} = 0 ]; then
				jhead -ta"${TEMPS}" "${FICHIER}"
			fi;;
		J8) verif_type "${FICHIER}" "exif"
			if [ ${?} = 0 ]; then
				genere_vignette "${FICHIER}"
			fi;;
		J9) verif_type "${FICHIER}" "exif"
			if [ ${?} = 0 ]; then
				echo "==========>  ${FICHIER} :" >> /tmp/liste_date
				exiv2 -g"Exif.Image.DateTime" -g"Exif.Photo.DateTimeOriginal" -g"Exif.Photo.DateTimeDigitized" -Plt pr "${FICHIER}" >> /tmp/liste_date
			fi;;
		J10) verif_type "${FICHIER}" "jpeg"
			if [ ${?} = 0 ]; then
				# On crée un sous-répertoire et on y copie les fichiers
				rsync "${FICHIER}" "./Compress_${TAUX}/"
				mogrify -quality ${TAUX} "./Compress_${TAUX}/${FICHIER}"
			fi;;
		T1) [[ -f "${FICHIER}" ]] && change_casse "${FICHIER}";;
		T2) [[ -f "${FICHIER}" ]] && change_nom "${FICHIER}";;
		T3) verif_type "${FICHIER}" ""
			# On ne retient que les fichiers "image" pour la liste
			if [ ${?} = 0 ]; then
				echo "${FICHIER}" >> /tmp/liste_fichiers
			fi;;
		T4) verif_type "${FICHIER}" ""
			if [ ${?} = 0 ]; then
				# On crée un sous-répertoire et on y copie les fichiers
				rsync "${FICHIER}" "./Taille_${TAILLE}/"
				mogrify -resize "${TAILLE}" "./Taille_${TAILLE}/${FICHIER}"
			fi;;
		T5) verif_type "${FICHIER}" ""
			if [[ ${?} = 0 && "${TYPE#*/}" != "${MIME}" ]]; then
				# On crée un sous-répertoire et on y copie les fichiers
				rsync "${FICHIER}" "./Convert_${MIME}/"
				mv "./Convert_${MIME}/${FICHIER}" "./Convert_${MIME}/${FICHIER%.*}.${MIME}"
				mogrify -format "${MIME}" "./Convert_${MIME}/${FICHIER%.*}.${MIME}"
			fi;;
		*)	go_plantage;;
	esac
done
) | patienter

# Si une liste des dates a été créée (opération J9), on l'affiche
if [ "${CHOIX}" = "J9" ]; then
	! [ -f /tmp/liste_date ] && echo "Aucun fichier ne contenait de date Exif..." > /tmp/liste_date
	zenity --text-info --title "Liste des dates Exif" --width=700 --height=500 --filename "/tmp/liste_date"
fi

# Si une liste de fichiers a été créee (opération T3), on exécute l'opération
if [ "${CHOIX}" = "T3" ]; then
	if	! [ -f /tmp/liste_fichiers ]; then
		zenity --warning --title "OmnImages (v ${VERSION})" --text "Aucune image n'a été retenue !
Cette opération serait sans effet
Le traitement est abandonné"
		exit 1
	fi
	for TYPGEN in "${GENERE[@]}"
	do
		case "${TYPGEN}" in
			P)	genere_pdf | zenity --progress --title "Génération fichier PDF" --text="Exécution en cours. Patientez s.v.p..." --auto-close --pulsate --no-cancel;;
			J)	genere_contact | zenity --progress --title "Génération planche contact" --text="Exécution en cours. Patientez s.v.p..." --auto-close --pulsate --no-cancel;;
			*)	go_plantage;;
		esac
	done
fi

exit 0

Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois résolu, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

Hors ligne

#8 Le 29/05/2016, à 21:00

Arnaud04

Re : [Photos] Garder des dates de fichiers synchro avec Exif

Bonjour,

Je cherche à faire l'inverse.

C'est à dire régler la date / heure Exif à partir de la date / heure système.

Car en important mes 21000 photos dans Shotwell, environ 1200 photos n'ont pas pu être rangées dans les dossiers chronologoiques cas elles n'ont pas de Date / Time dans les données Exif. Curieux d'ailleurs mais passons.

Donc, est-ce que je peux faire ça ?

Merci

Hors ligne

#9 Le 30/05/2016, à 07:07

serged

Re : [Photos] Garder des dates de fichiers synchro avec Exif

Arnaud04 a écrit :

Bonjour,

Je cherche à faire l'inverse.

C'est à dire régler la date / heure Exif à partir de la date / heure système.

Car en important mes 21000 photos dans Shotwell, environ 1200 photos n'ont pas pu être rangées dans les dossiers chronologoiques cas elles n'ont pas de Date / Time dans les données Exif. Curieux d'ailleurs mais passons.

Donc, est-ce que je peux faire ça ?

Merci

La commande exiv2 devrait faire ton bonheur...


LinuxMint Vera Cinnamon et d'autres machines en MATE, XFCE... 20.x , 21.x ou 19.x
Tour : Asus F2A55 / AMD A8-5600K APU 3,6GHz / RAM 16Go / Nvidia GeForce GT610 / LM21.1 Cinnamon
Portable : LDLC Mercure MH : Celeron N3450 /RAM 4Go / Intel HD graphics 500 i915 / biboot Win 10 (sur SSD) - LM21.1 MATE (sur HDD)

Hors ligne

#10 Le 30/05/2016, à 10:01

erresse

Re : [Photos] Garder des dates de fichiers synchro avec Exif

Arnaud04 a écrit :

Bonjour,

Je cherche à faire l'inverse.

C'est à dire régler la date / heure Exif à partir de la date / heure système.

Car en important mes 21000 photos dans Shotwell, environ 1200 photos n'ont pas pu être rangées dans les dossiers chronologoiques cas elles n'ont pas de Date / Time dans les données Exif. Curieux d'ailleurs mais passons.

Donc, est-ce que je peux faire ça ?

Merci

Bonjour,

Ont-elles bien une en-tête Exif ? Vérifie-le car, même des fichiers jpeg peuvent ne pas avoir d'en-tête.
Si ce n'est pas le cas, tu peux créer cette en-tête avec "jhead" et y mettre les dates/heures que tu veux.


Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois résolu, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

Hors ligne

#11 Le 30/05/2016, à 10:41

MicP

Re : [Photos] Garder des dates de fichiers synchro avec Exif

Bonjour

Une petite remarque en passant :

Changer la date/heure des photos par l'heure système est dommage car il est fort possible que le décalage soit constant pour toutes la série de photos,
et il suffirait d'avoir photographié une horloge à l'heure pour calculer le décalage à appliquer sur la photo et retrouver les dates/heures réelles des autres.

@erresse Ça serait peut-être une fonctionnalité intéressante à ajouter (si elle n'y est pas déjà pour une série d'images) à Omnimages

Dernière modification par MicP (Le 30/05/2016, à 10:51)

Hors ligne

#12 Le 30/05/2016, à 13:59

erresse

Re : [Photos] Garder des dates de fichiers synchro avec Exif

Hello,

Voici le menu de ce que Omnimages peut faire :
Omnimages
Tu peux voir que plusieurs possibilités de jouer sur les dates et heures de prise de vue sont prévues.
Toutefois, je ne vois pas comment calculer un écart ou un horodatage à partir de la photo d'une horloge ???


Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois résolu, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

Hors ligne

#13 Le 05/06/2016, à 12:37

MicP

Re : [Photos] Garder des dates de fichiers synchro avec Exif

je ne vois pas comment calculer un écart ou un horodatage à partir de la photo d'une horloge

À partir du moment où une image de la série représente le texte d'une heure exacte,
il est facile de lire la date/heure réelle qui est affichée par cette image et de calculer le décalage horaire qu'il faudra appliquer (par un script) à chaque fichier de la série de photos.

Bien sûr, si l'horloge de l'appareil photo n'a pas été remise à zéro (par exemple par changement des piles…)

Dernière modification par MicP (Le 05/06/2016, à 12:45)

Hors ligne

#14 Le 18/02/2023, à 16:35

marc_ch

Re : [Photos] Garder des dates de fichiers synchro avec Exif

Bonjour à tous,
Je souhaiterais ajouter la date Exif avant le nom du fichier, certains fichiers ayant déjà été renommés.
J'ai déjà trouvé :

exiftool '-filename<DateTimeOriginal' -d %Y-%m-%d_%H-%M%%lc.%%e RépertoirePhotos -r -ext jpg

Comment ajouter le nom d'origine du fichier après la date Exif ?
Merci

Hors ligne