Делим FLAC на треки в Linux

prolinux

Опубликован:  2023-08-08T04:53:09.140573Z
Отредактирован:  2023-08-08T04:53:09.140573Z
Статус:  публичный
53
0
0

FLAC - это кодек для упаковки и хранения аудио данных, с его помощью можно упаковывать PCM WAV потоки с приблизительной экономией дискового пространства до ~30% и без потерь. Наибольшее распространение этот кодек получил на файлообменных ресурсах глобальной сети, с его помощью довольно удобно хранить звуковые рипы различных форматов, в том числе CDDA-рипы. В этой демонстрации рассмотрим простой способ деления цельных CDDA-рипов (и не только CDDA) на отдельные треки под управлением Debian с помощью программы cue2tracks из пакета cuetoolkit.

О задаче

Все знают, что такое звуковой компакт диск... Современная техногенная цивилизация до сих пор выпускает на этом носителе достаточно объёмный пласт различного творчества, в основном музыкального творчества. Но хранить коллекцию компакт дисков не очень удобно, они собирают на себя пыль, боятся солнечных лучей и занимают достаточно много пространства. А, поскольку хранящиеся на компакт диске записи уже оцифрованы, хранить их удобнее на других накопителях (HDD, SSD, flash и так далее) в виде обычных файлов.

Скопировать данные с компакт диска несложно, известно несколько различных программ для этого предназначенных, одна из них, наиболее популярная, EAC. Скопированные с компакт диска данные в около компьютерной тусовке принято называть рипами, от английского rip, не знаю, кто так решил, и почему именно rip, не суть важно.

Сегодня на файлообменных ресурсах встречается два типа CDDA-рипов:

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

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

О рипах второго типа - цельных CDDA-рипах и пойдёт речь далее в этом повествовании.

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

CDDA-рипы можно упаковывать в различные архивные форматы без потери данных, это значит, что PCM-поток, который распакован из файла будет точно соответствовать PCM-потоку, который был упакован в этот файл. Следующие lossless audio кодеки на сегодня являются наиболее популярными: FLAC, Monkey's Audio Codec, Wavpack. Разница между ними не столь принципиальна, но в этой демонстрации я буду работать именно с CDDA-рипом в формате FLAC.

В моём хозяйстве есть один CDDA-рип, и вот как он выглядит на жестком диске моего компьютера в окне файлового менеджера.

t5ItC41k6V.png

Как видно на снимке экрана, цельный CDDA-рип - это два файла:

  1. Файл формата FLAC - в нём хранится упакованный и сжатый PCM поток;

  2. Cuesheet файл - текстовый файл, в котором хранятся индексы, по которым рип делится на треки, и метаданные всего рипа и каждого отдельного трека.

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

Делим рип на треки

Делить исходный CDDA-рип на треки я буду с помощью программы cue2tracks из пакета cuetoolkit под управлением операционной системы Debian.

Для справки: cue2tracks из пакета cuetoolkit не единственная реализация решения поставленной задачи, с делением CDDA рипов на отдельные треки весьма успешно справляется программа ffcuesplit, о ней рассказывается в статье по ссылке.

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

$ mkdir sample
$ cd sample

CDDA-рип на моём жестком диске хранится в домашнем каталоге текущего пользователя, во вложенном каталоге с именем flac.

Программа cue2tracks является консольной, и получить справку о способах её использования можно прямо в консоли.

$ cue2tracks --help

3jSZi0eFEt.png

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

$ cue2tracks ~/flac/sample.flac

rvXNhofHkr.png

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

JVf1NPMweN.png

Давайте посмотрим на метаданные полученных файлов на примере любого из полученных треков.

$ metaflac --list --block-type VORBIS_COMMENT track03.flac

QkzUIDO8uq.png

Как видно на снимке экрана, у выбранного трека метаданные заполнены в соответствии с данными cuesheet. У всех остальных треков метаданные тоже заполнены корректно в полном соответствии с cuesheet.

Переименовываем файлы треков

Как видно из предыдущего примера использования cue2tracks при делении рипа на треки именует файлы по схеме track%NUM. Это поведение можно изменить с помощью ключа -r.

$ cue2tracks -r ~/flac/sample.cue

В этом случае файлы треков будут поименованы в соответствии с метаданными cuesheet.

x0V7KVlOGW.png


Выбираем формат треков

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

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

  • MP3;

  • Vorbis;

  • Opus.

Задать формат треков можно с помощью ключа -m.

$ cue2tracks -m mp3 ~/flac/sample.cue

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

$ cue2tracks -m ogg ~/flac/sample.cue

Если нужны треки в формате Opus, команда будет такая.

$ cue2tracks -m opus ~/flac/sample.cue

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

Контролируем зазоры

Между треками на компакт диске обычно определены зазоры длительностью около 2 секунд. Если в рипе зазоры выделены, то в сuesheet на каждом треке будет указано два индекса: INDEX 00 и INDEX 01. В этом случае зазоры можно контролировать с помощью ключа -g, при этом зазор можно определить так:

  1. В конец трека - по умолчанию;

  2. В начало трека, -g prepend;

  3. С обрезкой зазоров, -g split.

Пример команды:

$ cue2tracks -m mp3 -g split -r ~/flac/sample.flac

При выполнении такой команды зазоры будут обрезаны.

Задаём параметры энкодера

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

$ cue2tracks -m mp3 -o " -V 0 --lowpass -1 --noreplaygain" ~/flac/sample.cue

В данном случае кодирование треков будет осуществляться в формат MP3 энкодером lame, и ключом -o я задал параметры lame. Следует обратить внимание, что параметры энкодера задаются в двойных кавычках, и после открывающей кавычки должен следовать обязательный пробел. Для других энкодеров (flac, oggenc, opusenc) параметры кодирования задаются аналогичным образом.

Важное замечание: cue2tracks передаёт параметры энкодеру так, как они заданы в команде, без дополнительных проверок на ошибки и неточности.

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

$ cat ~/.config/cuetoolkit/options 
{
  "flac": {
    "enc": " -8"
  },
  "mp3": {
    "enc": " -V 0 --noreplaygain --lowpass -1"
  },
  "ogg": {
    "enc": " -q 5"
  },
  "opus": {
    "enc": " --bitrate 92.0"
  }
}

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

Деление рипов другого типа

Сегодня на файлообменных ресурсах сети можно встретить цельные рипы других форматов, отличных от CDDA, их тоже можно разделить на треки с помощью cue2tracks. Если ваш рип не является CDDA-рипом, и у него есть корректный cuesheet, такой рип можно разделить на треки с помощью ключа -n. Пример команды:

$ cue2tracks -n ~/flac/sample.cue

Подводим итог

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

  • FLAC;

  • Monkey's Audio;

  • WavPack;

  • PCM Wav.

При этом оба составляющих рип файла должны иметь одинаковые имена, отличающиеся только расширением. При помощи cue2tracks можно получить треки следующих форматов:

  • FLAC;

  • MP3;

  • Vorbis;

  • Opus.

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