Чем разрезать FLAC в Linux

debianeach

Опубликован:  2019-04-08T13:10:34.460469Z
Отредактирован:  2019-04-08T13:08:34.784670Z
Продолжаем разговор о прикладных задачах для десктопа на каждый день. Очередной перформанс посвящен делению цельных CDDA-рипов на треки заданного формата с заполнением метаданных треков полученными из CUE-файла рипа данными. Я продемонстрирую процесс деления CDDA-рипа в вариантах с использованием различных форматов хранения для полученных в результате деления рипа треков.

1. Что такое цельный CDDA-рип

Прежде чем приступить к решению самой задачи, стоит остановиться на детальном определении цели и её характеристик. Потенциальной целью для этой демонстрации может послужить любой цельный CDDA-рип. Попытаемся разобраться, а что же это такое.

Техногенная цивилизация нашего времени на самом излёте прошлого века изобрела популярный носитель информации, на котором был выпущен и по сей день выпускается и продаётся довольно обширный объём творчества различных музыкантов и музыкальных коллективов. Википедия об этом носителе информации говорит нам следующее:

Звуковой компа́кт-диск (CDDA, англ. Compact Disc Digital Audio, также называемый англ. Audio CD и Red Book) — международный стандарт хранения оцифрованного звука на компакт-дисках, представленный фирмами Philips и Sony.

Звуковая информация представлена в импульсно-кодовой модуляции с частотой дискретизации 44,1 кГц и битрейтом 1411,2 кбит/с, 16 бит стерео.

Ввиду того, что качество звучания материала звукового компакт-диска абсолютно приемлемо для большинства заинтересованных, а хранение коллекции пластиковых изделий не всегда рационально, наиболее продвинутые представители компьютерного сообщества научили компьютер считывать музыкальное содержимое компакт-диска, упаковывать его lossless-кодеками и хранить в таком виде на жестком диске. Наиболее популярным инструментом для извлечения аудио-данных со звукового компакт-диска на просторах Рунета заслуженно стал EAC, цитирую Википедию:

Exact Audio Copy (EAC) — программа для риппинга аудио-CD в среде Microsoft Windows.

Упомянутая программа даёт возможность получать рипы двух форматов:

  1. Так называемые цельные рипы, когда все треки компакт-диска извлекаются и упаковываются в один файл любого формата хранения аудио-данных без потерь;
  2. Так называемые потрековые рипы, когда каждый трек компакт-диска извлекается и упаковывается в отдельный файл любого формата хранения аудио-данных без потерь.

Сегодня на некоторых торрент-трекерах доступны огромные коллекции CDDA-рипов снятых именно при помощи EAC, поэтому я и продемонстрирую работу именно с рипами EAC.

В этом обзоре речь пойдёт о рипах первого формата - так называемых цельных CDDA-рипах. У меня для этой демонстрации есть подобный рип, на примере которого я и покажу деление одного большого медиа файла на отдельные треки. На жестком диске, в файловом менеджере CDDA-рип обычно выглядит следующим образом:

Hcr9xQ1lKK.png

Итого: один медиа-файл в одном из lossless форматов в данном случае FLAC, один CUE файл с метаданными рипа и один файл с логом EAC, все три файла имеют совпадающее до знака имя и отличаются только расширением. Два первых файла являются ключевыми, необходимыми и достаточными. Иногда раздающие включают в состав каталога ещё и файлы с изображениями обложек, другие текстовые файлы, подтверждающие, что рип содран с оригинального издания и не является апконвертом, но эти файлы присутствуют не всегда и, в сущности, не обязательны.

Стоит обратить внимание на параметры медиа-файла представленного рипа, для этого можно воспользоваться программой mediainfo.

OMSK9ramtf.png

Параметры Sampling rate и Bit depth выдают типичные для CDDA-рипов величины.

Второй ключевой файл с расширением .cue можно открыть любым текстовым редактором и посмотреть на его содержание.

CD9LpgQAET.png

Windows кодировка файла является препятствием для пользователей операционных систем Linux, но препятствием преодолимым. На снимке экрана выше следует обратить внимание на строчки INDEX 00 и INDEX 01, они определяют длительность треков и зазоров между треками.

Сейчас я покажу процесс деления этого рипа в нескольких возможных вариантах.

2. Делим рип при помощи shntool и cuetools

В составе официального репозитория Debian есть два пакета:

  • shntool;
  • cuetools.

Оба пакета можно установить при помощи пакетного менеджера apt.

sudo apt install shntool cuetools

Программы из этих пакетов дают возможность просто и легко разрезать цельный рип на отдельные треки. Мне потребуется cuebreakpoints из cuetools и shnsplit.

Первая программа даёт возможность отфильтровать из CUE-файла индексы треков и отсортировать их в заданном порядке. Программа определяет три возможных порядка следования индексов, при условии, что CUE-файл определяет зазоры между треками, то есть имеет два индекса для нескольких или всех треков рипа. Мой рип отвечает этому требованию, поэтому может быть разрезан на треки в трёх вариантах:

  1. Зазор включается в конец трека;
  2. Зазор включается в начало трека;
  3. Зазоры всех треков обрезаются.

Именно cuebreakpoints определяет вариант деления, для этого у программы есть три опции:

  • --append-gaps - сортирует индексы для деления по первому варианту;
  • --prepend-gaps - сортирует индексы для деления по второму варианту;
  • --split-gaps - сортирует индексы для деления по третьему варианту.

Первый вариант - дефолтный. Посмотрим на выхлоп программы.

cuebreakpoints Negoro.cue

nU7GysSsZx.png

Если выхлоп этой программы отдать по программному каналу программе shnsplit, то в результате мы получим процесс деления рипа на треки.

cuebreakpoints --split-gaps Negoro.cue | shnsplit -o flac Negoro.flac

zlU2q8L2MM.png

В данном случае я поделил рип с обрезкой зазоров. Следует обратить внимание, что обрезанные зазоры теперь присутствуют в моём текущем каталоге, наряду с целевыми треками. Отсюда следует, что зазоры нужно удалять. Кроме этого, все целевые файлы треков после деления рипа не имеют метаданных. Отсюда следует, что метаданные треков нужно заполнять. И в итоге я имею кучу файлов и некоторую головную боль... Поэтому для этой демонстрации я приготовил ещё один вариант решения начальной задачи.

3. Знакомимся с cuetoolkit

Поскольку в результате деления своего рипа при помощи подручных средств я получил головную боль в виде двух сопутствующих задач, стоит рассмотреть ещё один вариант деления рипа - с помощью cuetoolkit, который поможет мне разделить мой CDDA-рип и получить на выходе только целевые файлы заданного формата (одного из четырёх поддерживаемых программой) с уже заполненными метаданными.

В официальном репозитории Debian cuetookit отсутствует, но его достаточно просто можно скачать и установить, процесс установки cuetoolkit описан в деталях в одном из предыдущих выпусков этого блога. Этот пакет распространяется в исходных кодах под свободной лицензией и даёт некоторые интересные возможности для работы с аудио-рипами, в том числе и с CDDA-рипами. Например, одна из утилит cuetoolkit - cue2report позволяет достаточно просто получить в консоли развёрнутую информацию о рипе, даже если CUE-файл рипа имеет Windows-кодировку.

cue2report Negoro.cue 

3dGlW1PtIY.png

Есть в составе этого пакета и программа для быстрого и простого деления цельных рипов - cue2tracks, о которой и пойдёт речь далее...

nsIGFZqfoL.png

4. Делим рип на треки FLAC

При помощи cue2tracks можно разделить исходный цельный рип на треки различных форматов. Один из поддерживаемых для треков форматов - FLAC, и он задан по умолчанию. В рамках этой демонстрации я буду делить свой рип на треки с обрезкой зазоров, поскольку такой вариант даёт самый неудобный результат, если его выполнять как показано выше в п.2. Посмотрим, что мы получим в результате при делении рипа с помощью cue2tracks.

cue2tracks -g split Negoro.flac

2Ilj8coE1y.png

В результате, в моём текущем каталоге появились только целевые файлы треков, а зазоры удалены автоматически.

AfNp7O1Kev.png

Кроме этого, если взглянуть на полученные треки, можно заметить, что метаданные треков уже заполнены данными из CUE-файла рипа.

ZnwzUPCdTW.png

О головной боли можно забыть, зазоры удалены автоматически, метаданные треков заполнены.

В варианте по умолчанию cue2tracks использует дефолтную степень сжатия, но в случае необходимости, позволяет задать любые поддерживаемые опции энкодера, например можно задать степень сжатия для треков.

cue2tracks -o " -8" Negoro.cue

Опции энкодера задаются при помощи ключа -o в двойных кавычках, пробел после открывающей кавычки обязателен. Поскольку в данном случае не указан ключ -g, деление будет осуществляться с зазором в конце трека. Метаданные файлов при этом будут заполнены тоже.

Иногда необходимо переименовать полученные треки, cue2tracks поддерживает одну единственную схему для переименования треков, переименование треков задаётся при помощи ключа -r.

cue2tracks -o " -8" -r Negoro.cue

После деления рипа в таком варианте текущий каталог будет выглядеть так.

oWNHrvMCot.png

Следует заметить, что в качестве целевого файла cue2tracks принимает как имя CUE-файла рипа, так и имя медиафайла рипа. И совершенно без разницы, что CUE-файл в кодировке Windows, метаданные треков будут заполнены в кодировке UTF8.

5. Делим рип на треки Vorbis, Opus, MP3

cue2tracks даёт возможность задать формат полученных в результате деления рипа треков и поддерживает для треков следующие форматы:

  • FLAC - формат треков по умолчанию;
  • Vorbis;
  • Opus;
  • MP3.

Формат треков задаётся с помощью ключа -m. Сейчас я поделю свой рип на треки трёх указанных lossy форматов. Начнём с формата MP3.

cue2tracks -m mp3 -r Negoro.flac

26fZizJfwM.png

Поскольку при делении указан ключ -r, треки автоматически переименованы, и мой текущий каталог теперь выглядит так.

UFjaiTZ0vu.png

Если взглянуть на треки внимательно, то можно заметить, что метаданные заполнены в полном соответствии с CUE-файлом рипа.

Qzh3a25xht.png

При делении рипа на треки MP3 программа использует энкодер lame и по умолчанию задан переменный битрейт в максимальном значении. Но cue2tracks даёт возможность задать любые валидные опции lame при помощи ключа -o.

cue2tracks -m mp3 -o " -b 320 --noreplaygain" -r Negoro.cue

Опции энкодера задаются в двойных кавычках с обязательным пробелом после открывающей кавычки. Если взглянуть на метаданные полученных такой командой треков, можно увидеть, что битрейт изменился.

vhudk8Bo3v.png

Если в результате деления рипа нужно получить треки формата Vorbis, то команда будет выглядеть следующим образом.

cue2tracks -m ogg -r Negoro.cue

Полученные треки Vorbis тоже будут иметь метаданные CUE-файла.

7gI3ceBTPA.png

cue2tracks получает треки Vorbis при помощи oggenc и по умолчанию для него задан ключ -q 4, определяющий качество кодирования, но при необходимости и этому энкодеру можно задать любые поддерживаемые им опции.

Последний из поддерживаемых форматов - Opus. Команда для получения треков этого формата будет выглядеть так.

cue2tracks -m opus -r Negoro.cue

Для получения треков Opus используется opusenc с дефолтными настройками, треки сразу после деления тоже будут уметь метаданные CUE-файла.

DDXB9XTJVs.png

6. Задаём параметры кодирования треков

По умолчанию cue2tracks использует следующие опции для кодирования треков:

  • FLAC - дефолтное значение flac;
  • Vorbis - -q 4;
  • Opus - дефолтное значение opusenc;
  • MP3 - -V 0 --noreplaygain --lowpass -1.

Эти значения можно переопределить при помощи файла настроек, который хранится в домашнем каталоге пользователя, в каталоге .config/cuetoolkit и по умолчанию выглядит так.

JrYN5XoS3D.png

Файл настроек создаётся автоматически при первом использовании cue2tracks и представляет из себя формат JSON, если вписать для каждого указанного в этом файле энкодера соответствующую строку в поле enc, то по умолчанию будут использованы заданные в этой строке опции. Пример заполнения файла:

{
  "flac": {
    "enc": "-8"
  },
  "mp3": {
    "enc": "-b 320 --noreplaygain"
  },
  "ogg": {
    "enc": "-q 3"
  },
  "opus": {
    "enc": null
  }
}

7. Деление рипов других форматов

Наиболее распространёнными в сети на сегодняшний день являются CDDA-рипы следующих форматов:

  • FLAC;
  • WAVPack;
  • Monkey's Audio;
  • ALAC.

cue2tracks легко справляется с рипами в формате FLAC и Monkey's Audio. Рипы других форматов без каких-либо проблем можно декодировать, а затем поделить на треки подсунув cue2tracks декодированный WAV-файл. Разберём один пример. У меня есть ещё один рип в формате WAVPack, мне его нужно поделить на треки. Сначала декодирую медиафайл рипа при помощи wvunpack.

oswsqEe50D.png

Теперь я имею возможность поделить его на треки любого поддерживаемого формата, например FLAC.

p0tSdqTHb3.png

В итоге получаю треки FLAC с заполненными метаданными.

cdZm3gANEZ.png

cue2tracks очень полезен в хозяйстве и качественно облегчает жизнь при работе с аудио-рипами, в том числе с CDDA-рипами, рекомендую всем заинтересованным.

Комментарии: