Хромое сжатие mp3 файлов рекурсивно

Я хочу сжать всю свою музыкальную коллекцию (на самом деле ее копию), используя lame. Естественно, в папках есть папки и возможные странные символы в именах файлов. Я также использовал графический конвертер звука, но он мне не понравился, так как он имеет предопределенную скорость передачи данных.

Что я пробовал до сих пор:

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

а также

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

а также

$ lame -b 160 < list

Все это дает мне ошибку использования. Как правильно это сделать? Кроме того, если есть способ перезаписать исходный файл, я буду слишком счастлив.

2 ответа

Решение

lame не может прочитать имена файлов из ввода. Вам придется использовать find"s -exec или же xargs запустить его для каждого найденного файла:

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

Если второе имя файла не указано, lame прикрепит другой .mp3 на данное имя файла и напишите в этот файл. lame не поддерживает запись в тот же файл. Вам придется конвертировать в другой файл, а затем скопировать его поверх исходного файла:

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

Попробуйте следующее:

Начните с удаления пробелов из имен файлов, так как они, кажется, вызывают проблемы:

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

Выполнить цикл и пройти через все файлы:

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

Теперь вы будете перезаписывать исходные файлы теми, что созданы lame.

Другие вопросы по тегам