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 04/10/2009, à 22:43

gari126

[Résolu] Script classement renommage compression photos et vidéos


Pour une version fonctionnelle et mis-à-jour de ce script, voir Post #5 ci dessous !!!!

N'oubliez pas d'installer les dépendances suivantes avant de l'utiliser:
=> sudo apt-get install libimage-exiftool-perl zenity mencoder libjpeg-progs imagemagick espeak
Et placer ce Script dans  ~/.gnome2/nautilus-scripts et le rendre "exécutable" afin de pouvoir l'utiliser
avec un simple clic droit dans Nautilus

Edit du 09/01/2010
Maintenant, Le bouton "Annuler" des boites de Dialogue Zenity Fonctionne! oups ... mea culpa
Attention, si vous utilisez encore une Ubuntu 8.10, ce script ne fonctionnera pas, et il sera nécessaire d'installer la dernière version d'exiftool -> voir http://www.sno.phy.queensu.ca/~phil/exiftool/
Je n'arrive toujours pas a trouver une ligne de commande qui compresse correctement les fichier MTS de mon Panasonic ... si quelqu'un trouve une solution .....!!!???

Edit du 18/02/2010
Rajout de la compression des fichier au format MOV par la commande:
mencoder ./"${dossier}"/"$line" -ovc xvid -xvidencopts bitrate=2000 -oac mp3lame -lameopts cbr:br=128 -MC 0 -o ./"${dossier}"/"${name}".avi
et de l'option -MC 0 dans toute les ligne de commande de compression vide pour eviter des erreurs de synchro ... en tout cas ca marche mieux avec .... toutefois cela ne marche toujours pas sur les format video MTS !

Edit du 06/09/2010
Rajout de la compression/convertion des .MTS de mon panasonic TZ7 en Xvid (et ça marche!)
Petites corrections mineures
Ajout du status vocal de reussite ou non du script

==========================================================

Bonjour a tous,

Je me suis lancé dans la réalisation de mon premier script! qui doit me permettre de classer-renommer-compresser "en un clic" les photos et vidéos prises avec mon APN.

Ce script,
-Renomme en fonction de leur date de prise de vue puis transfère les photos et vidéos sélectionnées dans un dossier du type (aa-mm-jj)_événement
-Tri les photos et vidéos suivant leurs date de prise de vue (avec données Exif -> date de modification)
-Renomme les photos et vidéos par ordre chronologique avec un compteur à 4 digit suivant le type ####_événement
-Comprime les photo au format JPG en Qualité 85
-Tourne les photos en fonction des données Exif et re-initialise leur orientation
-Comprime les vidéos au format AVI en qualité Xvid 1500kbps
-Ne comprime pas les vidéos au Format MTS (bug mencoder avec mes fichiers MTS!)
-Re-"tag" les photos et les vidéos déplacées-renommé-compressées avec leur date originale

Comme c'est mon premier script, même si je me suis fortement aider d'autres scripts, je suis sûr que les gourous sur ce forum pourront me conseiller des améliorations et m'aider peut-être aussi à corriger un drôle de bug lié à l'utilisation de Zenity!
En effet lorsque j'utilise Zenity pour afficher un barre de progression pour les taches de transfers, renommage ou compression (ex avec la procedure "rename_text")
(ex: rename_text | zenity --progress --text="Renomage des photos et des vidéos par ordre chronologique" --pulsate --auto-close)
mes variables d'erreur ne sont plus utilisées dans ma dernière fenêtre de "status_final" ...
(ex: La compression des JPG et AVI s'est fait avec  erreur(s))

Alors que si je n'utilise pas Zenity et sa barre de progression:
(ex: rename_text )
Les variables d'erreurs apparaissent correctement dans ma dernière fenêtre de "status_final" ...
(ex: La compression des JPG et AVI s'est fait avec 0  erreur(s))

Vous avez dit bizarre, comme c'est bizarre ...!

Merci !

#!/bin/bash

#################################################################################################
# Libre - Licence: GNU / GPL									#
#################################################################################################
#												#
# Ce script range dans un dossier spécifique, puis classe par ordre chronologique,		#
# renomme et compresse;les photos JPG et videos AVI&MTS prises par un APN.			#
#												#	
# il est fortemment inspiré du script "Classer ses photos d'après la date de prise de vue"	#
# voir http://forum.ubuntu-fr.org/viewtopic.php?id=277087 					#
# MERCI BEAUCOUP A SON AUTEUR !									#
#												#
#################################################################################################
# Ce script,											#
# -Transfère les photos et vidéos sélectionnées dans un dossier du type ((aa-mm-jj)_événement	#
# -Tri les photos et vidéos suivant leurs date de prise de vue (avec données Exif)		#
# -Renomme les photos et vidéos par ordre chronologique suivant le type ####_événement		#
# -Comprime les photo au format JPG en Qualité 85						#
# -Comprime les vidéos au format AVI en qualité Xvid 1500kbps					#
# -Ne comprime pas les vidéos au Format MTS (bug mencoder avec mes fichiers MTS!)		#
# -Re-"tag" les photos et les vidéos déplacées-renommé-compressées avec leur date originale	#
#################################################################################################
# Dépendances											#
#  - Nécessite le paquet Exiftool (pour la lecture et l'écriture des tag des vidéos et vidéos)	#
#    (Exiftool version>7.83 si besoin compatibilité avec fichiers M2TS)				#
#  - Nécessite le paquet Zenity (Pour les fenêtres de dialogues)				#
#  - Nécessite le paquet Imagemagick (Pour la compression desphotos au format JPG)		#
#  - Nécessite le paquet Mencoder (Pour la compression des vidéos au format AVI)		#
#  - Nécessite le paquet Libjpeg-progs (pour la compression des photos au format JPG)		#
#    => apt-get install libimage-exiftool-perl zenity mencoder libjpeg-progs imagemagick			#
#################################################################################################
# 03/10/09 - v0.9 - Création (bug-le nombre d'erreurs n'est pas affiché dans la fenêtre finale) #
#												#
#################################################################################################

## Message d'information si aucun fichier n'est sélectionné
information ()
{
if [ "$1" -eq 0 ]; then 
zenity --info --title "Script de classement-renommage_compression de photos et de vidéos" --text "Ce script est à utiliser uniquement pour les photos et vidéos prises par un APN (dont les tags contienent l'heure de prises de vue) \r\rProcédure: \r\r1) Classer les photos et les vidéos en (liste) et par (date de modification) avec Nautilus \r\r2) Sélectionner les photos et vidéos à classer d'un même événement \r\r3)  Lancer ce script, qui va \r\t-Transférer les photos et vidéos selectionnées dans un dossier du type (aa-mm-jj)_événement \r\t-Classer et modifier le nom de ces photos et vidéos suivant le type ####_événement \r\t-Compresser les photo JPG en Qualité 85 et les vidéos AVI en Xvid 1500kbps " --width=5000 --height=500
exit 
fi
}



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



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

## Fonction du choix du nom commun du dossier
nom_dossier ()
{
    nom_dossier=$(zenity --entry \
        --title "Nom personnalisé du dossier" \
        --text "Quel nom voulez-vous donner au dossier ou seront stockées ces photos ?" \
        --entry-text="$nom_photo"     )
    if [ "$nom_dossier" = ""  ]; then
        nom_dossier="$nom_photo"
    fi
    echo "$nom_dossier"
}

## Creation du dossier ou seront stockées les photos
creation_dossier ()
{

for parametre in "$1";

do
        #Date du premier fichier selectionné (tag) > date_time 
        date_time=`exiftool -T -filemodifydate "$parametre"`

        #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` 
 
	#Recompose le nom du dossier (ex (2006-11-04)_vacances)
	dossier=`echo "("${aa}-${mm}-${jj}")"_${nom_dossier}` 

	mkdir ./"${dossier}"

done
}

## Renomme les fichiers sélectionnées avec la date originale (date de modification) comprise dans leurs tags
## Et les places dans le dossier précedemment créé
rename_date ()
{

compteur=1   # initialisation du compteur à 1
erreur_1=0   # initialisation du compteur d'erreurs à 0


	# pour chaque fichier selectionné
        for parametre in "$@"; 
        do

        #Fichier actuel > old_name                
        old_name="$parametre" 

        #Date du fichier actuel (tag) > date_time 
        date_time=`exiftool -T -filemodifydate "$parametre"`

        #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" ./"${dossier}"/"${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     
		rm -f "$old_name" 

		#Recopie la date originale de la photo / video
		exiftool -filemodifydate="$date_time" ./"${dossier}"/"${new_name}"
            
		echo "${new_name}" >> /tmp/tmp_liste_photos1     
	else
		let $[erreur_1 += 1]
		echo "${old_name}" >> /tmp/tmp_erreurs

	fi
        
        #Incrémente le nombre de paramètre
        let $[compteur += 1] 
     
        done

}

## Classe par ordre chronologique et renomme les photos et vidéos par un nom personnalise avec compteur (ex : 0001_vacances.jpg)
rename_text ()
{

erreur_2="0"    # initialisation du compteur d'erreurs à 0

#Trier le fichier temporaire 1 comprennant la liste des photos et vidéos renommées avec la date de la prise de vue     
sort /tmp/tmp_liste_photos1 -o /tmp/tmp_liste_photos1
        
    #Lire le fichier ligne par ligne 
    while read line 
    do 

        #Date du fichier actuel (tag) > date_time 
        date_time=`exiftool -T -filemodifydate ./"${dossier}"/"$line"`

        #Extension du fichier actuel > extension (ex .jpg)
        extension=`echo ./"${dossier}"/"$line" | awk -F "." '{print $NF}' | tr 'a-z' 'A-Z'`
        
        if [ ${#var_numero} -eq 1 ]; then            
            numero=000$var_numero
        fi

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

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

        if [ ${#var_numero} -eq 4 ]; then            
            numero=$var_numero
        fi
        
        #Recompose le nouveau nom du fichier (ex 0001_vacances.jpg)
        new_name=`echo ${numero}_${nom_photo}.${extension}` 

        #On renomme le fichier en le copiant
        cp ./"${dossier}"/"$line" ./"${dossier}"/"${new_name}"

            
        #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     

		rm -f ./"${dossier}"/"$line"  
		#Recopie la date originale de la photo / video
		exiftool -filemodifydate="$date_time" ./"${dossier}"/"${new_name}"

            echo "${new_name}" >> /tmp/tmp_liste_photos2
	else 

        	let $[erreur_2 += 1] 
		echo "${dossier}"/"$line" >> /tmp/tmp_erreurs
        fi
        
        #Incrémente le compteur
        let $[var_numero += 1]

    done < /tmp/tmp_liste_photos1
    
}

#Compresse les photos et videos
compresser ()
{

erreur_3=0     # initialisation du compteur d'erreurs à 0

    #Trier le fichier temporaire 2 comprennant la liste des photos et vidéos renommé avec un index suivant l'ordre chronologique        
#   sort /tmp/tmp_liste_photos2 -o /tmp/tmp_liste_photos2

        
    #Lire le fichier ligne par ligne 
cat /tmp/tmp_liste_photos2 | while read line
    do 

	#nom du fichier
	name=`echo $line | cut -f1 -d.`

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

	#Date du fichier actuel (tag) > date_time 
	date_time=`exiftool -T -filemodifydate ./"${dossier}"/"$line"`
       

if [ "$extension" = "JPG" ]; then
{

convert -compress JPEG -quality 85 ./"${dossier}"/"$line" ./"${dossier}"/"${name}".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     

		rm -f ./"${dossier}"/"$line"
		#Recopie la date originale de la photo / video
		exiftool -filemodifydate="$date_time" ./"${dossier}"/"${name}".jpg

	else 

                let $[erreur_3 += 1] 
		echo "${dossier}"/"$line" >> /tmp/tmp_erreurs
  
	fi
}
fi

if [ "$extension" = "AVI" ]; then
{
mencoder ./"${dossier}"/"$line" -ovc xvid -xvidencopts bitrate=1500 -oac mp3lame -lameopts cbr:br=128 -o ./"${dossier}"/"${name}".avi

        #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     

		rm -f ./"${dossier}"/"$line"
		#Recopie la date originale de la photo / video
		exiftool -filemodifydate="$date_time" ./"${dossier}"/"${name}".avi

	else 
 
                let $[erreur_3 += 1]
		echo "${dossier}"/"$line" >> /tmp/tmp_erreurs
	fi
}
fi

    done < /tmp/tmp_liste_photos2

}

#Donne le status final après traitement
status_final ()
{
echo "Le traitement des photos et des vidéos est maintenant TERMINE!" 
echo " "
echo "Le nombre de photos et vidéos ayant été traités est de: $nb_param"
echo "Le déplacement des photos et vidéos dans un dossier $dossier s'est fait avec $erreur_1 erreur(s)" 
echo "Le renommage chronologique des photos et vidéos s'est fait avec $erreur_2 erreur(s)" 
echo "La compression des JPG et AVI s'est fait avec $erreur_3 erreur(s)"
echo " "
echo "En cas d'erreur(s), veuillez ouvrir le fichier /tmp/tmp_erreurs pour lister les fichiers en erreur"
echo " "
echo "Vous pouvez maintenant fermer cette fenêtre ..."
}



## Main

## Variables
nb_param="$#"      # nb de paramètres passés au script

#Supression du fichier temporaire
rm /tmp/tmp_liste_photos1
rm /tmp/tmp_liste_photos2
rm /tmp/tmp_erreurs

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

numero

nom_photo

nom_dossier

creation_dossier "$@"

rename_date "$@" | zenity  --progress --text="Transfers des photos et des videos dans le dossier: $dossier" --pulsate --auto-close

rename_text | zenity --progress --text="Renomage des photos et des vidéos par ordre chronologique" --pulsate --auto-close

compresser | zenity --progress --text="Compression des photos et des vidéos" --pulsate --auto-close

status_final | zenity --text-info --title "Script de classement de photos et vidéos" --width=900 --height=350

exit 0;


Pour une version fonctionnelle de ce script, voir post #5 ci dessous !!!!

Dernière modification par gari126 (Le 06/09/2010, à 22:57)

Hors ligne

#2 Le 05/10/2009, à 20:13

gari126

Re : [Résolu] Script classement renommage compression photos et vidéos

Oups, je viens de me rendre compte que mon Script n'acceptait pas les noms commun de fichiers ou dossiers avec un espace ... (ex: photos de vacances)

J'ai corrigé cela en rajoutant les " " aux bons endroits .... (le script de mon post initial est corrigé)

Toujours personne pour m'aider avec ce problème de Zenity --progress qui annule mes variables d'erreurs ???

Merci!

Hors ligne

#3 Le 05/10/2009, à 22:08

twocats

Re : [Résolu] Script classement renommage compression photos et vidéos

Je me suis permis de légères modifications :

#!/bin/bash

#################################################################################################
# Libre - Licence: GNU / GPL                                    #
#################################################################################################
#                                                #
# Ce script range dans un dossier spécifique, puis classe par ordre chronologique,        #
# renomme et compresse;les photos JPG et videos AVI&MTS prises par un APN.            #
#                                                #    
# il est fortemment inspiré du script "Classer ses photos d'après la date de prise de vue"    #
# voir http://forum.ubuntu-fr.org/viewtopic.php?id=277087                     #
# MERCI BEAUCOUP A SON AUTEUR !                                    #
#                                                #
#################################################################################################
# Ce script,                                            #
# -Transfère les photos et vidéos sélectionnées dans un dossier du type ((aa-mm-jj)_événement    #
# -Tri les photos et vidéos suivant leurs date de prise de vue (avec données Exif)        #
# -Renomme les photos et vidéos par ordre chronologique suivant le type ####_événement        #
# -Comprime les photo au format JPG en Qualité 85                        #
# -Comprime les vidéos au format AVI en qualité Xvid 1500kbps                    #
# -Ne comprime pas les vidéos au Format MTS (bug mencoder avec mes fichiers MTS!)        #
# -Re-"tag" les photos et les vidéos déplacées-renommé-compressées avec leur date originale    #
#################################################################################################
# Dépendances                                            #
#  - Nécessite le paquet Exiftool (pour la lecture et l'écriture des tag des vidéos et vidéos)    #
#    (Exiftool version>7.83 si besoin compatibilité avec fichiers M2TS)                #
#  - Nécessite le paquet Zenity (Pour les fenêtres de dialogues)                #
#  - Nécessite le paquet Mencoder (Pour la compression des vidéos au format AVI)        #
#  - Nécessite le paquet Libjpeg-progs (pour la compression des photos au format JPG)        #
#    => apt-get install libimage-exiftool-perl zenity mencoder libjpeg-progs            #
#################################################################################################
# 03/10/09 - v0.9 - Création (bug-le nombre d'erreurs n'est pas affiché dans la fenêtre finale) #
#                                                #
#################################################################################################

# Variables
var_numero=${var_numero:-1}
nom_photo="${nom_photo:-Photo}"
nom_dossier="${nom_dossier:-"${nom_photo}"}"


## Message d'information si aucun fichier n'est sélectionné
information ()
{
if [ "$1" -eq 0 ]; then 
zenity --info --title "Script de classement-renommage_compression de photos et de vidéos" --text "Ce script est à utiliser uniquement pour les photos et vidéos prises par un APN (dont les tags contienent l'heure de prises de vue) \r\rProcédure: \r\r1) Classer les photos et les vidéos en (liste) et par (date de modification) avec Nautilus \r\r2) Sélectionner les photos et vidéos à classer d'un même événement \r\r3)  Lancer ce script, qui va \r\t-Transférer les photos et vidéos selectionnées dans un dossier du type (aa-mm-jj)_événement \r\t-Classer et modifier le nom de ces photos et vidéos suivant le type ####_événement \r\t-Compresser les photo JPG en Qualité 85 et les vidéos AVI en Xvid 1500kbps " --width=5000 --height=500
exit 
fi
}



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



## Fonction du choix du nom commun des photos
nom_photo ()
{    
    nom_photo=$(zenity --entry \
        --title "Nom personnalisé des photos" \
        --text "Quel nom commun voulez-vous pour cette série de photos ?" \
        --entry-text="Photo"     )
    echo "$nom_photo"
}

## Fonction du choix du nom commun du dossier
nom_dossier ()
{
    nom_dossier=$(zenity --entry \
        --title "Nom personnalisé du dossier" \
        --text "Quel nom voulez-vous donner au dossier ou seront stockées ces photos ?" \
        --entry-text="$nom_photo"     )
    echo "$nom_dossier"
}

## Creation du dossier ou seront stockées les photos
creation_dossier ()
{

for parametre in "$1";

do
        #Date du premier fichier selectionné (tag) > date_time 
        date_time=`exiftool -T -filemodifydate "$parametre"`

        #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` 
 
    #Recompose le nom du dossier (ex (2006-11-04)_vacances)
    dossier=`echo "("${aa}-${mm}-${jj}")"_${nom_dossier}` 

    mkdir ./"${dossier}"

done
}

## Renomme les fichiers sélectionnées avec la date originale (date de modification) comprise dans leurs tags
## Et les places dans le dossier précedemment créé
rename_date ()
{

compteur=1   # initialisation du compteur à 1
erreur_1=0   # initialisation du compteur d'erreurs à 0


    # pour chaque fichier selectionné
        for parametre in "$@"; 
        do

        #Fichier actuel > old_name                
        old_name="$parametre" 

        #Date du fichier actuel (tag) > date_time 
        date_time=`exiftool -T -filemodifydate "$parametre"`

        #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" ./"${dossier}"/"${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     
        rm -f "$old_name" 

        #Recopie la date originale de la photo / video
        exiftool -filemodifydate="$date_time" ./"${dossier}"/"${new_name}"
            
        echo "${new_name}" >> /tmp/tmp_liste_photos1     
    else
        let $[erreur_1 += 1]
        echo "${old_name}" >> /tmp/tmp_erreurs

    fi
        
        #Incrémente le nombre de paramètre
        let $[compteur += 1] 
     
        done

}

## Classe par ordre chronologique et renomme les photos et vidéos par un nom personnalise avec compteur (ex : 0001_vacances.jpg)
rename_text ()
{

erreur_2="0"    # initialisation du compteur d'erreurs à 0

#Trier le fichier temporaire 1 comprennant la liste des photos et vidéos renommées avec la date de la prise de vue     
sort /tmp/tmp_liste_photos1 -o /tmp/tmp_liste_photos1
        
    #Lire le fichier ligne par ligne 
    while read line 
    do 

        #Date du fichier actuel (tag) > date_time 
        date_time=`exiftool -T -filemodifydate ./"${dossier}"/"$line"`

        #Extension du fichier actuel > extension (ex .jpg)
        extension=`echo ./"${dossier}"/"$line" | awk -F "." '{print $NF}' | tr 'a-z' 'A-Z'`
        
        if [ ${#var_numero} -eq 1 ]; then            
            numero=000$var_numero
        fi

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

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

        if [ ${#var_numero} -eq 4 ]; then            
            numero=$var_numero
        fi
        
        #Recompose le nouveau nom du fichier (ex 0001_vacances.jpg)
        new_name=`echo ${numero}_${nom_photo}.${extension}` 

        #On renomme le fichier en le copiant
        cp ./"${dossier}"/"$line" ./"${dossier}"/"${new_name}"

            
        #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     

        rm -f ./"${dossier}"/"$line"  
        #Recopie la date originale de la photo / video
        exiftool -filemodifydate="$date_time" ./"${dossier}"/"${new_name}"

            echo "${new_name}" >> /tmp/tmp_liste_photos2
    else 

            let $[erreur_2 += 1] 
        echo "${dossier}"/"$line" >> /tmp/tmp_erreurs
        fi
        
        #Incrémente le compteur
        let $[var_numero += 1]

    done < /tmp/tmp_liste_photos1
    
}

#Compresse les photos et videos
compresser ()
{

erreur_3=0     # initialisation du compteur d'erreurs à 0

    #Trier le fichier temporaire 2 comprennant la liste des photos et vidéos renommé avec un index suivant l'ordre chronologique        
#   sort /tmp/tmp_liste_photos2 -o /tmp/tmp_liste_photos2

        
    #Lire le fichier ligne par ligne 
cat /tmp/tmp_liste_photos2 | while read line
    do 

    #nom du fichier
    name=`echo $line | cut -f1 -d.`

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

    #Date du fichier actuel (tag) > date_time 
    date_time=`exiftool -T -filemodifydate ./"${dossier}"/"$line"`
       

if [ "$extension" = "JPG" ]; then
{

convert -compress JPEG -quality 85 ./"${dossier}"/"$line" ./"${dossier}"/"${name}".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     

        rm -f ./"${dossier}"/"$line"
        #Recopie la date originale de la photo / video
        exiftool -filemodifydate="$date_time" ./"${dossier}"/"${name}".jpg

    else 

                let $[erreur_3 += 1] 
        echo "${dossier}"/"$line" >> /tmp/tmp_erreurs
  
    fi
}
fi

if [ "$extension" = "AVI" ]; then
{
mencoder ./"${dossier}"/"$line" -ovc xvid -xvidencopts bitrate=1500 -oac mp3lame -lameopts cbr:br=128 -o ./"${dossier}"/"${name}".avi

        #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     

        rm -f ./"${dossier}"/"$line"
        #Recopie la date originale de la photo / video
        exiftool -filemodifydate="$date_time" ./"${dossier}"/"${name}".avi

    else 
 
                let $[erreur_3 += 1]
        echo "${dossier}"/"$line" >> /tmp/tmp_erreurs
    fi
}
fi

    done < /tmp/tmp_liste_photos2

}

#Donne le status final après traitement
status_final ()
{
echo "Le traitement des photos et des vidéos est maintenant TERMINE!" 
echo " "
echo "Le nombre de photos et vidéos ayant été traités est de: $nb_param"
echo "Le déplacement des photos et vidéos dans un dossier $dossier s'est fait avec $erreur_1 erreur(s)" 
echo "Le renommage chronologique des photos et vidéos s'est fait avec $erreur_2 erreur(s)" 
echo "La compression des JPG et AVI s'est fait avec $erreur_3 erreur(s)"
echo " "
echo "En cas d'erreur(s), veuillez ouvrir le fichier /tmp/tmp_erreurs pour lister les fichiers en erreur"
echo " "
echo "Vous pouvez maintenant fermer cette fenêtre ..."
}



## Main

## Variables
nb_param="$#"      # nb de paramètres passés au script

#Supression du fichier temporaire
rm /tmp/tmp_liste_photos1
rm /tmp/tmp_liste_photos2
rm /tmp/tmp_erreurs

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

numero

nom_photo

nom_dossier

creation_dossier "$@"

rename_date "$@" | zenity  --progress --text="Transfers des photos et des videos dans le dossier: $dossier" --pulsate --auto-close

rename_text | zenity --progress --text="Renomage des photos et des vidéos par ordre chronologique" --pulsate --auto-close

compresser | zenity --progress --text="Compression des photos et des vidéos" --pulsate --auto-close

status_final | zenity --text-info --title "Script de classement de photos et vidéos" --width=900 --height=350

exit 0;

Tu emploie des syntaxes très "datées", qui ont plus ou moins étés modifiés car mal venue et/ou génératrice de bugs.
Je pense que tu peux remplacer par exemple :

date_time=`exiftool -T -filemodifydate "$parametre"`

par

date_time=$(exiftool -T -filemodifydate "$parametre")

et

let $[erreur_1 += 1]

par

let erreur_1++

ou encore

tr 'a-z' 'A-Z'

par

tr "[:lower:]" "[:upper:]"

pour la conformité POSIX.


La réponse est 42

Hors ligne

#4 Le 05/10/2009, à 22:15

gari126

Re : [Résolu] Script classement renommage compression photos et vidéos

Bonsoir Twocats et merci pour tes conseils .... je vais modifier mon script en conséquence ...

Hors ligne

#5 Le 08/10/2009, à 23:07

gari126

Re : [Résolu] Script classement renommage compression photos et vidéos

Bon et bien j'ai trouvé une solution de contournement pas très élégante en créant des fichiers temporaires, contenant les valeurs de mes variables d'erreurs .... que je rappelle en fin de script, lorsque j'en ai besoin!

Ci-joint, donc, le Script revue et corrigé (en prenant aussi en considération les remarques de Twocats) !
Mais cela n'explique toujours pas le problème initial avec Zenity ..... (donc je ne considère pas le sujet comme résolu même si j'ai trouvé un façon de contourner le problème!)

En espérant que ce script puisse servir à d'autres .... voici donc une version qui marche !!!

#!/bin/bash

# A placer dans /home/$USER/.gnome2/nautilus-scripts/
#################################################################################################
# Libre - Licence: GNU / GPL 
#################################################################################################
# 
# Ce script:
#    - range dans un dossier spécifique,
#    - classe par ordre chronologique,
#    - renomme,
#    - re-oriente les photos prises de coté,
#    - compresse/converti les photos de type JPG et vidéos de type AVI, MOV, MTS prises par un APN.
#    (La compression des vidéos de type MTS est toujours en cours de débogage mais marche avec les .MTS de mon panasonic TZ7!!!)
#    
# il est fortement inspiré du script "Classer ses photos d'après la date de prise de vue"
# voir http://forum.ubuntu-fr.org/viewtopic.php?id=277087 Dont je tiens à remercier l'auteur!
#
#################################################################################################
# Ce script, 
# -Transfère les photos et vidéos sélectionnées dans un dossier du type "(aaaa-mm-jj) évènement"    
#  (aaaa-mm-jj) étant issue des données Exif du premier fichier selectionné -> compatible avec les evènements qui dépassent minuit!
# -Tri les photos et vidéos suivant leurs date de prise de vue (en fonction des données Exif)
# -Renomme les photos et vidéos par ordre chronologique suivant le type "###_évènement"
# -Re-oriente les photos prises de coté (en fonction des données Exif),
# -Comprime les photo au format JPG en Qualité 85 (optimum qualité/taille a mon avis!)
# -Converti les vidéos au format AVI en qualité Xvid 2000kbps
# -Converti les vidéos au format MOV en qualité Xvid 2000kbps
# -Converti les vidéos au Format MTS en qualité Xvid 2000kbps
# -Re-"tag" les photos et les vidéos déplacées-renommées-converties avec leur date de prise de vue originale
# -Informe du succès ou non des opérations accomplies (de façon visuelle et sonore)
#
# A noter:
# 1-L'extension des fichiers non comprimé est en "MAJUSCULES", et en "minuscules" une fois comprimé
# (ça peut aider pour reconnaitre les fichiers comprimés de ceux qui ne le sont pas encore!)
# 2-La date utilisée pour nommer le dossier est celle du premier fichier sélectionné.
# (Ainsi, un évènement qui dépasse minuit garde pour date, celle du début de l'évènement!)
# 3-Lors du traitement des photos, celles-ci sont automatiques tournées de façon à être
# correctement orientées, quel que soit le logiciel de visualisation que vous utilisez!
#
#################################################################################################
# Dépendances
#  - Nécessite le paquet Exiftool (pour la lecture et l'écriture des tag des photos et vidéos)
#    (Exiftool version>7.83 si besoin de compatibilité avec fichiers M2TS ou MTS)
#  - Nécessite le paquet Zenity (Pour les fenêtres de dialogues)
#  - Nécessite le paquet Mencoder (Pour la compression des vidéos au format AVI)
#  - Nécessite le paquet Libjpeg-progs (Pour la rotation des photos) 
#  - Nécessite le paquet Imagemagick (Pour la compression desphotos au format JPG)
#  - Nécessite le paquet espeak (pour la synthèse vocale)
#    => sudo apt-get install libimage-exiftool-perl zenity mencoder libjpeg-progs imagemagick espeak
#  - et aussi peut-être pour la compression en Xvid des paquets suivant (à confirmer) 
#    => sudo apt-get install libavcodec-unstripped-52 libavdevice-unstripped-52 libavfilter-unstripped-0 libavformat-unstripped-52 libavutil-unstripped-49 libpostproc-unstripped-51 libswscale-unstripped-0
#################################################################################################
# 03/10/09 - v0.9 - Création (un bug->le nombre d'erreurs n'est bizarement pas affiché dans la fenêtre finale)
# 15/10/09 - v1.0 - Version qui marche pour les photos de type JPG et vidéo de type AVI et MOV (MJPEG)  
# 06/09/10 - v2.0 - Quelques corrections mineures, et ajout de la conversion des vidéos .MTS pour mon panasonic TZ7
# 12/09/10 - v2.1 - Ajout du la compression des videos en deux passes
# 18/09/10 - v2.2 - Ajout de la gestion des "date de creation" des fichiers pour créer le nom du dossier de rangement et corriger les tag, 
#                   lorsque celle-xi existe -> sinon "date de mofification" (qui existe toujours) est utilisé (cas des versions precedentes) 
#################################################################################################


## Variables
nb_param="$#"      # nb de paramètres passés au script
var_numero=${var_numero:-1}
nom_photo="${nom_photo:-Photo}"
nom_dossier="${nom_dossier:-"${nom_photo}"}"


## Message d'information si aucun fichier n'est sélectionné
information ()
{
if [ "$1" -eq 0 ]; then 
zenity --info --title "Script de classement-renommage_compression de photos et de vidéos" --text "Ce script est à utiliser uniquement pour les photos et vidéos prises par un APN (dont les tags contiennent l'heure de prise de vue) \r\rProcédure: \r\r1) Classer les photos et les vidéos en (liste) et par (date de modification) avec Nautilus \r\r2) Sélectionner les photos et vidéos à classer d'un même événement \r\r3)  Lancer ce script, qui va \r\t-Transférer les photos et vidéos sélectionnées dans un dossier du type '(aa-mm-jj) évènement' \r\t-Classer et modifier le nom de ces photos et vidéos suivant le type '####_évènement' \r\t-Compresser les photo JPG en Qualité 85 et les vidéos en Xvid 2000kbps " --width=600 --height=400
exit 
fi
}

## Warning au sujet de l'utilisation de ce script
warning_script ()
{
zenity --warning --title "Attention !!!" --text "Ce script est à utiliser à vos risques et périls ! \r\r Si c'est la première fois que vous l'utilisez:  \r\r1) Veuillez vous assurer que vous travaillez sur des copies de vos fichiers \r\r2) Vérifiez que ce script fait bien ce que vous attendez de lui \r\r3)  Que la qualité des fichiers après traitement vous convient \r\r4) Ne pas oublier de classer les photos et les vidéos en (liste) et par (date de modification) avec Nautilus avant d'utiliser ce script \r\r5) Veuillez vous assurer d'avoir installé toutes les dépendances => apt-get install libimage-exiftool-perl zenity mencoder libjpeg-progs imagemagick espeak \r\r\r\Pour plus d'infos au sujet de ce script, lancer-le sans sélectionner de fichier \r\r\r\-Merci pour votre compréhension et votre intérêt pour ce script!! " --width=600 --height=500
}

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


## Fonction du choix du nom commun des photos
nom_photo ()
{    
    nom_photo=$(zenity --entry --width=500 --height=50 \
        --title "Nom personnalisé des photos" \
        --text "Quel nom commun voulez-vous pour cette série de photos et vidéos?" \
        --entry-text="Photo"     )
        if [ $? -eq 1 ];then exit; fi;
    echo "$nom_photo"
}

## Fonction du choix du nom commun du dossier
nom_dossier ()
{
    nom_dossier=$(zenity --entry --width=500 --height=50 \
        --title "Nom personnalisé du dossier" \
        --text "Quel nom voulez-vous donner au dossier où les fichiers seront transférées?" \
        --entry-text="$nom_photo"     )
        if [ $? -eq 1 ];then exit; fi;
    echo "$nom_dossier"
}


## Creation du dossier ou seront stockées les photos
creation_dossier ()
{

for parametre in "$1";

do
        #Date originale (ou de modification en fonction de celle disponible i.e. vidéos) du premier fichier sélectionné (tag) > date_time 
        date_time=$(exiftool -T -datetimeoriginal "$parametre")
    if [ "$date_time" = "-" ] || [ "$date_time" = "" ];
    then date_time=$(exiftool -T -filemodifydate "$parametre")
    fi

        #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) 
 
    #Recompose le nom du dossier (ex (2006-11-04)_vacances)
    dossier=$(echo "("${aa}-${mm}-${jj}")"" "${nom_dossier}) 

    mkdir ./"${dossier}"

done
}

## Renomme les fichiers sélectionnées avec la date originale (date de modification - car la seule qui existe pour les photos et les vidéos)
## Et les places dans le dossier précédemment créé
rename_date ()
{

compteur=1   # initialisation du compteur à 1
erreur_1=0   # initialisation du compteur d'erreurs à 0


    # pour chaque fichier sélectionne
        for parametre in "$@"; 
        do

        #Fichier actuel > old_name                
        old_name="$parametre" 

        #Date du fichier actuel (tag) > date_time 
        date_time=$(exiftool -T -filemodifydate "$parametre")

        #Extension du fichier actuel > extension (ex .jpg)
                extension=$(echo $parametre | awk -F "." '{print $NF}' | tr "[:lower:]" "[:upper:]")

        #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" ./"${dossier}"/"${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     
            rm -f "$old_name" 
        #Recopie la date originale de la photo / video
            exiftool -filemodifydate="$date_time" ./"${dossier}"/"${new_name}"
                echo "${new_name}" >> /tmp/tmp_liste_photos1     
        else
            let erreur_1++
            echo "${old_name}" >> /tmp/tmp_erreurs
    fi
        
        #Incrémente le nombre de paramètre
        let compteur++
     
        done

echo $erreur_1 >> /tmp/tmp_erreur_1       

}

## Classe par ordre chronologique et renommer les photos d'un format Date (ex : 2006-11-04_19.41_007.jpg)
##  par un nom personnalise (ex : 007_Photo.JPG)
rename_text ()
{

erreur_2=0    # initialisation du compteur d'erreurs à 0

#Trier le fichier temporaire 1 comprenant la liste des photos et vidéos renommées avec la date de la prise de vue     
sort /tmp/tmp_liste_photos1 -o /tmp/tmp_liste_photos1
        
    #Lire le fichier ligne par ligne 
    while read line 
    do 

        #Date du fichier actuel (tag) > date_time 
        date_time=$(exiftool -T -filemodifydate ./"${dossier}"/"$line")

        #Extension du fichier actuel > extension (ex .jpg)
        extension=$(echo ./"${dossier}"/"$line" | awk -F "." '{print $NF}' | tr "[:lower:]" "[:upper:]")
        
        if [ ${#var_numero} -eq 1 ]; then numero=00$var_numero
        fi

        if [ ${#var_numero} -eq 2 ]; then numero=0$var_numero
        fi

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

#        if [ ${#var_numero} -eq 4 ]; then numero=$var_numero
#        fi
        
         #Recompose le nouveau nom du fichier (ex 0001_vacances.jpg)
        new_name=$(echo ${numero}_${nom_photo}.${extension}) 

        #On renomme le fichier en le copiant
        cp ./"${dossier}"/"$line" ./"${dossier}"/"${new_name}"

            
        #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     

        rm -f ./"${dossier}"/"$line"  
        #Recopie la date originale de la photo / video
        exiftool -filemodifydate="$date_time" ./"${dossier}"/"${new_name}"

            echo "${new_name}" >> /tmp/tmp_liste_photos2
    else 

            let erreur_2++
        echo "${dossier}"/"$line" >> /tmp/tmp_erreurs
        fi
        
        #Incrémente le compteur
        let var_numero++

    done < /tmp/tmp_liste_photos1
    
echo "$erreur_2" >> /tmp/tmp_erreur_2
}

#Compresse les photos et vidéos
compresser ()
{

erreur_3=0     # initialisation du compteur d'erreurs à 0

    # charge le fichier /tmp/tmp_liste_photo2
    less /tmp/tmp_liste_photos2
        
    #Lire le fichier ligne par ligne 
    while read line
    do 

    #nom du fichier
    name=$(echo $line | cut -f1 -d.)

        #Extension du fichier actuel > extension (ex .jpg)
        extension=$(echo ./"${dossier}"/"$line" | awk -F "." '{print $NF}' | tr "[:lower:]" "[:upper:]")
    #Date du fichier actuel (tag) > date_time 
        date_time=$(exiftool -T -datetimeoriginal ./"${dossier}"/"$line")
    if [ "$date_time" = "-" ] || [ "$date_time" = "" ];
    then date_time=$(exiftool -T -filemodifydate ./"${dossier}"/"$line")
    fi
       

if [ "$extension" = "JPG" ]; then
{

#retourne la photo et reset son tag d'orientation
exifautotran ./"${dossier}"/"$line" 
# Compresse la photo en qualité JPG 85
convert -compress JPEG -quality 85 ./"${dossier}"/"$line" ./"${dossier}"/"${name}".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     

        rm -f ./"${dossier}"/"$line"
        #Recopie la date originale de la photo / video
        exiftool -filemodifydate="$date_time" ./"${dossier}"/"${name}".jpg

    else 

        let erreur_3++
        echo "${dossier}"/"$line" >> /tmp/tmp_erreurs
  
    fi


}
fi

if [ "$extension" = "AVI" ]; then
{

# Choisissez une des lignes ci dessous, celle à de-commenter qui permet d'avoir les meilleurs résultats de fichier .avi
# Encodage en 1 passe ou encodage en 2 passes
# mencoder ./"${dossier}"/"$line" -ovc xvid -xvidencopts bitrate=2500  -mc 0 -oac mp3lame -lameopts cbr:br=128 -o ./"${dossier}"/"${name}".avi
mencoder ./"${dossier}"/"$line" -ovc xvid -xvidencopts bitrate=2500:pass=1 -mc 0 -oac mp3lame -lameopts cbr:br=128 -o /dev/null && mencoder ./"${dossier}"/"$line" -ovc xvid -xvidencopts bitrate=2500:pass=2 -mc 0 -oac mp3lame -lameopts cbr:br=128 -o ./"${dossier}"/"${name}".avi

        #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     

        rm -f ./"${dossier}"/"$line"
        #Recopie la date originale de la photo / video
        exiftool -filemodifydate="$date_time" ./"${dossier}"/"${name}".avi

    else 
 
        let erreur_3++
        echo "${dossier}"/"$line" >> /tmp/tmp_erreurs
    fi
}
fi

if [ "$extension" = "MPG" ]; then
{

# Choisissez une des lignes ci dessous, celle à de-commenter qui permet d'avoir les meilleurs résultats de fichier .avi
# Encodage en 1 passe ou encodage en 2 passes
# mencoder ./"${dossier}"/"$line" -ovc xvid -xvidencopts bitrate=2500  -mc 0 -oac mp3lame -lameopts cbr:br=128 -o ./"${dossier}"/"${name}".avi
mencoder ./"${dossier}"/"$line" -ovc xvid -xvidencopts bitrate=2500:pass=1 -mc 0 -oac mp3lame -lameopts cbr:br=128 -o /dev/null && mencoder ./"${dossier}"/"$line" -ovc xvid -xvidencopts bitrate=2500:pass=2 -mc 0 -oac mp3lame -lameopts cbr:br=128 -o ./"${dossier}"/"${name}".avi

        #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     

        rm -f ./"${dossier}"/"$line"
        #Recopie la date originale de la photo / video
        exiftool -filemodifydate="$date_time" ./"${dossier}"/"${name}".avi

    else 
 
        let erreur_3++
        echo "${dossier}"/"$line" >> /tmp/tmp_erreurs
    fi
}
fi

if [ "$extension" = "MOV" ]; then
{

# Choisissez une des lignes ci dessous, celle à de-commenter qui permet d'avoir les meilleurs résultats de fichier .avi
# Encodage en 1 passe ou encodage en 2 passes
# mencoder ./"${dossier}"/"$line" -ovc xvid -xvidencopts bitrate=2500  -mc 0 -oac mp3lame -lameopts cbr:br=128 -o ./"${dossier}"/"${name}".avi
mencoder ./"${dossier}"/"$line" -ovc xvid -xvidencopts bitrate=2500:pass=1 -mc 0 -oac mp3lame -lameopts cbr:br=128 -o /dev/null && mencoder ./"${dossier}"/"$line" -ovc xvid -xvidencopts bitrate=2500:pass=2 -mc 0 -oac mp3lame -lameopts cbr:br=128 -o ./"${dossier}"/"${name}".avi

        #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     

        rm -f ./"${dossier}"/"$line"
        #Recopie la date originale de la photo / video
        exiftool -filemodifydate="$date_time" ./"${dossier}"/"${name}".avi

    else 
 
        let erreur_3++
        echo "${dossier}"/"$line" >> /tmp/tmp_erreurs
    fi
}
fi

if [ "$extension" = "MTS" ]; then
{

# Choisissez une des lignes ci dessous, celle à de-commenter qui permet d'avoir les meilleurs résultats de fichier .avi
# Encodage en 1 passe ou encodage en 2 passes
# mencoder ./"${dossier}"/"$line" -ovc xvid -xvidencopts bitrate=5000 -demuxer lavf -sws 3  -mc 0 -fps 25 -ofps 50 -oac mp3lame -lameopts cbr:br=128 -o ./"${dossier}"/"${name}".avi
mencoder ./"${dossier}"/"$line" -ovc xvid -xvidencopts bitrate=10000:pass=1 -demuxer lavf -sws 3  -mc 0 -fps 25 -ofps 50 -oac mp3lame -lameopts cbr:br=128 -o /dev/null && mencoder ./"${dossier}"/"$line" -ovc xvid -xvidencopts bitrate=10000:pass=2 -demuxer lavf -sws 3  -mc 0 -fps 25 -ofps 50 -oac mp3lame -lameopts cbr:br=128 -o ./"${dossier}"/"${name}".avi

        #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     

#        rm -f ./"${dossier}"/"$line"  #(toujours en cours de debogage, donc je garde encore le fichier original)
        #Recopie la date originale de la photo / video
        exiftool -filemodifydate="$date_time" ./"${dossier}"/"${name}".avi

    else 
 
        let erreur_3++
        echo "${dossier}"/"$line" >> /tmp/tmp_erreurs
    fi
}
fi


    done < /tmp/tmp_liste_photos2

echo "$erreur_3" >> /tmp/tmp_erreur_3


}

#Donne le status final après traitement
status_final ()
{

#E_1=$(cat /tmp/tmp_erreur_1)
#E_2=$(cat /tmp/tmp_erreur_2)
#E_3=$(cat /tmp/tmp_erreur_3)

echo "Le traitement des photos et des vidéos est maintenant TERMINE!" 
echo " "
echo "Le nombre de photos et vidéos ayant été traités est de: $nb_param"
echo "Le déplacement des photos et vidéos dans un dossier $dossier s'est fait avec $E_1 erreur(s)" 
echo "Le renommage chronologique des Photos et Vidéos s'est fait avec $E_2 erreur(s)" 
echo "La compression des Photos et Vidéos s'est fait avec $E_3 erreur(s)"
echo " "
echo "En cas d'erreur(s), veuillez ouvrir le fichier /tmp/tmp_erreurs pour lister les fichiers en erreur"
echo " "
echo "Vous pouvez maintenant fermer cette fenêtre ..."
}


## Main

#Supression du fichier temporaire
rm /tmp/tmp_liste_photos1
rm /tmp/tmp_liste_photos2
rm /tmp/tmp_erreurs
rm /tmp/tmp_erreur_1
rm /tmp/tmp_erreur_2
rm /tmp/tmp_erreur_3

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

#warning_script #A commenter avec un "#" en debut de ligne si vous ne voulez plus avoir l'annonce "Attention"!

numero

nom_photo

nom_dossier

creation_dossier "$@"

rename_date "$@" | zenity  --progress --text "Déplacement des photos et des videos dans le dossier: $dossier" --pulsate --auto-close

rename_text | zenity --progress --text "Renommage des photos et des vidéos par ordre chronologique" --pulsate --auto-close

compresser | zenity --progress --text "Compression des photos et des vidéos en cours ..." --pulsate --auto-close

E_1=$(cat /tmp/tmp_erreur_1)
E_2=$(cat /tmp/tmp_erreur_2)
E_3=$(cat /tmp/tmp_erreur_3)

if [ $E_1 = "0" ] && [ $E_2 = "0" ] && [ $E_3 = "0" ]; then
echo "OK" | espeak -v fr+f2
else
echo "Attention" | espeak -v fr+f2
fi

status_final | zenity --text-info --title "Script de classement de photos et vidéos" --width=900 --height=350


exit 0;

Toutes améliorations/questions sont les bienvenues !!!

Dernière modification par gari126 (Le 29/11/2010, à 21:54)

Hors ligne

#6 Le 09/10/2009, à 17:13

twocats

Re : [Résolu] Script classement renommage compression photos et vidéos

rename_date ()
{

compteur=1   # initialisation du compteur à 1
erreur_1=0     # initialisation du compteur d'erreurs à 0


    # pour chaque fichier selectionné
        for parametre in "$@"; 
        do

        #Fichier actuel > old_name                
        old_name="$parametre" 

        #Date du fichier actuel (tag) > date_time 
        date_time=$(exiftool -T -filemodifydate "$parametre")

        #Extension du fichier actuel > extension (ex .jpg)
                extension=$(echo $parametre | awk -F "." '{print $NF}' | tr "[:lower:]" "[:upper:]")

        #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})

Quelques modifications sur ce passage :

rename_date ()
{

compteur=1   # initialisation du compteur à 1
erreur_1=0     # initialisation du compteur d'erreurs à 0


    # pour chaque fichier selectionné
        for parametre in "$@"; 
        do

        #Fichier actuel > old_name                
        old_name="$parametre" 

        #Date du fichier actuel (tag) > date_time 
        date_time=$(exiftool -T -filemodifydate "$parametre")

        #Extension du fichier actuel > extension (ex .jpg)
                extension=$(echo ${parametre##*[[:punct:]]} | tr "[:lower:]" "[:upper:]")

        #Décompose date et heure dans différentes variables
		DATE_ID=$(echo $date_time | awk '{gsub(/:/,"-"); print $1}')
		HOUR_ID=$(echo $date_time | awk '{sub(/+/," ");gsub(/:/,"\."); print $2}')
    
                #Mise en forme de la numérotation (ajoute des 0 suivant la longueur du compteur)       
		numero=$(printf "%03d" $compteur)

        #Recompose le nom du fichier. ex: 2006-11-04_19.41_num.jpg
		new_name=${DATE_ID}_${HOUR_ID}_${numero}.${extension}

Attention, je n'ai pas testé. Néanmoins ces modifications devraient pouvoir s'appliquer à d'autres partie similaires du script.

Dernière modification par twocats (Le 09/10/2009, à 17:17)


La réponse est 42

Hors ligne

#7 Le 12/10/2009, à 09:28

gari126

Re : [Résolu] Script classement renommage compression photos et vidéos

Merci encore Twocats pour tes conseils ...
A l'occas, sais-tu ou je peux trouver un tutoriel qui m'aiderais à écrire correctement des scripts Bash ?
(conformité POSIX)

Merci.

A plus.

Hors ligne

#8 Le 12/10/2009, à 10:29

twocats

Re : [Résolu] Script classement renommage compression photos et vidéos

http://abs.traduc.org/abs-fr/


La réponse est 42

Hors ligne