Не так давно я описывал приключения с воспроизведением Lossless Audio в контейнере APE на Debian Lenny. Контейнер APE представляет из себя один файл, образно воспринимаемым как копия CD или DVD диска, с идущими подряд треками. Как правило, к контейнеру APE прилагается специальный индексный файл-оглавление формата CUE, в котором обозначены точки позиционирования отдельных треков внутри контейнера с сопутствующей "мета"-информацией.
Задача была решена, хотя и через "пень-колоду", путём сборки свежей версии ранее никогда не использовавшегося мною плеера QMMP. Мне самому не понравилась необходимость держать ещё один проигрыватель для воспроизведения какого-то там промежуточного формата. Вообще, я считаю, что глупо компоновать треки в неделимый альбом, с отдельно вынесенным оглавлением. С какой стати, скажите на милость, я должен вестись на представления кого бы то ни было о том, в какой последовательности и объёме следует формировать списки воспроизведения?
В общем, хотя бы и для ощущения маленького чувства самоудовлетворения от обретения контроля над ситуацией, было решено разбить APE на треки.
Будем исходить из того, что мы имеем треки "Lossless Audio" в контейнере формата APE "file.ape" и прилагающийся к ним индексный файл-оглавление в формате CUE "file.cue".
Устанавливаем пакеты приложений и библиотек поддержки форматов CUE, FLAC, WAV и инструментарий конвертирования:
# aptitude install cuetools shntool flac wavpack iconv
Конвертируем индексный файл CUE с "тегами" в более предпочтительную кодировку UTF-8, если на есть необходимость:
# iconv --from-code=cp1251 --to-code=utf8 file.cue > file.utf8.cue
Так как в библиотеках Debian Lenny толком не реализована работа с форматом MAC (Monkey’s Audio lossless audio Codec), прямое разделение файла-контейнера формата APE на отдельные композиции не представляется возможным. Проще всего конвертировать файл-контейнер формата APE в файл-контейнер формата WAV, а после уже разбить его на дорожки.
Конвертируем APE в WAV:
# ffmpeg -i "file.ape" "file.wav"
Разделяем файл формата WAV на отдельные треки в соответствии с индексом, содержащимся в CUE файле с последующим перекодированием во FLAC и укладыванием результата в специальной директории для последующей обработки:
# mkdir -p ./result
# cuebreakpoints "file.cue" | shnsplit -d "./result" -a "prefix-" -o flac "file.wav"
# cuebreakpoints "file.cue" | shnsplit -d "./result" -a "prefix-" -o flac "file.wav"
Теперь дополняем получившиеся композиции в формате FLAC "метаданными", иначе говоря - "тегами":
# cuetag "file.cue" ./result/prefix-*.flac
И, в качестве завершающего штриха, переименовываем композиции в соответствии с тегом "TITLE", например, если будет на то необходимость:
# cd ./result
# for FILE in `ls -1 *.flac`; do mv "$FILE" "`metaflac --show-tag=TRACKNUMBER $FILE | awk '{print sprintf("%02d", substr($0, 1+index($0, "=")))}'` - `metaflac --show-tag=TITLE $FILE | awk '{gsub("/", "#", $0); print substr($0, 1+index($0, "="))}'`.flac"; done
# for FILE in `ls -1 *.flac`; do mv "$FILE" "`metaflac --show-tag=TRACKNUMBER $FILE | awk '{print sprintf("%02d", substr($0, 1+index($0, "=")))}'` - `metaflac --show-tag=TITLE $FILE | awk '{gsub("/", "#", $0); print substr($0, 1+index($0, "="))}'`.flac"; done
В итоге, в директории "./result" мы получим корректно именованные треки, ранее содержащиеся в контейнере APE.