web-dev-qa-db-fra.com

Lame compresse les fichiers mp3 récursivement

Je veux compresser toute ma collection de musique (une copie, en fait) en utilisant boiteux. Il y a donc naturellement des dossiers dans les dossiers et des caractères étranges possibles dans les noms de fichiers. J'ai aussi utilisé le graphique soundconverter, mais je ne l'ai pas aimé car il a des débits prédéfinis.

Ce que j'ai essayé jusqu'à présent:

$ find . -name "*.mp3" | lame -b 160

et

$  find . -name "*.mp3" > list 
$ cat list | lame -b 160

et

$ lame -b 160 < list

Tout cela me donne une erreur d'utilisation. Quelle est la bonne façon de le faire? Aussi, s'il y a un moyen de écraser le fichier d'origine , je serai trop heureux.

4
dotslash

lame ne peut pas lire les noms de fichiers depuis l'entrée. Vous devrez utiliser -exec ou find de xargs pour l'exécuter sur chaque fichier trouvé:

find . -iname '*.mp3' -exec lame -b {} \;

Si un deuxième nom de fichier n'est pas spécifié, lame joindra un autre .mp3 au nom de fichier donné et écrira dans ce fichier. lame ne supporte pas l'écriture dans le même fichier. Vous devrez convertir un autre fichier, puis le copier sur le fichier d'origine:

find . -iname '*.mp3' -exec sh -c 'lame -b 160 "$0" "$0"-160 && mv "$0"-160 "$0"' {} \;
6
muru

Essayez ce qui suit:

Commencez par supprimer les espaces blancs des noms de fichiers, car ceux-ci semblent poser problème:

for f in $(find . -name "*.mp3"); do rename "s/\s+/_/g" *; done

Exécutez une boucle et parcourez tous les fichiers:

for f in $(find . -name "*.mp3"); do lame -b 160 "$f" tmp && mv tmp "$f"; done

Maintenant, vous allez écraser les fichiers originaux avec ceux créés par lame.

2
Niklas Lindskog