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 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) cool

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 tongue ) 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 big_smile ), ç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)


Java stuff ::
tPortal.. ma petite implémentation de la JSR168
jlibParam.. pooling, paramétrage etc...

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 smile

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

Totor a écrit :

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 wink

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 wink


-- 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