Taltan.blog.bkp

Keyword - exif_photos_rename

Fil des billets - Fil des commentaires

jeudi, juillet 10 2008

Mise à jour script exif_photos_rename_1.2, renommer les photos selon les données EXIF

En cette période de congés estivales, j'ai pu me replonger dans ce script que je voulais mettre à jour depuis un petit moment. Il permet de renommer massivement (via les nautilus-scripts) une série de photos selon les données EXIF sous la forme 20061104_19.41_007.jpg, les 3 derniers digits (ici *007*) étant un compteur qui s'incrémente.

La première modification concerne l'utilisation de l'utilitaire exiftool en lieu et place de imagemagick qui posait souci avec Ubuntu 8.04 LTS Hardy Heron. En effet avec la version native Hardy de imagemagick certaines commandes ne fonctionnaient plus, notamment la commande identify -format "%[EXIF:DateTime] qui retournait une ligne vide (voir le nota bene 3 à la fin de ce post). En outre je trouve que le traitement du script est plus rapide avec exiftool...

La deuxième modification concerne l'affichage d'une boite de dialogue qui permet de suivre l'état d'avancement du traitement en pourcentage, bien plus clean que le déroulement du script dans la fenêtre zenity...

Dépendances :

$ sudo apt-get install libimage-exiftool-perl zenity

Script exif_photos_rename_v1.2.sh :

  • 09/07/08 - v1.2
    • Remplacement de imagemagick par exiftool pour le traitement
    • Ajout boîte de dialogue de barre de progression en pourcentage
  • 15/07/07 - v1.0
    • Création
#!/bin/bash
############################################################################################
# Taltan - http://www.taltan.fr - ola.taltan_AT_laposte.net                                #
############################################################################################
# Script exif_photos_rename_v1.2.sh                                                        #
# Licence : GNU / GPL                                                                      #
############################################################################################
# Renomme les photos selon les données EXIF sous la forme :                                #
# ${aa}-${mm}-${jj}_${hh}.${min}_${numero}.ext  => ex : 20061104_19.41_007.jpg             #
# Fonctionne pour une numérotation de 001 à 999                                            #
############################################################################################
# Dépendances                                                                              #
############################################################################################
#  - Nécessite le paquet exiftool : http://www.sno.phy.queensu.ca/~phil/exiftool/          #
#  - Nécessite le paquet zenity : http://library.gnome.org/users/zenity/index.html.fr      #
#    => sudo apt-get install libimage-exiftool-perl 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                         #
# 09/07/08 - v1.2 - Remplacement de imagemagick par exiftool pour le traitement            #
#                 - Ajout boîte de dialogue de barre de progression en pourcentage         #
############################################################################################
## Variables
nb_param="$#"
erreur=0
typeset -i CNT=1
typeset -i CUR=0

## Fonctions début de numérotation
début_numerot ()
{
                numParam=`zenity --title "Début de numérotation" --entry-text="1" --entry --text "Par défaut à 1, à modifier le cas échéant :"`
                if  [ $? != 0 ]; then
                        exit 1
                fi
                        [ $? -ne 0 ] && exit 2 # Annulation
}

## Fonctions renommage des fichiers
rename_jpeg ()
{
        for parametre in "$@";
        do
                old_name="$parametre"
                date_time=`exiftool "$parametre" | grep "Create Date"`
                extension=`echo $parametre | awk -F "." '{print $NF}'`
                aa=`echo $date_time | cut -d: -f2 | cut -c2-5`
                mm=`echo $date_time | cut -d: -f3`
                jj=`echo $date_time | cut -d: -f4 | cut -c1-2`
                hh=`echo $date_time | cut -d: -f4 | cut -c4-5`
                min=`echo $date_time | cut -d: -f5`     
                if [ $numParam -gt 0 ] && [ $numParam -lt 10 ]; then
                        numero=00$numParam
                fi
                if [ $numParam -gt 9 ] && [ $numParam -lt 100 ]; then
                        numero=0$numParam
                fi
                if [ $numParam -gt 100 ] ; then
                        numero=$numParam
                fi
                new_nane=`echo ${aa}${mm}${jj}_${hh}.${min}_${numero}.${extension}`
                cp "$old_name" "${new_nane}"

                if [ $? = 0 ] ; then   
                        echo "${old_name} => ${new_nane} .... OK" >> /tmp/exif_photos_rename.log
                        rm -f "$old_name"
                else
                        echo "Impossible de renommer $old_name .... NOK" >> /tmp/exif_photos_rename.log
                        let $[erreur += 1]
                fi           
                CUR=$CNT*100/$nb_param
                echo $CUR
                echo "#Traitement de $nb_param photos\n${old_name} => ${new_nane} ... en cours\n\nAvancement: $CUR %\n "               
                CNT=$CNT+1
                let $[numParam += 1]
        done
        nb_renomme=$(( $nb_param - $erreur ))
        if [ $erreur != 0 ] ; then
                touch /tmp/exif_photos_rename.err       
                echo "#Fin de traitement : $nb_param fichiers\n\nFichiers renommés : $nb_renomme\nFichiers impossible à renommer : $erreur\n\n _!!_ Cliquer sur Valider pour afficher le rapport de traitement _!!_\n"
                       
        else
                echo "#Fin de traitement : $nb_param fichiers\n\nFichiers renommés : $nb_renomme\nFichiers impossible à renommer : $erreur\n\nOK, vous pouvez fermer en cliquant sur Valider !\n"
        fi
}

## Fonctions affichage du rapport de traitement
affich_log ()
{
if [ -f /tmp/exif_photos_rename.err ] ; then
        cat /tmp/exif_photos_rename.log | zenity --text-info --title "/tmp/exif_photos_rename.log" --width=500 --height=500
fi
rm -f /tmp/exif_photos_rename.log
rm -f /tmp/exif_photos_rename.err
}

## Traitement
if [ "$#" -eq 0 ]; then
        zenity --error --title="error" --text="Selectioner au moins 1 fichier"
        exit 1
fi
début_numerot
rename_jpeg "$@" | zenity --progress --title="exif_photos_rename" --percentage=0
affich_log

Mise en place :

Placer le script exif_photos_rename_v1.2.sh dans le dossier ~/.gnome2/nautilus-scripts, puis le rendre exécutable

$ sudo chmod +x ~/.gnome2/nautilus-scripts/exif_photos_rename_v1.2.sh

Utilisation :

Sélectionner les photos à traiter, puis clic droit / Scripts / exif_photos_rename_v1.2.sh

exif_photos_rename_v1.2_01.png

Cliquer sur Valider ou modifier le début de numérotation le cas échéant :

exif_photos_rename_00.png

Le traitement s'effectue, l'état d'avancement en pourcentage s'affiche :

exif_photos_rename_v1.2_02.png

A la fin du traitement :

1. Si aucune erreur n'est détectée, une petite récap s'affiche

exif_photos_rename_v1.2_03.png

2. Si des fichiers n'ont pu être renommés :

exif_photos_rename_v1.2_04.png

exif_photos_rename_v1.2_05.png

Résultat :

exif_photos_rename_v1.2_06.png

NB 1 : _/!\_ Par principe de précaution, je vous conseille de commencer à utiliser un script qui, au final supprime ou modifie un fichier, sur une copie de vos photos, histoire de voir que tout se passe bien ;)

NB 2 : Suite à un commentaire de Batchajan sur mon post sur exif_photos_rename_v1.1, j'ai également attaché à ce billet une variante de mon script, exiftool_v1.0.sh. Batchajan l'a en effet modifié pour rajouter les fonctions suivantes :

  • Eviter le rerenommage d'une photo déjà moulinée
  • Classer les photos renommées dans les répertoires aaaa/aaaa-mm

Merci à Batchajan pour ces modifications, elles pourront être utiles... ;)

NB 3 : Utilisant imagemagick dans d'autres scripts sur mon Ubuntu 8.04 Hardy Heron, notamment PhpWebGallery_create, j'ai du compiler la dernière version stable de imagemagick à partir des sources :

sudo apt-get install libfontconfig1-dev libjpeg62-dev libpng12-dev librsvg2-dev libtiff4-dev libjasper-dev libwmf-dev
"télécharger la dernière version de ImageMagick-6.4.xx" => ftp://ftp.fu-berlin.de/unix/X11/graphics/ImageMagick/
tar -xvzf ImageMagick-6.4.xx
cd ImageMagick-6.4.xx
./configure
make
sudo make install

Puis après la compilation, j'ai rajouté à la fin de mon fichier ~/.bashrc la ligne

export LD_LIBRARY_PATH=/usr/local/lib

mardi, juillet 17 2007

Script de renommage de photos selon les données EXIF

Avec les photos numériques on ne compte pas, on prend des dizaines (voir des centaines) de photos puis on les importe sur le PC pour les trier. Personnellement j'utilise gThumb car il est léger, simple à utiliser, n'est pas usine à gaz, dispose de fonctionnalités assez avancées et en plus est intégré nativement dans Ubuntu. Le premier de ces tris est le renommage, j'ai l'habitude de renommer mes photos en fonction de la date de prise de vue (+ une numérotation) ce qui permet par la suite d'effectuer un tri chronologique dans l'explorateur de fichiers et d'avoir un nom unique.

il est possible de renommer massivement des photos en fonction des données EXIF avec gThumb mais le meilleur résultat que j'ai pu en tirer est un nom de fichier sous la forme 2006-11-04--19.41.56_007.jpg. C'est presque le résultat attendu sauf que je n'ai pas trouvé le moyen d'enlever le double tiret et les secondes qui sont superflus. Voila le pourquoi de ce script, utilisé via les scripts nautilus, en deux clics il permet de renommer une série de photos sous la forme 2006-11-04_19.41_007.jpg

Dépendances :

$ sudo apt-get install imagemagick zenity

Script exif_photos_rename_v1.1.sh :

  • 27/07/07 - v1.1
    • Réorganisation
    • Choix du début de numérotation, par défaut à 1
  • 15/07/07 - v1.0
    • Création
#!/bin/bash
############################################################################################
# Taltan - http://www.taltan.fr -                                                          #
############################################################################################
# Script exif_photos_rename_v1.1.sh                                                        #
# Licence : GNU / GPL                                                                      #
############################################################################################
# Renomme les photos selon les données EXIF sous la forme :                                #
# ${aa}-${mm}-${jj}_${hh}.${min}_${numero}.ext  => ex : 2006-11-04_19.41_007.jpg           #
# Fonctionne pour une numérotation de 001 à 999                                            #
############################################################################################
# Dépendances                                                                              #
############################################################################################
#  - Nécessite le paquet imagemagick : http://doc.ubuntu-fr.org/imagemagick                #
#  - Nécessite le paquet zenity                                                            #
#    => sudo 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                         #
############################################################################################
## Variables
nb_param="$#" # nb de paramètres passés au script
erreur=0 # initialisation du compteur d'erreurs à 0

## Fonctions début de numérotation
début_numerot ()
{
                numParam=`zenity --title "Début de numérotation" --entry-text="1" --entry --text "Par défaut à 1, à modifier le cas échéant :"`
                if  [ $? != 0 ]; then # si fermeture
                        exit 1
                fi
                        [ $? -ne 0 ] && exit 2 # si annulation
}

## Fonctions renommage des fichiers
rename_jpeg ()
{
        for parametre in "$@"; # pour chaque fichier selectionné
        do # faire
                old_name="$parametre" # on définie le nom du fichier actuel
                date_time=`identify -format "%[EXIF:DateTime]" "$parametre"` # création de la variable date / heure de la photo (ex: 2006:11:04 19:41:30. )
                extension=`echo $parametre | awk -F "." '{print $NF}'` # création de la variable extension du fichier (ex : .jpg)     
                aa=`echo $date_time | cut -d: -f1` # création de la variable année (ex : 2006)
                mm=`echo $date_time | cut -d: -f2` # création de la variable mois (ex : 11)
                jj=`echo $date_time | cut -d: -f3 | cut -c1-2` # création de la variable jour (ex : 04)
                hh=`echo $date_time | cut -d: -f3 | cut -c4-5` # création de la variable heure (ex : 19)
                min=`echo $date_time | cut -d: -f4` # création de la variable minute (ex: 41)
                # création de la variable numérotation       
                if [ $numParam -gt 0 ] && [ $numParam -lt 10 ]; then # pour les paramètres 1 à 9
                        numero=00$numParam # rajouter 2 digit => 001, 002, 003,..., 009
                fi
                if [ $numParam -gt 9 ] && [ $numParam -lt 100 ]; then # pour les paramètres 10 à 99
                        numero=0$numParam # rajouter 1 digit => 010, 011, 012,..., 099
                fi
                if [ $numParam -gt 100 ] ; then # pour les paramètres supérieur à 100
                        numero=$numParam # ne pas rajouter de digit => 100, 101, 102,...
                fi           
                new_nane=`echo ${aa}-${mm}-${jj}_${hh}.${min}_${numero}.${extension}` # on définie le nouveau nom => 2006-11-04_19.41_num.jpg
                cp "$old_name" "${new_nane}" # on renomme le fichier en le copiant
                if [ $? = 0 ] ; then # si la copie a reussi    
                        echo "${old_name} => ${new_nane} .... OK"
                        rm -f "$old_name" # => supprime le fichier original
                else # si la copie a echoué
                        echo "Impossible de renommer $old_name .... NOK" # => message d'erreur
                        let $[erreur += 1] # incrémentation du compteur d'erreur
                fi
                let $[numParam += 1] # incrémentation du numéro de paramètre
        done
        nb_renomme=$(( $nb_param - $erreur )) # création de la variable nombre de fichiers renommés
        echo "-----------------------------------------"               
        echo "Fin de traitement : $# fichiers "
        echo "-----------------------------------------"
        echo "Fichiers renommes : $nb_renomme"
        echo "Fichiers en erreur : $erreur"
        echo "-----------------------------------------"
        echo "OK, vous pouvez fermer !"
}

## Traitement
if [ "$#" -eq 0 ]; then # si aucun fichier n'est selectionné => mesage d'erreur
        zenity --error --title="error" --text="Selectioner au moins 1 fichier"
        exit 1
fi
début_numerot
rename_jpeg "$@" | zenity --text-info --title "exif_photos_rename" --width=500 --height=500

Mise en place :

Placer le script exif_photos_rename_v1.1.sh dans le dossier ~/.gnome2/nautilus-scripts, puis le rendre exécutable

$ sudo chmod +x ~/.gnome2/nautilus-scripts/exif_photos_rename_v1.1.sh

Utilisation :

Sélectionner les photos à traiter, puis clic droit / Scripts / exif_photos_rename.sh exif_photos_rename_01.png

Cliquer sur Valider ou modifier le début de numérotation le cas échéant : exif_photos_rename_00.png

Résultat :

exif_photos_rename_02.png

exif_photos_rename_03.png

NB : _/!\_ Par principe de précaution, je vous conseille de commencer à utiliser un script qui, au final supprime ou modifie un fichier, sur une copie de vos photos, histoire de voir que tout se passe bien ;)

mercredi, juin 7 2006

Les nautilus-scripts

Voila un fonctionnalité bien pratique dans gnome, les scripts nautilus. Il suffit de rajouter des scripts bash dans le dossier ~/.gnome2/nautilus-scripts pour les voir apparaitre dans le menu contextuel de nautilus. On peut par exemple utiliser un script de nettoyage des noms de fichier. Avec le scripts ~/.gnome2/nautilus-scripts/replace_space.sh on a :

nautilus-script01.png

Ce qui donne :

nautilus-script02.png

NB 1 : ne pas oublier de rendre les scripts exécutables

NB 2 : _/!\_ Par principe de précaution, je vous conseille de commencer à utiliser un script qui, au final supprime ou modifie un fichier, sur une copie de vos fichiers, histoire de voir que tout se passe bien ;)

Voila ceux dont je me sert le plus souvent (maj 12/04/2008) :

Encode_TS.sh :

Encode_TS_4-3.sh

Encoder en Xvid au format 4/3 avec ffmpeg un enregistrement .ts de Freebox HD

#!/bin/bash
encode_ts ()
{
        for parametre in "$@";
        do
        ext=`echo $parametre | awk -F "." '{print $NF}'`       
        avi_name=`echo ${parametre/$ext/avi}`      
        xterm -e "echo | /usr/bin/ffmpeg -i "$parametre" -r 29.97 -vcodec xvid -s 640x480 -aspect 4:3 -maxrate 1800k -b 1500k -qmin 3 -qmax 5 -bufsize 4096 -mbd 2 -bf 2 -flags +4mv+trell -aic 2 -cmp 2 -subcmp 2 -g 300 -acodec mp3 -ar 48000 -ab 128k -ac 2 "$avi_name""
        done
}

## Traitement
encode_ts "$@"

Encode_TS_16-9.sh

Encoder en Xvid au format 16/9 avec ffmpeg un enregistrement .ts de Freebox HD

#!/bin/bash
encode_ts ()
{
        for parametre in "$@";
        do
        ext=`echo $parametre | awk -F "." '{print $NF}'`       
        avi_name=`echo ${parametre/$ext/avi}`      
        xterm -e "echo | /usr/bin/ffmpeg -i "$parametre" -r 29.97 -vcodec xvid -s 704x384 -aspect 16:9 -maxrate 1800k -b 1500k -qmin 3 -qmax 5 -bufsize 4096 -mbd 2 -bf 2 -flags +4mv+trell -aic 2 -cmp 2 -subcmp 2 -g 300 -acodec mp3 -ar 48000 -ab 128k -ac 2 "$avi_name""
        done
}

## Traitement
encode_ts "$@"

800x600_resize.sh :

Converti la taille en 800x600 des photos sélectionnées, nécessite le paquet imagemagick

sudo apt-get install imagemagick
#!/bin/bash
do_800x600 ()
{
for img in "$@";
do
        convert -resize 800x600 $img 800x600-$img
done
}
do_800x600 "$@"

play_TV.sh :

En DualHead joue avec mplayer la vidéo séléctionnée sur le deuxième display (TV par exemple)

#!/bin/bash
#play_TV.SH
export DISPLAY=:0.1
mplayer -vo xv -fs "$1"
export DISPLAY=:0.0

Variante avec VLC

#!/bin/bash
export DISPLAY=:0.1
vlc -f "$1"
export DISPLAY=:0.0

play_XMMS.sh :

Joue dans XMMS tous le fichiers du dossier (et sous dossier) sélectionné

#!/bin/bash
xmms "$1"*

replace_space.sh :

Renomme les fichiers ou dossiers passés en paramètres en replaçant les espaces par des underscrores _

#!/bin/bash
# Renomme les fichiers ou dossiers passés en paramètres en replaçant les espaces par des underscrores _
numParam=1
for parametre in "$@"; do
        old_name="$parametre"
        new_name=`echo "$parametre" | tr -s ' ' '_'`
        mv "$old_name" "$new_name"
        let $[numParam += 1]
done

par2repair.sh :

Permettra de reconstituer le fichier original d’une archive manquante ou abîmée

#!/bin/sh
par2repair -q "$1" | zenity --text-info --title "PAR2" --width=500 --height=500

exif_photos_rename_v1.2.sh :

Mise à jour script exif_photos_rename_1.2, renommer les photos selon les données EXIF

#!/bin/bash
############################################################################################
# Taltan - http://www.taltan.fr - ola.taltan_AT_laposte.net                                #
############################################################################################
# Script exif_photos_rename_v1.2.sh                                                        #
# Licence : GNU / GPL                                                                      #
############################################################################################
# Renomme les photos selon les données EXIF sous la forme :                                #
# ${aa}-${mm}-${jj}_${hh}.${min}_${numero}.ext  => ex : 20061104_19.41_007.jpg             #
# Fonctionne pour une numérotation de 001 à 999                                            #
############################################################################################
# Dépendances                                                                              #
############################################################################################
#  - Nécessite le paquet exiftool : http://www.sno.phy.queensu.ca/~phil/exiftool/          #
#  - Nécessite le paquet zenity : http://library.gnome.org/users/zenity/index.html.fr      #
#    => sudo apt-get install libimage-exiftool-perl 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                         #
# 09/07/08 - v1.2 - Remplacement de imagemagick par exiftool pour le traitement            #
#                 - Ajout boîte de dialogue de barre de progression en pourcentage         #
############################################################################################
## Variables
nb_param="$#"
erreur=0
typeset -i CNT=1
typeset -i CUR=0

## Fonctions début de numérotation
début_numerot ()
{
                numParam=`zenity --title "Début de numérotation" --entry-text="1" --entry --text "Par défaut à 1, à modifier le cas échéant :"`
                if  [ $? != 0 ]; then
                        exit 1
                fi
                        [ $? -ne 0 ] && exit 2 # Annulation
}

## Fonctions renommage des fichiers
rename_jpeg ()
{
        for parametre in "$@";
        do
                old_name="$parametre"
                date_time=`exiftool "$parametre" | grep "Create Date"`
                extension=`echo $parametre | awk -F "." '{print $NF}'`
                aa=`echo $date_time | cut -d: -f2 | cut -c2-5`
                mm=`echo $date_time | cut -d: -f3`
                jj=`echo $date_time | cut -d: -f4 | cut -c1-2`
                hh=`echo $date_time | cut -d: -f4 | cut -c4-5`
                min=`echo $date_time | cut -d: -f5`     
                if [ $numParam -gt 0 ] && [ $numParam -lt 10 ]; then
                        numero=00$numParam
                fi
                if [ $numParam -gt 9 ] && [ $numParam -lt 100 ]; then
                        numero=0$numParam
                fi
                if [ $numParam -gt 100 ] ; then
                        numero=$numParam
                fi
                new_nane=`echo ${aa}${mm}${jj}_${hh}.${min}_${numero}.${extension}`
                cp "$old_name" "${new_nane}"

                if [ $? = 0 ] ; then   
                        echo "${old_name} => ${new_nane} .... OK" >> /tmp/exif_photos_rename.log
                        rm -f "$old_name"
                else
                        echo "Impossible de renommer $old_name .... NOK" >> /tmp/exif_photos_rename.log
                        let $[erreur += 1]
                fi           
                CUR=$CNT*100/$nb_param
                echo $CUR
                echo "#Traitement de $nb_param photos\n${old_name} => ${new_nane} ... en cours\n\nAvancement: $CUR %\n "               
                CNT=$CNT+1
                let $[numParam += 1]
        done
        nb_renomme=$(( $nb_param - $erreur ))
        if [ $erreur != 0 ] ; then
                touch /tmp/exif_photos_rename.err       
                echo "#Fin de traitement : $nb_param fichiers\n\nFichiers renommés : $nb_renomme\nFichiers impossible à renommer : $erreur\n\n _!!_ Cliquer sur Valider pour afficher le rapport de traitement _!!_\n"
                       
        else
                echo "#Fin de traitement : $nb_param fichiers\n\nFichiers renommés : $nb_renomme\nFichiers impossible à renommer : $erreur\n\nOK, vous pouvez fermer en cliquant sur Valider !\n"
        fi
}

## Fonctions affichage du rapport de traitement
affich_log ()
{
if [ -f /tmp/exif_photos_rename.err ] ; then
        cat /tmp/exif_photos_rename.log | zenity --text-info --title "/tmp/exif_photos_rename.log" --width=500 --height=500
fi
rm -f /tmp/exif_photos_rename.log
rm -f /tmp/exif_photos_rename.err
}

## Traitement
if [ "$#" -eq 0 ]; then
        zenity --error --title="error" --text="Selectioner au moins 1 fichier"
        exit 1
fi
début_numerot
rename_jpeg "$@" | zenity --progress --title="exif_photos_rename" --percentage=0
affich_log