Taltan.blog.bkp

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 ;)

samedi, février 3 2007

Centraliser l'administration de Ubuntu 6.10 avec gnome-main-menu

Pour ceux qui ne veulent pas attendre Ubuntu Feisty Fawn et le nouveau GNOME Control Center, il existe gnome-main-menu sur la dernière version stable d'Ubuntu (6.10). Il s'agit de centraliser en un seul endroit l'ensemble des principales options d'administrations système et de préférences pour GNOME. Je pense que cette fonctionnalité, orientée home user, qui sera intégrée par défaut dans le prochain Ubuntu Feisty Fawn, va dans le bon sens et permettra au ubuntueros débutants de ne pas être trop désorienté avec le menu système actuel.

Pour l'installer

$ sudo apt-get install gnome-main-menu

Puis ajouter au tableau de bord l'applet Menu principal dans la section section Utilitaires, voila le résultat :

gnome-main-menu-01.png

Et voila ce que donne le Centre de contrôle :

gnome-main-menu-02.png

Avouez quand même que ça peut simplifier les choses, pas de troll svp ;)

dimanche, août 27 2006

Surveiller la température du CPU et la vitesse du ventilateur

Pour avoir toujours un oeil sensors.png sur la température du CPU et la vitesse du ventilateur, avec lm-sensors et l'applet gnome sensors-applet

Fonctionne avec la config matos suivante (mais doit fonctionner avec une autre CM et processeur puisque la détection est automatique) :

  • CM : ASUSTeK A8N-E (NVIDIA nForce4 Ultra)
  • µP : AMD Athlon 64 3000+

Toutes ces manips sont à faire en root

1. Installation de du package lm-sensors

apt-get install lm-sensors sensors-applet

2. exécuter le script suivant (mkdev.sh)

#!/bin/bash
# Création des fichiers i2c dans le répertoire /dev
# Here you can set several defaults.
# The number of devices to create (max: 256)
NUMBER=32
# The owner and group of the devices
OUSER=root
OGROUP=root
# The mode of the devices
MODE=600
# This script doesn't need to be run if devfs is used
if [ -r /proc/mounts ] ; then
        if grep -q "/dev devfs" /proc/mounts ; then
                echo "You do not need to run this script as your system uses devfs."
                exit;
        fi
fi
i=0;
while [ $i -lt $NUMBER ] ; do
        echo /dev/i2c-$i
        mknod -m $MODE /dev/i2c-$i c 89 $i || exit
        chown "$OUSER:$OGROUP" /dev/i2c-$i || exit
        i=$[$i + 1]
done
#end of file

Sources : doc.ubuntu-fr.org

3. Lancer la commande de détection des capteurs

sensors-detect

répondre "yes" à toutes les questions sauf à la fin répondre "smbus" :

I will now generate the commands needed to load the I2C modules. Sometimes, a chip is available both through the ISA bus and an I2C bus. ISA bus access is faster, but you need to load an additional driver module for it. If you have the choice, do you want to use the ISA bus or the I2C/SMBus (ISA/smbus)? smbus

Après avoir détecté les modules correspondant au matériel, sensors-detect proposera de les rajouter dans le fichier etc/modules, répondre "yes" Dans mon cas il s'agit de i2c-isa, eeprom et it87

4. Reboot de la machine ou chargement des modules manuellement

modprobe i2c-isa
modprobe eeprom
modprobe it87

5. La commade sensors doit retourner

sensors2.png

6. Installation de l'applet gnome sensors-applet

apt-get install sensors-applet

Il suffit maintenant de rajouter l'applet "Moniteur de matériel" dans le tableau de bord et de modifier un peu les préférences.

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

page 2 de 2 -