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 01/10/2012, à 11:40

alfirdaous

Une boucle pour ajout execution d'une commande

Bonjour,

Comment faire une boucle pour executer une ligne de commande, executer la commande juste apres termine la precedente:

sudo ffmpeg -i INPUT001.mp4 -strict experimental -vf "drawtext=fontfile='/usr/share/fonts/truetype/msttcorefonts/Times_New_Roman_Bold.ttf':text='Test Text':x=10:y=10:fontsize=20:fontcolor=white" -vcodec libx264 -crf 30 OUTPUT001.mp4

Apres avoir termine avec le fichier INPUT001.mp4 qui produira OUTPUT001.mp4, le script passera vers INPUT002.mp4 qui prodouira OUTPUT002.mp4, ainsi de suite, jusqu'a INPUT030.mp4.

Merci

Hors ligne

#2 Le 01/10/2012, à 11:56

Postmortem

Re : Une boucle pour ajout execution d'une commande

Salut,
En bash, tu peux faire ainsi :

for num in {001..030}
do
   sudo ffmpeg -i "INPUT${num}.mp4" -strict experimental -vf "drawtext=fontfile='/usr/share/fonts/truetype/msttcorefonts/Times_New_Roman_Bold.ttf':text='Test Text':x=10:y=10:fontsize=20:fontcolor=white" -vcodec libx264 -crf 30 "OUTPUT${num}.mp4"
done

Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#3 Le 01/10/2012, à 12:14

alfirdaous

Re : Une boucle pour ajout execution d'une commande

Merci Postmortem, je vais le tester, et pour une ligne de commande?

Hors ligne

#4 Le 01/10/2012, à 13:21

credenhill

Re : Une boucle pour ajout execution d'une commande

hello

printf "%s\n" {001..030} | xargs -i  sudo ffmpeg -i INPUT{}.mp4 -strict experimental -vf "drawtext=fontfile='/usr/share/fonts/truetype/msttcorefonts/Times_New_Roman_Bold.ttf':text='Test Text':x=10:y=10:fontsize=20:fontcolor=white" -vcodec libx264 -crf 30 OUTPUT{}.mp4

Hors ligne

#5 Le 01/10/2012, à 14:25

alfirdaous

Re : Une boucle pour ajout execution d'une commande

Merci credenhill: j'ai pas compris cette partie du code:

printf "%s\n" {001..030} | xargs

Hors ligne

#6 Le 01/10/2012, à 14:42

credenhill

Re : Une boucle pour ajout execution d'une commande

printf va envoyer 001, 002 etc et xargs va exécuter la commande sudo ffmpeg ... pour chaque nombre, donc

sudo ffmpeg -i INPUT001.mp4  ...  OUTPUT001.mp4
sudo ffmpeg -i INPUT002.mp4 ... OUTPUT002.mp4
sudo ffmpeg -i INPUT003.mp4 ... OUTPUT003.mp4
...

Hors ligne

#7 Le 01/10/2012, à 16:07

nesthib

Re : Une boucle pour ajout execution d'une commande

Après, faire une seule ligne sans raison, ça n'a pas trop de sens… surtout si tu ne comprends pas pourquoi.
En plus tu peux mettre le bloc for sur une seule ligne :

for i in … ; do commande ; done

GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#8 Le 01/10/2012, à 20:50

alfirdaous

Re : Une boucle pour ajout execution d'une commande

En utilisant sudo, la console va nous demander le mot de passe a chaque nouvelle execution, il n'est pas recommande d'utiliser sudo, mais y a t il un moyen d'entrer le mot de passe en notre absence?

Hors ligne

#9 Le 01/10/2012, à 23:34

nesthib

Re : Une boucle pour ajout execution d'une commande

Non, sudo ne devrait pas te demander le mot de passe à chaque fois. Il y a un laps de temps pendant lequel sudo ne redemande pas le mot de passe (10 minutes par défaut).
Si tu veux tu peux encapsuler le tout en root en lançant le script lui même avec sudo ou en faisant :

sudo bash <<EOF
commande 1
for … ; do commande 2 ; done
commande 3
EOF

GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#10 Le 02/10/2012, à 01:20

alfirdaous

Re : Une boucle pour ajout execution d'une commande

oui c'est vrai, mais le traitement demande entre 30 et 40 minutes

Hors ligne

#11 Le 02/10/2012, à 01:44

alfirdaous

Re : Une boucle pour ajout execution d'une commande

@credenhill:

Il reste le "%s\n" et -i

printf "%s\n" {001..030} | xargs -i 

@nesthib: ou puis je trouver la doc de ces commandes

Merci

Hors ligne

#12 Le 02/10/2012, à 03:31

nesthib

Re : Une boucle pour ajout execution d'une commande

de quelle commandes parles-tu ? Du <<EOF ? Ça n'est pas une commande mais une syntaxe shell (et d'autres langages) courante appelée « here document ». En gros le << définit que le séparateur qui suit (ici « EOF », mais ça pourrait être n'importe quoi dès lors qu'il n'apparaît pas dans le texte) indiquera la fin du bloc de texte. Pour la doc, tu la trouveras par exemple dans le man de bash à la section Here Documents

cat <<FIN
bonjour
voici plusieurs lignes
dans lesquelles je ne m'occupe pas
du contenu (comme des ")
FIN

En ce qui concerne les question que tu poses à credenhill, essaie de faire un petit effort de recherche… en l'occurrence pour la seconde il suffit de lire le man. Pour la première %s représente une chaîne de caractère (string) qui sera définie par l'argument qui suit (ici la suite de nombres) et \n représente un saut de ligne.

NB. simple curiosité, mais en quoi as-tu besoin des droits root pour faire une conversion vidéo ?


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#13 Le 02/10/2012, à 04:58

pingouinux

Re : Une boucle pour ajout execution d'une commande

Bonjour,

nesthib #12 a écrit :

En gros le << définit que le séparateur qui suit (ici « EOF », mais ça pourrait être n'importe quoi dès lors qu'il n'apparaît pas dans le texte) indiquera la fin du bloc de texte.

En fait, ce n'est pas tout-à-fait vrai. Le "délimiteur" ne termine le "Here Document" que s'il est seul sur une ligne, mais il peut apparaître dans le texte. Pour reprendre ton exemple, ceci marche aussi.

cat <<FIN
bonjour
voici plusieurs lignes
Oh, il y a le mot FIN !
dans lesquelles je ne m'occupe pas
du contenu (comme des ")
FIN

Hors ligne

#14 Le 02/10/2012, à 06:03

nesthib

Re : Une boucle pour ajout execution d'une commande

Effectivement, désolé pour cette approximation smile


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#15 Le 02/10/2012, à 08:16

credenhill

Re : Une boucle pour ajout execution d'une commande

alfirdaous a écrit :

@credenhill:
Il reste le "%s\n" et -i

printf "%s\n" {001..030} | xargs -i 

%s\n : affiche un nombre  par ligne
xargs -i : remplace {} à droite de xargs par ce qui vient du pipe

$ echo {1..3}
1 2 3
$ 
$ printf "%s\n" {1..3}
1
2
3
$ printf "%s\n" {1..3} | xargs -i echo traitement de {}
traitement de 1
traitement de 2
traitement de 3
$ 

Hors ligne

#16 Le 03/10/2012, à 01:25

alfirdaous

Re : Une boucle pour ajout execution d'une commande

donc je peux faire comme ca: Telecharger 1.avi, 2.avi, 3.avi

$ printf "%s\n" {1..3} | xargs -i sudo wget site.com/{}.avi

Si je connais pas le contenu qui est apres le slash du .com, est-il possible d'executer la commande sachant que tous les fichiers sot en .avi

Dernière modification par alfirdaous (Le 03/10/2012, à 01:38)

Hors ligne

#17 Le 03/10/2012, à 07:58

pingouinux

Re : Une boucle pour ajout execution d'une commande

Bonjour,
@alfirdaous #16 : C'est correct, mais ceci est équivalent :

sudo wget site.com/{1..3}.avi

Hors ligne

#18 Le 03/10/2012, à 08:54

alfirdaous

Re : Une boucle pour ajout execution d'une commande

pingouinux a écrit :

Bonjour,
@alfirdaous #16 : C'est correct, mais ceci est équivalent :

sudo wget site.com/{1..3}.avi

Oui, c'est juste pour s'assurer que j'ai bien compris la commande, j'ai besoin de cette partie:

Si je connais pas le contenu qui est apres le slash du .com, est-il possible d'executer la commande sachant que tous les fichiers sot en .avi

Hors ligne