j’aimerais convertir des fichiers multimédias en mp3 depuis nautilus en executant un script externe. J’y arrive de cette façon, en plaçant le script suivant dans ~/.gnome2/nautilus-script
Et ça marche bien avec un fichier à la fois.
Maintenant ce que j’aimerai c’est sélectionner plusieurs fichiers et appliquer le script en une seule fois depuis nautilus…
Est-ce possible? La fonction de nautilus est-elle capable de lire plusieurs arguments? Et comment modifier le script? J’imagine qu’il faudra utilier une boucle for… Mais je ne maîtrise pas du tout…
je pense que nautilus peut le faire. Pour avoir tous les arguments, (autrement dit, les $1, $2, $3 …), il faut utiliser $@ .
Donc je verrai bien un truc du genre :
#!/bin/sh
for i in $@; do
ffmpeg -i "$i" -ac 2 -ab 192k -ar 44100 "$i".mp3
done
Ceci dit, les fichiers dont le nom contient des espaces poseront problème. C’est pour ça que j’ai rajouté les lignes avec $IFS (internal file separator) :
#!/bin/sh
v_=$IFS
IFS='
'
for i in $@; do
ffmpeg -i "$i" -ac 2 -ab 192k -ar 44100 "$i".mp3
done
IFS=$v_
exit 0
Malheureusement, mettre entre guillement ne suffit pas toujours. C’est pourquoi je change IFS (internal file separator). Cette variable dit en fait à l’interpréteur de commande ce qui sépare les fichiers. Par défaut c’est un espace, là, je le change en retour à la ligne, et à la fin, je le remet à sa valeur d’origine juste au cas où.
v_=$IFS : je sauvegarde la valeur actuelle de l’IFS, dans une variable “v_”, nom peu courant pour une variable.
Ensuite, je change l’IFS :
IFS=’
’
Enfin, une fois que tout est fini, je remet l’IFS à sa valeur de départ au cas où, mais normalement, comme il y a un exit à la fin du script ce n’est pas obligé, mais comme je ne suis pas sûr… :
IFS=$v_