Хромое сжатие 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.