Пакетная работа с файлами в командной строке. Перекодирование mp3-файлов для изменения битрейта.

Jun 09, 2010 20:56

Мой yepp-плейер при всем его удобстве (особенно радует его неубиваемость и то, что он работает от батарейки, которую несложно достать в поле) отличается небольшой емкостью - всего 128М. Посему, музыку для него я обычно ужимаю до битрейта в 128 - лучшее качество я все равно не смогу оценить в наушниках, а место можно сэкономить.

Некоторое время я это перекодирование выполнял через пакетную обработку в Audacity, однако перед экзаменом по философии внезапно выяснилось, что Audacity на текущую ось я почему-то не поставил. Зато у меня был lame - который можно использовать для этих целей с соответствующими ключами, например так:

читать дальше в wordpress'e


lame -h -b 128 --vbr-new music_old.mp3 music_new.mp3

-b 128 - битрейт 128
-h - использовать более медленный но качественно лучший алгоритм сжатия
--vbr-new - задействовать variable bitrate и еще более новый, быстрый и качественный алгоритм сжатия

Все эти ключи (и все остальное) можно посмотреть либо через man lame, либо запустив в комстроке lame --help.

Теперь нужно было сделать пакетную обработку - чтобы не задавать по одной команде на каждый отдельно взятый файл, а перекодировать все одним пакетом. Я воспользовался своей собственной старой заметкой про пакетную обработку djvu и на ее базе задал такую вот строку.

for x in *.mp3; do lame -V0 -h -b 128 --vbr-new $x $x.new; done

В запущенной директории она перебирает все файлы с расширением .mp3 и для каждого из них запускает lame, добавляя к окончанию получившегося файла ".new".

Все отлично сработало. Осталось только скопировать все файлы с .new-расширением в другую папку и "откусить" им этот .new-хвост, вернув прежний вид.

Я использовал утилиту rename. Она переименовывает файлы по регулярным выражениям примерно так, как это происходит в vim и sed:

rename 's/старый шаблон/новый шаблон/' *.mp3

Сразу запускать переименование не рекомендую - лучше сначала проверить как оно произойдет. Сделать "тестовый прогон" и убедиться, что не было ошибок. Для чего нужно два ключа:

-v подробно описывать действия
-n ничего не переименовывать - просто показать результат в режиме "пробного просмотра"

Пример:

$ ls *.new

1.mp3.new 2.mp3.new 3.mp3.new

$ rename -v -n 's/mp3.new$/mp3/' *.new

1.mp3.new renamed as 1.mp3
2.mp3.new renamed as 2.mp3
3.mp3.new renamed as 3.mp3

Ну и убедившись, что все сработало как надо - можно запустить rename без ключа -n - и переименовать файлы.

$ rename -v -n 's/mp3.new$/mp3/' *.new

1.mp3.new renamed as 1.mp3
2.mp3.new renamed as 2.mp3
3.mp3.new renamed as 3.mp3

$ rename -v 's/mp3.new$/mp3/' *.new
1.mp3.new renamed as 1.mp3
2.mp3.new renamed as 2.mp3
3.mp3.new renamed as 3.mp3

$ ls *.mp3
1.mp3 2.mp3 3.mp3

bash, ubuntu, рецепты, скриптинг, linux, foss forever, нот, инфотех, это просто работает, mp3

Previous post Next post
Up