Vcoder 05.04.2011 20:23

СкриптыКонвертация и разделение CUE + APE в MP3

Дано: есть несколько альбомов, видимо сграбленных какой-то программой, когда все песни с диска находятся в одном большом аудиофайле, а разметка по времени и названиям песен хранится в отдельном файле с расширением "CUE". Причём звуковой файл имеет расширение "APE" - формат Monkey's audio.

Задача: преобразовать это дело в привычные .mp3, чтобы неискушённые пользователи могли слушать музыку в своих любимых плеерах.

Вначале я попытался использовать имеющиеся инструменты, в том числе и советуемые на welinux.
mp3splt выводит имена дорожек кракозябрами, при нажатии на "пуск" выдаёт ошибку "не найден файл '' ".
gCue2tracks 5 раз говорит "неизвестный формат", после чего намертво виснет.
shntool также говорит "неизвестный формат входного файла".
Здесь для работы с форматом .ape советуют установить пакет "monkeys-audio", но в убунте 10.10 его нет.
В то же время audacious, totem, VLC, mplayer этот .ape файл играют без каких-либо затруднений.

Тут я понял, что придётся делать самому. Далее приведены пара скриптов, решающие поставленную задачу. Буду рад, если они упростят жизнь кому-нибудь ещё.


Для разделения файла на отдельные песни решено было использовать утилиту shntool, декодировав исходный файл в понятный ей формат WAV. Выходные файлы кодируются в mp3 с помощью lame, также в них добавляются некоторые теги. Теги добавляются в расово неверной кодировке windows-1251, но на то есть причина: это решение получилось кросспалатформенным. В линуксе плеер audacious теги в этой кодировке отображает вполне корректно, кроме того и в windows они также отобразятся правильно. Всё это делает этот небольшой скрипт:
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#!/bin/bash
# cue2mp3
# Конвертирует альбом с разметкой в .cue файле в набор mp3-шек -
# один файл на одну песню.
# Подразумевается, что .cue файл создан в кодировке windows-1251
#
# Vcoder, апрель 2011.
# Лицензия GNU GPL v3.

if < $# -ne 2 > || < ! -f "$1" > || < ! -f "$2" > ; then
echo "Использование: cue2mp3 file.ape file.cue"
exit 1
fi

# Сперва преобразуем исходный файл в .wav в формате PCM,
# т. к. что-то другое shntool воспринимать отказывается
wavfile=`tempfile -p vc- -s .wav`
echo "Извлекаем Раскодируем исходный файл..."
ffmpeg -y -i "$1" -acodec pcm_s16le "$wavfile" < /dev/null

# Теперь сконвертируем .cue файл в кодировку UTF-8,
# чтобы имена файлов, созданные на основе взятых отсюда названий песен,
# получились читаемыми
cueutf=`tempfile -p vc- -s .cue`
iconv -f CP1251 -t UTF-8 "$2" -o "$cueutf"

# Теперь собственно разделение на mp3-шки
echo "Разделяем на mp3-шки..."
shntool split -f "$cueutf" "$wavfile" -o 'cust ext=mp3 lame -h -b 192 - %f' -t '%n %p - %t'

# Добавим немного тегов.
# Теги добавляем из исходного .cue файла с кодировкой windows-1251,
# чтобы они и в винде нормально виделись.
# В линуксе audacious также адекватно воспринимает эти теги
# Но если таки нужны теги в UTF-8, то надо заменить "$2" на "$cueutf"
cuetag "$2" *.mp3

# Ну и удалим созданные временные файлы
rm "$wavfile" "$cueutf"

echo 'Готово!'



После пятого альбома мне наскучило запускать преобразование каждого альбома вручную и ждать завершения, в результате был написан скрипт, который ищет все .cue файлы начиная с текущего каталога, проверяет наличие рядом с ним аудиофайла .ape и конвертирует его в набор mp3-шек. Затем файлы .cue, .ape и .log (лог-файлы программы, которой была создана связка CUE+APE) удаляются. Это делается потому, что я работал с копиями альбомов, а в результате необходимо было получить каталоги с mp3 файлами, готовые для записи на CD/DVD диск.
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#!/bin/bash
# convert-all
# Рекурсивно ищет все .cue файлы, начиная с текущего каталога,
# и запускает для каждого cue2mp3.
# Затем .cue, .ape и .log файлы удаляются.
#
# Автор Vcoder, апрель 2011
# Лицензия GNU GPL v3

# Создадим список всех .cue файлов,
# чтобы удаления не нарушили работу find
cuelist=`tempfile -p vc- -s .lst`
find . -type f -name "*.cue" > "$cuelist"
startdir="`pwd`/"

# Для каждого файла заходим в его каталог, проверяем наличие
# файла с тем же именем и расширением .ape (Monkey's Audio),
# и если оба этих файла есть - запускаем cue2mp3
cat "$cuelist" | while read cue ; do
newdir="`dirname "$cue"`/"
cd "$newdir"
cue=`basename "$cue"`
ape=${cue%.cue}.ape
if < -f "$ape" > && < -f "$cue" > ; then
cue2mp3 "$ape" "$cue"
rm "$ape"
rm "$cue"
rm -f *.log
fi
cd "$startdir"
done

# Удаляем временный файл
rm "$cuelist"



Тэги: ape bash convert cue mp3 shntool
+ 6 -
Похожие Поделиться

PaulRed 05.04.2011 21:05 #
cue2tracks: http://www.ylsoftware.com/storage/files/14/page/2
Vcoder 05.04.2011 21:12 #
Да, но конкретно для моего случая не подошло - проект "mac-port" на SF более не значится, а без него, как я понял, формат Monkey's audio не прочесть.
eugenez 05.04.2011 21:18 #
для таких целей вместо описанного джедайства использую flacon http://code.google.com/p/flacon/
Vcoder 05.04.2011 21:38 #
Скачал. Хорошая программа, приятный интерфейс. То, что нужно. Даже названия песен в CP1251 прочитал корректно. Вот только кнопка "Конвертировать" неактивна... :(
Sokoloff 06.04.2011 12:37 #
Ага, меня как автора этого самого флакона, зацепило:)

Кнопка может быть не активной если программа не смогла найти соответствующий аудио-файл для cue. Возможно имена cue и ape отличаются, или не был установлен mac и программа не распознала ape-файл как звуковой. Можно ручками указать файл, для этого есть кнопка в CD-строке таблицы.

Видимо надо как-то более явно сообщать о проблемах. Как это лучше сделать? Есть пожелания с точки зрения пользователя первый раз запустившего программу?
Vcoder 06.04.2011 22:38 #
Очень приятно, рад встрече с автором.

Сейчас запустил ещё раз. Справа в строке с диском опять появился жёлтый треугольник с восклицательным знаком. Но в этот раз при наведении на него таки появилась всплывающая подсказка о том, что звуковой файл либо не найден, либо не поддерживается. Вчера она не появлялась, возможно это связано с какими-то глюками в системе. Через меню по правой кнопке указал звуковой файл (кстати, его имя совпадает с именем .cue) и получил MessageBox о том, что формат аудио файла не поддерживается.

Пожелание от юзера, видевшего прогу впервые... Пожалуй, как-то ещё сообщать, что конвертировать нельзя и почему нельзя. Сейчас, как я понял, единственный способ это узнать - по всплывающей подсказке на значке "!" в CD-строке. Но подсказки эти часто ломаются. Возможно, не следует деактивировать кнопку "Конвертировать", а вместо этого, если конвертирование невозможно, при нажатии на неё сообщать о том, что не так. Хотя-бы тот же самый MessageBox показать, уже ясно станет.
Sokoloff 07.04.2011 10:40 #
Да, я вчера заметил есть такая проблема. Если в дереве есть скроллинг, то треугольник иногда рисуется где-то за границей. Буду починять. Может и правда добавлю messagebox.

Аудио файл не поддерживается, потому что нет mac-а. В убунте его можно поставить из моего PPA-репозитория.

Vcoder 08.04.2011 19:47 #
Нет-нет, треугольник был, я точно помню. Просто иногда в системе что-то клинит, и всплывающие подсказки перестают отображаться. Это вообще не обязательно программа виновата. Я лишь хотел сказать, что нельзя на всплывающие подсказки полагаться всецело и делать их единственным способом донести информацию до пользователя. Дополнительный - да. Но не единственный.

За ссылку на репозиторий спасибо. :)
orkaan 08.04.2011 17:23 #
Есть альтернативная точка зрения. В скачиваемых с rutracker.org, например, дисков в указанном вами формате очень часто в самом .cue-файле указано имя звукового файла с расширением .wav. Может, в этом дело?
Я решаю эту проблему так: s/.wav/.ape/, и сохраняю изменённый cue-файл.
Vcoder 08.04.2011 19:50 #
Посмотрел. Нет, в моём случае внутри .cue указаны файлы с расширением именно "ape".
Sokoloff 11.04.2011 16:36 #
Этот тег часто не соответствует жизни, поэтому на него полагаться нельзя. Он, конечно участвует в поиске, но из него берется только "basename". Так-что проблема не в расширении.

IMHO либо не установлен mac, либо файл битый.
Nikisch 05.04.2011 22:08 #
flacon - годная прога, но использует эти же консольные утилиты, которые спотыкаются на некоторых файлах (даже если их юзать напрямую). Некоторые альбомы пришлось разрезать в aimp converter под wine. Вообще, эта утилита работаеточ хорошо в линуксе.
Sokoloff 06.04.2011 12:39 #
А какие были проблемы? Можно примеры попросить, или уже дело прошлое и все удалено.
Nikisch 07.04.2011 13:13 #
Все сконверчено и образы удалены. Конвертируются предположим 7 из 10 треков, а на восьмом выскакивает ошибка. Это скорее связано с самим файлом ape, т е cue был составлен правильно.
Brodyaga 06.04.2011 01:16 #
Использовал этот скрипт.

Необходимые программы: mac, lame, mp3splt, oggenc (входит в vorbis-tools), желательно также поставить id3 mass tagger
Этот скрипт конвертирует ape в wav при помощи mac, после чего разбивает полученный файл на несколько, опираясь на информацию из cue-фала, при помощи mp3splt. mp3splt также записывает теги в mp3-файлы, используя информацию из cue-файла.

Итак, для конвертации в mp3 выполняем:
cueape.sh file.ape file.cue -m

с поправкой на наши файлы. Чтобы получить на выходе ogg используйте параметр -o вместо -m.
d.b.zhidkov 06.04.2011 10:57 #
Если установлены пакеты mac (flac, wavpack для получения треков в lossless-формате), lame, shntool, то любой сплиттер с графическим интерфейсом должен работать. Лично я пользуюсь gCue2tracks (Ubuntu 10.10) без каких-либо проблем при разрезании ape+cue, flac+cue, wv+cue.
Vcoder 06.04.2011 22:41 #
У меня тоже Ubuntu 10.10. Но я так и не нашёл, какой пакет нужно установить для работы с ape... Может вы подскажете? Описанные в посте плееры его и так играют без проблем, ffmpeg также распознал и декодировал.
d.b.zhidkov 07.04.2011 08:45 #
   Для установки mac пишем в любимом терминале (можно и через графический интерфейс, но тогда процесс немного затянется):
sudo add-apt-repository ppa:g-christ/ppa
sudo apt-get update && sudo apt-get install mac-3.99
   Хочу заметить, что на Mandriva 2010 у меня были проблемы с ape-файлами (mac ругался на ~90% имеющихся файлов), поэтому я вначале конвертировал их в flac (у меня вся фонотека в данном формате, также можно конвертировать и в wav) c помощью ffmpeg:
ffmpeg -i 'input_file.ape' 'output_file.flac'
   Это команда справедлива для консоли. Я же добавил "Действие" для Dolphin'a и процесс стал проходить в два клика. Если интересно, то могу написать пост по этому поводу. Для Nautilus'a я такого делать не стал, т.к. есть скрипт (audioconvert, кажется), и у меня заработала gCue2tracks, которая не захотела работать в Mandriva.
d.b.zhidkov 07.04.2011 09:37 #
   С репозиторием вышла досадная оплошность. Проще сделать так:
$ wget http://members.iinet.net.au/~aidanjm/mac-3.99-u4_b3-1_i386.deb
$ sudo dpkg -i mac-3.99-u4_b3-1_i386.deb
d.b.zhidkov 07.04.2011 09:55 #
Также можно скачать отсюда:
$ wget http://ppa.launchpad.net/g-christ/ppa/ubuntu/pool/main/m/mac/mac_3.99-u4-b5-s7-1~ppa1_i386.deb
$ sudo dpkg -i mac_3.99-u4-b5-s7-1~ppa1_i386.deb
Sokoloff 07.04.2011 10:43 #
Еще mac есть во flacon-овском репозитории.
cppmm 06.04.2011 18:14 #
Скрипт convert-all у вас с ошибочкой. Он может ходить по каталогам только с одним уровнем вложенности. Если хотя бы два уровня вложенности, он уже ломается.
Ошибка в 29-ой строке.
Чтобы исправить, надо где-нибудь в 14-ой строке добавить что-то типа
BPWD=$(pwd)
а 29-ю привести к виду
cd $BPWD
Vcoder 06.04.2011 22:39 #
Спасибо за замечание! Исправлю, протестирую и затем обновлю пост.
cppmm 07.04.2011 06:57 #
Ну, я вашим скриптом уже пользуюсь. :)
Просто самому всё было лень писать, а тут такая халява. :) Всего пару строчек исправить и готово.
Кто там у нас тут говорил про бездушный непомогающий опенсорс, а ZED? ;)