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 10/12/2008, à 17:59

libre

Classer ses photos d'après la date de prise de vue (ordre Jbrout)

Utilisateur du merveilleux logiciel de gestion de photos Jbrout (je ne connais aucun autre logiciels qui lui arrive à la cheville) j'ai néanmoins du faire ce script pour en être totalement satisfait.
En effet mon but est de visualiser mes photos classées sous Jbrout, en diaporama, temporisation automatique de 7 secondes entre chaque photo et dans l'ordre de visualisation que je lui impose.

Problèmes rencontrés  
- Jbrout peut très bien visionner les photos mais il n'existe pas de temporisation automatique.
- Le classement de Jbrout se fait par date, pas très compatible avec d'autres programmes.

Solutions retenues
- Classer, dans Jbrout, les photos dans l'ordre voulu en modifiant leurs date de prise de vue.
- Lancer mon script qui renomme les photos dans l'ordre chronologique (suivant la date de prise de vue)
- Sélectionner les photos avec eye of gnome et lancer le diaporama


#!/bin/bash

############################################################################################
# Libre                                                                                    #
############################################################################################
# Ce script renomme les photos prises par un apn, et ce, suivant la date de prise de vue   #
#                                                                                          #
#                                                                                          #
# Licence : GNU / GPL                                                                      #
############################################################################################
# Ce script,                                                                               #
# -renomme les photos prises par un apn (la date de son tag devient le nouveau nom)        #
# -tri les photos suivant leurs date                                                       #
# -renomme les photos suivant un nom défini suivi d'une nouvelle numérotation              #
# Fonctionne pour une numérotation de 0001 à 9999  					   #
############################################################################################
# Dépendances                                                                              #
############################################################################################
#  - Nécessite le paquet jhead                                                             #
#  - Nécessite le paquet zenity                                                            #
#    => apt-get install imagemagick zenity                                                 #
############################################################################################
# 15/07/07 - v1.0 - Création                                                               #
# 27/07/07 - v1.1 - Réorganisation                                                         #
#                 - Choix du début de numérotation, par défaut à 1                         #
# 10/12/08 - v2.0 - Standardisation							   #
#		  - Ajout des descriptifs                                                  #
#                 - Augmentation de la numérotation juqu'a 9999         		   #		
############################################################################################
## Variables
nb_param="$#" 	 # nb de paramètres passés au script
erreur=0	 # initialisation du compteur d'erreurs à 0



## Message de confirmation
confirmation ()
{
zenity --warning --title "Confirmation" --text "Vérifier car c'est l'unique et dernière possibilité de quitter: \r\r\\t 1) que vous travaillez bien sur des copies \r\t 2) que vous avez bien sélectionné tous les\r\t     fichiers à renommer. \r\r\r\rLancer ce script sans sélection préalable de fichier pour obtenir d'autres infos utiles" --width=500 --height=500  
	if [ "$?" -eq 1 ]; then
		exit
	fi
}



## Message d'information si aucun fichier n'est sélectionné
information ()
{
if [ "$1" -eq 0 ]; then 
zenity --info --title "Pack de script APN" --text "Ce script est à utilisé uniquement pour les photos prises par un APN (le tag de ses photos contient l'heure de prises de vue) \r\rProcédure: \r\r1)  Modifier le classement de vos photos via jbrout \r      (en modifiant leurs date)\r\r2)  Sélectionner les photos \r\r3)  Lancer ce script, qui va \r\t-Trier vos photos chronologiquement \r\t-Renommer celles-çi suivant un nom commun \r\t incrémenté." --width=500 --height=500
exit 
fi
}



## Fonctions début de numérotation
numero ()
{
	var_numero=`zenity --entry \
			 --title "Début de numérotation" \
			 --entry-text="1" \
			 --text "Par défaut à 1, à modifier le cas échéant :"`
	
	if [ "$var_numero" = ""  ]; then
		var_numero="1"
	fi
	echo "$var_numero"	
}



## Fonction du choix du nom commun
nom ()
{	
	var_nom=$(zenity --entry \
	     --title "Nom personnalisé" \
	     --entry-text="NomVirtuel" \
             --text "Quel nom commun voulez-vous pour cette série de photo ?")
	if [ "$var_nom" = ""  ]; then
		var_nom="NomVirtuel"
	fi
	echo "$var_nom"
}


		
## Renommer les fichiers sélectionnées par la date de prise de vue comprise dans leurs tags
rename_date ()
{
	compteur=1
        for parametre in "$@"; # pour chaque fichier selectionné
        do 
		#Fichier actuel > old_name                
		old_name="$parametre" 

		#Date du fichier actuel (tag) > date_time 
		date_time=`jhead "$parametre" | grep 'Date/Time' | cut -d: -f2-`

		#Extension du fichier actuel > extension (ex .jpg)
                extension=`echo $parametre | awk -F "." '{print $NF}' | tr 'A-Z' 'a-z'`

		#Décompose date et heure dans différentes variables      
                aa=`echo $date_time | cut -d: -f1` 
                mm=`echo $date_time | cut -d: -f2` 
                jj=`echo $date_time | cut -d: -f3 | cut -c1-2` 
                hh=`echo $date_time | cut -d: -f3 | cut -c4-5` 
                min=`echo $date_time | cut -d: -f4` 
		sec=`echo $date_time | cut -d: -f5` 
	
                #Mise en forme de la numérotation (ajoute des 0 suivant la longueur du compteur)       
                if [ $compteur -gt 0 ] && [ $compteur -lt 10 ]; then
                        numero=00$compteur 
                fi
                if [ $compteur -gt 9 ] && [ $compteur -lt 100 ]; then 
                        numero=0$compteur 
                fi
                if [ $compteur -gt 100 ] ; then 
                        numero=$compteur 
                fi           

		#Recompose le nom du fichier (ex 2006-11-04_19.41_num.jpg)
                new_name=`echo ${aa}-${mm}-${jj}_${hh}.${min}.${sec}_${numero}.${extension}` 

		#On renomme le fichier en le copiant
                cp "$old_name" "${new_name}" 
                
		#Si la copie à réussie, message ok, supprimer le fichier original,sauvetage dans le fichier
		#Sinon message nok et incrémente le compteur d'erreur
		if [ $? = 0 ] ; then     
			echo "${old_name} => ${new_name} .... OK"
			rm -f "$old_name" 
			echo ${new_name} >> /tmp/tmp_liste_photos   	
                else
                        echo "Impossible de renommer $old_name .... NOK" 
                        let $[erreur += 1]
                fi
		
		#Incrémente le nombre de paramètre
		let $[compteur += 1] 
		
        done
        
	#Calcul le nombre de photos renommées
	nb_renomme=$(( $nb_param - $erreur ))

	#Statistiques finales
        echo "-----------------------------------------"               
        echo "Fin de traitement : $# fichiers "
        echo "-----------------------------------------"
        echo "Fichiers renommes : $nb_renomme"
        echo "Fichiers en erreur    : $erreur"
        echo "-----------------------------------------"
        echo "OK, vous pouvez fermer !"
}


#Renommer les photos d'un format Date (ex : 2006-11-04_19.41_007.jpg) par un nom personnalise (ex : Hackenberg-0007.jpg)"
rename_text ()
{


	#Récupère les variables transmises
	nom_commun=$1
	compteur=$2

	#Trier le fichier comprennant la liste des photos (renommées en format date)		
	sort /tmp/tmp_liste_photos -o /tmp/tmp_liste_photos 
		
	#Lire le fichier ligne par ligne 
	while read line
	do 
		
		if [ ${#compteur} -eq 1 ]; then			
			numero=000$compteur
		fi

		if [ ${#compteur} -eq 2 ]; then			
			numero=00$compteur
		fi

		if [ ${#compteur} -eq 3 ]; then			
			numero=0$compteur
		fi

		if [ ${#compteur} -eq 4 ]; then			
			numero=$compteur
		fi
		
		#Recompose le nom du fichier (ex essai-002)
		cp "$line" "$nom_commun-$numero.jpg"
			
		#Si la copie à réussie, message ok et supprimer le fichier original
		#Sinon message nok et incrémente le compteur d'erreur
		if [ $? = 0 ] ; then     
			echo "$line => $nom_commun-$numero .... OK"
       	                rm -f "$line" 			
       	        else 
       	                echo "Impossible de renommer $line .... NOK" 
       	                let $[erreur += 1] 
       	        fi
		
		#Incrémente le compteur
		let $[compteur += 1]

	done < /tmp/tmp_liste_photos
	
	#Calcul le nombre de photos renommées
	nb_renomme=$(( $compteur - $erreur )) 
		
	#Statistiques finales
	echo "-----------------------------------------"               
        echo "Fin de traitement : $compteur fichiers "
        echo "-----------------------------------------"
        echo "Fichiers renommes : $nb_renomme"
        echo "Fichiers en erreur    : $erreur"
        echo "-----------------------------------------"
        echo "OK, vous pouvez fermer !"

}





## Main


#Vérifie qu'il y a au moins un fichier de sélectionné
information "$#"

#Confirme le lancement du pgm
confirmation

#Variable
var_nom=$(nom)
var_numero=$(numero)

#Supression du fichier temporaire 
rm /tmp/tmp_liste_photos

#Renommer les fichiers sélectionnées avec la date de leurs prises de vue 
rename_date "$@" | zenity --text-info --title "Renommer par date exif" --width=500 --height=500

#Renommer les fichiers listés dans le fichier temporaire avec un nom personnalisé suivis d'un nombre incrémenté
rename_text "$var_nom" "$var_numero" | zenity --text-info --title "Renommer nom commun + incrément" --width=500 --height=500

La liberté signifie la responsabilité. C'est pourquoi la plupart des hommes la craignent.

Hors ligne