Пакетное преобразование файлов ape и flac в mp3 на языке Groovy

Музыкальные форматы ape и flac позволяют слушать музыку без искажений. Это, конечно, хорошо, но не все мобильные устройства их умеют воспроизводить. Поэтому, как ни грустно, приходится преобразовывать в mp3. Лучше всего делать это на каком-нибудь «сервере», т.е. постоянно работающей машине, раздающей, например, Интернет по квартире. Ей всё равно делать нечего: работает себе на антресолях, не шумит, пусть хоть всю ночь молотит. Однако для этого нужен консольный скрипт.

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

for i in `ls *.{flac,ape}` ; do ffmpeg -ab 256k -i "$i" "$i.mp3"; done

Но простота эта обманчива. Можно споткнуться о пробелы, содержащиеся в именах файлов. Если же речь идет не о единственном каталоге, а о множестве, да еще и с неопределенной степенью вложенности — придется задйствовать команду find, да и прочие огороды городить. Задолбавшись это делать, я решил задачу на языке Groovy.

#!/usr/bin/groovy

dir = new File('.')

dir.eachFileRecurse {
 if(it.getName().endsWith('.flac') || it.getName().endsWith('.ape')){
  println it.getName()	 
  mp3Name = it.getAbsolutePath() + '.mp3'	 
  n   = it.getName().lastIndexOf('.')	 
  ext = it.getName().substring(n)	  
  tmp = File.createTempFile('music',   ext,  dir)
  mp3 = File.createTempFile('music', '.mp3', dir)
  tmp.deleteOnExit()
  it.renameTo(tmp)
  ffmpeg = "ffmpeg -y -ab 256k -i ${tmp.getName()} ${mp3.getName()}".split(/\s+/).execute()
  ffmpeg.waitFor()
  mp3.renameTo(new File(mp3Name))
 }
}


Скрипт сохраняется с именем типа /usr/bin/apeflac2mpg. Далее следует зайти в каталог, где много неконвертированных файлов, запустить

screen apeflac2mpg

отключиться от квартирного шлюза и… ложиться спать. К утру, может и успеет преобразовать гигабайт flac-файлов в mp3
  • +4
  • 22 января 2011, 16:26
  • yababay

Комментарии (0)

RSS свернуть / развернуть

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.