Bonjour à tous,
Merci Ferod pour ce bout de code. Pour ma part, j'avais fait un script un tout petit peu différent (qui permettait de choisir les images une à une). J'ai trouvé ton idée pas mal. Du coup, j'ai fusionné nos deux scripts. Et cerise sur le gâteau, il s'agit d'un script nautilus.
Pour ceux qui ne connaissent pas les scripts nautilus :
doc
Voici le code :
#!/bin/bash
#auteurs : Vaderf <vaderf at free point fr> & Ferod
#version : 1.0
#date de création : 2010-09-14
#date de modification : 2010-12-10
#licence : GPL v2
#--------------
# Commentaires
#--------------
# Ce script n'est pas garanti sans bugs (même après de très nombreux tests) et est à utiliser à vos risques et périls.
# Il doit être exécuté sur un dossier.
#-----------
# Variables
#-----------
# c : variable arbitraire
# cx : choix
# d : dossier de stockage du fichier .xml
# r : réponse
# nb : nombre d'éléments
# nt : nom du chemin retraité
# ti : temps d'affichage de l'image
# tt : temps de transition
#-------------------------------------
# Entrées des paramètres du diaporama
#-------------------------------------
cx=$(zenity --list --title="Créateur de fonds d'écran animés" --text="Voulez-vous traiter le dossier en une seule fois ou choisir chaque image ?" --column="Votre choix :" Oui Non); if [ $? -eq 1 ];then exit 1; fi;
n=$(zenity --entry --title="Créateur de fonds d'écran animés" --text="Quel nom donné au fichier de configuration (ex.: Paysages d'été) ?"); if [ $? -eq 1 ];then exit 1; fi;
zenity --info --title="Créateur de fonds d'écran animés" --text="Vous allez maintenant sélectionner le dossier dans lequel le fichier sera sauvegardé."
d=$(zenity --file-selection --title="Créateur de fonds d'écran animés" --filename="$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" --directory); if [ $? -eq 1 ];then exit 1; fi;
tt=$(zenity --entry --title="Créateur de fonds d'écran animés" --text="Combien de temps doit durer la transition entre deux images ? (temps en secondes)" --entry-text="5"); if [ $? -eq 1 ];then rm "$d/$n.xml"; exit 1; fi;
ti=$(zenity --entry --title="Créateur de fonds d'écran animés" --text="Combien de temps l'image restera-t-elle a l'écran ? (temps en secondes)" --entry-text="1800"); if [ $? -eq 1 ];then rm "$d/$n.xml"; exit 1; fi;
#---------------------------------------------------------------
# Traitement de l'ensemble du dossier (partie créée par Ferod)
#---------------------------------------------------------------
case $cx in
Oui)
nt=$(echo "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" | sed 's/ /\ /g') #Ajoute un caractère d'échappement aux espaces
l=$(ls "$nt"/*.jp*)
IFS=$'\n' #Change le séparateur standard (espace) pour RETURN (utile pour $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS)
nb=$(echo "$l" | sed -n '$=')
touch "$d/$n.xml"
echo "<background>" > "$d/$n.xml"
echo " <starttime>" >> "$d/$n.xml"
echo " <year>2009</year>" >> "$d/$n.xml"
echo " <month>08</month>" >> "$d/$n.xml"
echo " <day>04</day>" >> "$d/$n.xml"
echo " <hour>00</hour>" >> "$d/$n.xml"
echo " <minute>00</minute>" >> "$d/$n.xml"
echo " <second>00</second>" >> "$d/$n.xml"
echo " </starttime>" >> "$d/$n.xml"
echo "<!-- This animation will start at midnight. -->" >> "$d/$n.xml"
rank=1
for i in $l ; do
ligneFile="<file>""$i""</file>"
ligneFrom="<from>""$i""</from>"
ligneTo="<to>""$i""</to>"
if [[ $rank -eq 1 ]]; then
premierFichier=$i
echo " <static>" >> "$d/$n.xml"
echo " <duration>$ti</duration>" >> "$d/$n.xml"
echo " "$ligneFile >> "$d/$n.xml"
echo " </static>" >> "$d/$n.xml"
echo " <transition>" >> "$d/$n.xml"
echo " <duration>$tt</duration>" >> "$d/$n.xml"
echo " "$ligneFrom >> "$d/$n.xml"
((cp ++)) #Compteur nécessaire pour zenity
echo $((rank*100/nb)) #Incrémentation du compteur
let $[ rank=$rank+1 ]
else
echo " "$ligneTo >> "$d/$n.xml"
echo " </transition>" >> "$d/$n.xml"
echo " <static>" >> "$d/$n.xml"
echo " <duration>1795.0</duration>" >> "$d/$n.xml"
echo " "$ligneFile >> "$d/$n.xml"
echo " </static>" >> "$d/$n.xml"
echo " <transition>" >> "$d/$n.xml"
echo " <duration>5.0</duration>" >> "$d/$n.xml"
echo " "$ligneFrom >> "$d/$n.xml"
((cp ++)) #Compteur nécessaire pour zenity
echo $((rank*100/nb)) #Incrémentation du compteur
let $[ rank=$rank+1 ]
fi
done | zenity --progress --title="Créateur de fonds d'écran animés" --text="La construction est en cours" --auto-close; if [ $? -eq 1 ];then exit; fi;
ligneTo="<to>""$premierFichier""</to>"
echo " "$ligneTo >> "$d/$n.xml"
echo " </transition>" >> "$d/$n.xml"
echo "</background>" >> "$d/$n.xml"
;;
esac
#------------------------------
# Traitement images par images
#------------------------------
case $cx in
Non)
# Entête du fichier de configuration
cat > "$d/$n.xml" << EOF
<background>
<starttime>
<year>2009</year>
<month>08</month>
<day>04</day>
<hour>00</hour>
<minute>00</minute>
<second>00</second>
</starttime>
<!-- This animation will start at midnight. -->
EOF
# Ajout du premier chemin dans le fichier de configuration
f1=$(zenity --file-selection --title="Créateur de fonds d'écran animés" --separator=" "); if [ $? -eq 1 ];then rm "$d/$n.xml"; exit 1; fi;
cat >> "$d/$n.xml" << EOF
<static>
<duration>$ti</duration>
<file>$f1</file>
</static>
<transition>
<duration>$tt</duration>
<from>$f1</from>
EOF
# Ajout des chemins suivant dans le fichier
c=0
while [[ $c -eq 0 ]]
do
fx=$(zenity --file-selection --title="Créateur de fonds d'écran animés" --filename="$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" --separator=" "); if [ $? -eq 1 ];then rm "$d/$n.xml"; exit 1; fi;
cat >> "$d/$n.xml" << EOF
<to>$fx</to>
</transition>
<static>
<duration>$ti</duration>
<file>$fx</file>
</static>
<transition>
<duration>$tt</duration>
<from>$fx</from>
EOF
r=$(zenity --list --title="Créateur de fonds d'écran animés" --text="Voulez-vous ajouter un autre fichier ?" --column="Votre choix :" Oui Non); if [ $? -eq 1 ];then rm "$d/$n.xml"; exit 1; fi;
case $r in
Oui)
;;
Non)
c=1
;;
esac
done
# Finalisation du fichier fichier
cat >> "$d/$n.xml" << EOF
<to>$f1</to>
</transition>
</background>
EOF
;;
esac
#---------------------------------------------------------
# Ajout du fichier diaporama à la liste des fonds d'écran
#---------------------------------------------------------
r=$(zenity --list --title="Créateur de fonds d'écran animés" --text="Voulez-vous ajouter votre diaporama à la liste des fonds d'écran ? (conseillé) (ne fonctionne qu'avec Gnome)" --column="Votre choix :" Oui Non); if [ $? -eq 1 ];then rm "$d/$n.xml"; exit 1; fi;
case $r in
Oui)
gnome-appearance-properties "$d/$n".xml
;;
Non)
;;
esac
exit 0
Pour qu'il soit intégré au menu déroulant de nautilus, voici la marche à suivre :
- Ouvrir le dossier ~/.gnome2/nautilus-scripts.
- Ajouter un fichier vierge qu'on peut nommer Créateur de fonds d'écran animés par exemple
- Y coller le code ci-dessus
- Rendre ce script exécutable comme suit :
chmod u+x ~/.gnome2/nautilus-scripts/Créateur de fonds d'écran animés
- En cliquant droit sur le dossier qui contient les images, choisir le menu Scripts -> Créateur de fonds d'écran animés
Je suis ouvert à toute critique ou suggestion !
En espérant que ma modeste contribution aide quelques personnes !
A+