22 сентября 2011 г.

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

4 комментария:

  1. Этот комментарий был удален автором.

    ОтветитьУдалить
  2. Ну так пишет же - файлов нет) Файлы Aleksandr_Ivanov-Eto_Byl_Ya.flac и Aleksandr_Ivanov-Eto_Byl_Ya.cue лежат в текущем каталоге то? После su он не уходит в другой каталог?

    После su пароль сделать ls то файлы точно лежат где надо? или просто полным путём может указать?

    ОтветитьУдалить
  3. Этот комментарий был удален автором.

    ОтветитьУдалить
  4. Спасибо за статью, очень ценная информация, помогло)

    Кстати, упрощая жизнь с тегами, если файлы уже были названы по-человечески и сложены в отдельную папку, можно не использовать cue2tracks, а просто задать другую маску: cuetag FILECUE *.flac

    ОтветитьУдалить