#1 Le 22/09/2008, à 09:30
- p6s
[Résolu] ligne de commande a traduire du shell ...dos
hello. mon deuxieme jour sous ubuntu (so far so good)
j'avais péniblement pondu en plus d'une heure (oui j'ai a peu pres aucune compétence dès qu'on se rapproche de la ligne de commande ) UNE pov' ligne sous dos pour extraire automatiquement le son de tous les fichiers flash (avec ffmpeg) qui trainent dans un repertoire. ca avait cette gueule là :
for %%f in (*.swf) do ffmpeg -i %%f -vn -acodec copy -y %%f.mp3
bon là j'avoue que j'ai pas encore le courage d'affronter la syntaxe unix , le passage de parametres, tout ça, du coup si une bonne âme pouvait traduire ça en shell local et me dire comment la rendre executable (sur windows on met ça dans un .bat et on clique dessus ), ça me rendrait un fier service
merci d'avance
Dernière modification par p6s (Le 23/09/2008, à 15:22)
Hors ligne
#2 Le 22/09/2008, à 09:42
- seb0uil
Re : [Résolu] ligne de commande a traduire du shell ...dos
une piste :
for i in *.swf ; do ffmpeg -i $i -vn -acodec copy -y $i.mp3; done
mais tu vas avoir des fichiers du type ...swf.mp3
(a vérifier aussi la syntaxe de ffmpeg)
Hors ligne
#3 Le 22/09/2008, à 09:42
- Elemmire
Re : [Résolu] ligne de commande a traduire du shell ...dos
essaye ça (j'ai pas testé donc peut être ça marche pas mais la syntaxe me parait correct):
for f in *.swf ; do ffmpeg -i $f -vn -acodec copy -y $f.mp3 ; done
Hors ligne
#4 Le 22/09/2008, à 09:48
- p6s
Re : [Résolu] ligne de commande a traduire du shell ...dos
ah ben c'est plus qu'une piste, j'ai juste remplacé la ligne dans le .bat, je clique dessus et hop, c'est démuxé instantanément . MERCI
ps : pour les .swf.mp3, c'est pas un probleme de toute façon faut que je renomme/tagge tout pour avoir quelque chose de propre.
Dernière modification par p6s (Le 22/09/2008, à 09:48)
Hors ligne
#5 Le 22/09/2008, à 10:14
- Elemmire
Re : [Résolu] ligne de commande a traduire du shell ...dos
Cool !
Merci d'éditer ton premier message et de mettre [RESOLU] dans le sujet.
Bonne continuation
Hors ligne
#6 Le 22/09/2008, à 12:10
- Totor
Re : [Résolu] ligne de commande a traduire du shell ...dos
Salut !
Pour remplacer l'extention swf par mp3 :
#!/bin/bash
for i in *.swf ; do ffmpeg -i $i -vn -acodec copy -y ${i/.swf/.mp3}; done
${i/.swf/.mp3} permet de retourner le contenu de la variable i modifié par la règle suivante : trouve moi la première occurence de .swf et remplace la par .mp3
Par ailleurs, si des noms de fichiers ont des espaces, ça ne fonctionnera pas car chaque partie du nom du fichier (séparées par cet espace) sera considéré comme un nom de fichier à part entière. C'est pourquoi il est préférable d'utiliser la syntaxe suivante :
#!/bin/bash
ls -1 *.swf|while read fichier
do
ffmpeg -i "${fichier}" -vn -acodec copy -y "${fichier/.swf/.mp3}"
done
Enfin (parce que j'ai l'esprit tordu). il se peut (on ne sait jamais) que .swf soit mentionné plusieurs fois dans le nom du fichier. Dans ce cas, 2 solutions :
1. on remplace toutes les occurences par .mp3. La syntaxe à utiliser devient ${fichier//.swf/.mp3}
2. on supprime .swf uniquement si le nom du fichier se termine par .swf et on concatène .mp3 au résultat (je pense que c'est la meilleure solution). On obtient : ${fichier%.swf}.mp3
Au final, le script donne :
#!/bin/bash
ls -1 *.swf|while read fichier
do
ffmpeg -i "${fichier}" -vn -acodec copy -y "${fichier%.swf}.mp3"
done
-- Lucid Lynx --
Hors ligne
#7 Le 22/09/2008, à 12:29
- Alain.g
Re : [Résolu] ligne de commande a traduire du shell ...dos
Salut
Par ailleurs, si des noms de fichiers ont des espaces, ça ne fonctionnera pas car chaque partie du nom du fichier (séparées par cet espace) sera considéré comme un nom de fichier à part entière.
Si ça marchera, la seule chose est qu'il faut protéger la variable par des guillemets : "$i"
Ce qui ne marche pas (à moins de changer la valeur d'IFS), c'est en passant par une substitution de commande de style : for i in `ls *.swf` ou for i in `find -name "*.swf"`
En revanche pas de problème avec for i in *.swf
Dernière modification par Alain.g (Le 22/09/2008, à 12:29)
Xubuntu Karmic !
Hors ligne
#8 Le 22/09/2008, à 12:40
- Totor
Re : [Résolu] ligne de commande a traduire du shell ...dos
ouf !
pour une fois, je n'ai pas tout faux
par contre, il est vrai que je préfère effectuer un
find -name "*.swf" -maxdepth 1|while read i;do ...done;
à for i in *.swf (ou for i in `ls *.swf`)
car suivant le nombre de fichier (et la taille des noms), cela peut occasionner une erreur (buffer ligne de commande plein). Enfin, 'faut y aller mais ça m'arrive régulièrement avec le nombre de fichier que je traite pour certains traitements.
C'est une habitude à prendre et c'est un autre sujet
-- Lucid Lynx --
Hors ligne
#9 Le 22/09/2008, à 15:12
- Elemmire
Re : [Résolu] ligne de commande a traduire du shell ...dos
merci pour les précisions !!!
je pense que ca va pas tarder à me servir :-)
Hors ligne