linux: flac cue ape разрезание на треки

Часто музыкальные альбомы представляют из себя цельный flac. К нему, как правило, прилагается cue-файл с метаданными, который описывает раскладку треков в нём. Иногда это неудобно: нельзя отделить треки, проблема с проигрывателями (мы же в linux, не так ли;) и т.д. Мы хотим разрезать изначальный музыкальный файл на отдельные flac-треки, чтобы было всё красиво, с метаданными, с тегами. На самом деле cue используется с любыми форматами, а не только с flac. Наша изначальная задача разбивается на две: работа с cue и резка flac/ape/… . Кодировать на выходе будем во flac.
Итак, что нам понадобится.
1) Кодек flac. Свободный. Скорее всего уже есть в системе.
Кодек ape. В разных системах называется: mac (monkey's audio) или monkeys-audio или как-то так. Если нужно резать ape, то нужен.
2) Пакет утилит cuetools для работы с cue sheet.
3) Пакет утилит shntool для резки файлов. В некоторых случая может сам работать с cue, так что cuetools для того, чтобы просто порезать может и не понадобиться.
Далее поток мыслей с реализацией каждой из целей, здесь FILECUE — файл cue, FILEFLAC — файл flac (или ape).

Резка файлов с использованием cuetools и shnsplit

cuebreakpoints FILECUE | shnsplit -o flac FILEFLAC

Итак, cuebreakpoints разбивает исходный cue-файл на длительности и отдаёт цифры на вход shnsplit, который режет flac на куски. Выходной формат указан через «-o flac».

Резка только с помощью shnsplit

shnsplit -o flac -f FILECUE FILEFLAC

Здесь cue sheet задан напрямую параметром «-f». В этих двух последних случаях получаются треки формата flac с именами split-trackXX.flac . Можно с помощью параметра -t указать вид имени получающихся треков, используя метаинформацию, например, в виде XX-ИмяТрека.flac

shnsplit -o flac -f FILECUE -t %n-%t FILEFLAC

Но теги задать при этом нельзя. Печально?

Добавление тегов с помощью cuetools

Используется скрипт cuetag (или cuetag.sh). В случае файлов вида split-trackXX.flac можно схитрить так:

cuetag.sh FILECUE split-track*.flac

Если задать имена выходных файлов другие, то они будут разные и применить cuetag ко всем сразу будет не так просто. Но можно написать скрипт, который будет по одному перебирать, у меня такой был когда-то, но уже неактуально, решил пользоваться готовым.

Готовое решение

Качаем последнюю версию утилиты (скрипта) cue2tracks, всё сделается за нас: кодирует из/в разных форматов, переименовывает, теггирует. Параметры описаны. Используется, например, так:

./cue2tracks -R -c flac -o "%P/%D - %A/%N - %t" FILECUE

Автор: Дмитрий