0 votes

Lancer FFmpeg depuis le Shell script

J'ai trouvé un shell script utile qui montre tous les fichiers dans un répertoire de manière récursive.

Où il imprime le nom du fichier echo "$i"; #Display File name .

Je voudrais plutôt exécuter une commande ffmpeg sur des fichiers non MP3, comment puis-je faire cela ? J'ai une connaissance très limitée des scripts donc j'apprécierais si on me donnait la cuillère ! :).

//if file is NOT MP3

ffmpeg -i [the_file] -sameq [same_file_name_with_mp3_extension]

//delete old file

Voici le shell script pour référence.

DIR="."

function list_files()
{
    if !(test -d "$1")  
    then echo $1; return;
    fi

    cd "$1"
    echo; echo `pwd`:; #Display Directory name

    for i in *
    do
               if test -d "$i"  #if dictionary
                then  
                          list_files "$i" #recursively list files
                  cd ..
                else
            echo "$i"; #Display File name
                fi

    done
}

if [ $# -eq 0 ]
then list_files .
exit 0
fi

for i in $*
do
    DIR="$1"
    list_files "$DIR"
    shift 1 #To read next directory/file name
done

4voto

Roadmaster Points 3533

Vous pouvez faire de même avec une phrase de recherche. En supposant que les fichiers que vous voulez traiter sont tous des wav :

find /path/ -type f -name "*wav" -exec ffmpeg -i {} -sameq {}.mp3 \;

Si vous voulez trouver les fichiers "rm", et les supprimer après la conversion :

find /path/ -type f -name "*.rm" -exec ffmpeg -i {} -sameq {}.mp3 && rm {} \;

Cela dit, si vous voulez le faire avec le shell script que vous avez montré, prenez la ligne qui dit

echo "$i";

remplacez-le par ceci :

ffmpeg -i "$i" -sameq "$i".mp3

$i est une variable. Quelques lignes plus haut, vous avez :

for i in *

cela signifie essentiellement "pour chaque élément de * (qui à son tour représente tous les fichiers du répertoire courant, c'est ce qu'on appelle une "expansion de l'interpréteur de commandes"), mettez le nom de l'élément/fichier dans la variable i et ensuite exécuter tout le code entre "do" et "done" ". Donc pour chaque itération, i contiendra le nom d'un des fichiers de ce répertoire.

Il y a aussi une section qui teste si i est un répertoire et si c'est le cas, il liste récursivement son contenu.

Une dernière remarque rapide : le \ ; à la fin de la commande find EST significatif et il DOIT y avoir un espace avant la barre oblique inverse, sinon cela ne fonctionnera pas.

0voto

Michael Mrozek Points 44120

Votre shell script semble être essentiellement ls -1R Il est donc probablement plus facile de l'utiliser. Quant à l'exécution de ffmpeg sur des fichiers non-MP3, il est probablement plus facile d'utiliser find au lieu d'écrire tout un shell script pour le faire. En supposant que vous identifiez les fichiers MP3 par leur extension :

find your-path -not -name "*.mp3" -exec ffmpeg -i '{}' -sameq '{}.mp3' \;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X