#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