#1 Le 04/05/2010, à 12:55
- cracolinux
Utiliser cpulimit dans un script [Résolu]
Bonjour les gens,
#!/bin/bash
# script wma -> mp3
IFS=$'\t\n'
cd $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS
for i in *.wma
do ffmpeg -i "$i" -ab 192k "${i%wma}mp3"
done
Voici mon script nautilus pour convertir du wma en mp3
Je cherche à inclure une limitation à ffmpeg afin de ne pas prendre 100% du cpu.
J'ai essayé ça avec cpulimit :
#!/bin/bash
# script wma -> mp3
cpulimit -e ffmpeg -l 20
IFS=$'\t\n'
cd $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS
for i in *.wma
do ffmpeg -i "$i" -ab 192k "${i%wma}mp3"
done
mais dans ce cas, le script ne se lance pas...sans que je sache pourquoi
A vot' bon coeur msieur dames...
Dernière modification par cracolinux (Le 05/05/2010, à 12:09)
Hors ligne
#2 Le 04/05/2010, à 14:00
- johndo
Re : Utiliser cpulimit dans un script [Résolu]
Bonjour,
Il me semble que cpulimit n'agit que sur les process actuellement en cours d'exécution.
Essaie donc ceci :
#!/bin/bash
# script wma -> mp3
IFS=$'\t\n'
cd $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS
for i in *.wma
do
ffmpeg -i "$i" -ab 192k "${i%wma}mp3" </dev/null &
cpulimit -z -e ffmpeg -l 20
done
EDIT :
Modification du script et ajout de l'option -z suite à la lecture de ceci
-z, --lazy
exit if there is no suitable target process, or if it dies
Cela signifie donc que cpulimit, sans l'option -z, ne rend pas la main s'il ne trouve pas le processus en question. En d'autre terme, j'ai "mal pensé" et qu'il est possible de l'utiliser pour des "exe" qui ne sont pas encore en cours d'exécution.
Cela explique aussi pourquoi tu avais l'impression que ton script ne se lance pas.
En rajoutant l'option -z, cela permet donc de quitter cpulimit lorsque ffmpeg aura fini de traiter le fichier "i"
Dernière modification par johndo (Le 04/05/2010, à 14:23)
Hors ligne
#3 Le 04/05/2010, à 15:45
- cracolinux
Re : Utiliser cpulimit dans un script [Résolu]
Formidable, je te remercie!
Une fois de plus, je correspond bien à cette option --lazy car je n'ai pas lu la man page en entier...:mad:
ffmpeg -i "$i" -ab 192k "${i%wma}mp3" </dev/null &
Est-ce que tu peux me dire à quoi sert cette partie du code (en gras)?
Est-ce que ça sert à rendre la main à la suite du script (donc vers cpulimit).
Au début je voulais essayer un truc du genre mais je me suis dis que bash attendrait à chaque fois la fin du traitement par ffmpeg avant de demander un cpulimit...et que donc il ne le trouverais jamais.
Merci de ton aide
Hors ligne
#4 Le 04/05/2010, à 17:49
- Totor
Re : Utiliser cpulimit dans un script [Résolu]
Bonsoir,
& : c'est pour mettre l'exécution de la commande en fond de tache et cela permet au script de passer à la ligne suivante
</dev/null : c'est pour remplacer la saisie clavier par "rien" car le fait de mettre en fond de tache une application qui scrute l'interruption clavier l'interrompt. Et comme ffmpeg scrute l'interruption clavier, il aurait été arrété si johndo n'avait pas précisé cette commande.
-- Lucid Lynx --
Hors ligne
#5 Le 04/05/2010, à 18:07
- cracolinux
Re : Utiliser cpulimit dans un script [Résolu]
Whah!! eh ben merci de tes précieuses lumières Totor!
Et merci encore à Johndo (à partir du moment ou tu me coupe pas la tête...)
Hors ligne
#6 Le 04/05/2010, à 18:31
- sputnick
Re : Utiliser cpulimit dans un script [Résolu]
A noter que Totor voulait dire "tache de fond et non "fond de tache" qui est plutôt destiné à la mère Denis et sa lessive...
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#7 Le 04/05/2010, à 19:10
- Totor
Re : Utiliser cpulimit dans un script [Résolu]
@sputnick : merci pour la correction
-- Lucid Lynx --
Hors ligne