среда, 10 сентября 2014 г.

Linux: конвертируем *.wv WavPack в *.wav файлы

Скачал сегодня великолепную коллекцию музыки, которая была тщательно подобрана. Но вот беда — поставлялась она в каком-то непонятном формате. Каждый альбом был WV файлом. Как уверял источник — это особый формат и его удобно слушать и записывать. Ну-ну...
В общем сходу ни одна установленная программа на моем Linux Mint этот формат не скушала. Насколько я знаю некоторые проигрователи такое умеют как в Windows так и в Linux, но мне необходимы были файлы в формате mp3 или m4a для магнитолы в авто. Что ж, challenge accepted :)
Задача: преобразовать wv файлы в wav, результат сконвертировать в нужный нам формат. В моем случае ожидается m4a на выходе.
Для работы нам понадобится три программы: cuetools shntool wavpack.
1
sudo apt-get install cuetools shntool wavpack
Т.к. у нас Линукс это значит, что практически все мы можем автоматизировать shell-скриптами :) Что ж, напишем парочку.
Создайте файл run-unpacker.sh и дайте ему права на запуск:
1
2
touch run-unpacker.sh
chmod +x run-unpacker.sh
Откройте его своим любимым редактором и впишите следующее:
1
2
3
4
5
6
7
8
mkdir "$1encoded"
for f in $1*.wv; do
    filename=$(basename "$f")
    filename="${filename%.*}"
    newFile="$1encoded/$filename.wav"
    echo "$f -> $newFile"
    wvunpack "$f" -o "$newFile" -cc
done
Здесь мы запускаем wvunpack для каждого наденного wv файла с указанием откуда читать и куда писать.
Запускаем:
1
./run-unpacker.sh path
где path — путь к файлам wv. В папке с wv будет создана папка encoded, в которую будут аккуратно сложены wav файлы.
Следующий шаг — разбить большие wav файлы на на трэки:
1
2
touch run-splitter.sh
chmod +x run-splitter.sh
Вписываем в созданный файл следующее:
1
2
3
4
5
6
7
8
9
10
for cue in $1*.cue; do
    filename=$(basename "$cue")
    filename="${filename%.*}"
    output="$1$filename"
    wav="$1$filename.wav"
    mkdir $output;
    shnsplit -f $cue -t %t $wav -d $output
done
Здесь для каждого файла cue (метаданные кажого wav файла), который был создан вовремя работы wvunpack, запускается тулза shnsplit. Она, курируясь информацией с cue файла, разбивает wav файлы на дорожки. Каждый набор дорожек мы помещаем в отдельную папку.
В комманде shnsplit -f $cue -t %t $wav -d $output, замените %t на %n, если планируете восстановить метаданные (теги) каждой дорожки. Имена файлов будут состоять только из порядкового номера и расширения. После конвертации в окончательный формат воспользуйтесь утилитой cuetag (приблизительный пример: cuetag file.cue *.m4a)
Запустите созданный скрипт. В логе работы shnsplit может проскакивать предупреждение: shnsplit: warning: discarding initial zero-valued split point. Не обращайте внимания — ничего серьезного.
И вот он, результат — vw файл распакован и разбит на дорожки. Следующий шаг: конвертация в нужный формат. По этому поводу в сети очень много информации. Лично я воспользовался программой soundconverter, настроил ее и натравил на нужные файлы.
Вот и все, надеюсь заметка будет кому-то полезна.