Как разрезать FLAC, или cuetoolkit - обзор возможностей

avm

Опубликован:  2018-09-01T10:51:57.223209Z
Отредактирован:  2018-09-01T10:50:21.193136Z
Как разрезать образ CDDA на треки, как получить полную информацию об этом образе, включая метаданные и длительность треков, как заполнить метаданные треков одной командой, как всё это сделать в консоли Linux? Если вы когда-нибудь задавались такими вопросами, значит информация представленная ниже будет полезна и интересна, а cuetoolkit - набор инструментов, которого вам не хватало.

1. О cuetoolkit, необходимости и целесообразности

Описание инструментов из набора cuetoolkit я начну с описания причин, которые побудили меня продумать и реализовать этот набор инструментов.

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

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

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

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

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

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

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

Мне понадобится пример, для этого у меня есть один такой образ, и вот как он выглядит в терминале:

$ file *
Маша и Медведи - Солнцеклёш.cue:  ISO-8859 text, with CRLF line terminators
Маша и Медведи - Солнцеклёш.flac: FLAC audio bitstream data, 16 bit, stereo, 44.1 kHz, 126919800 samples
Маша и Медведи - Солнцеклёш.log:  Little-endian UTF-16 Unicode text, with CRLF, CR line terminators

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

$ uchardet Маша\ и\ Медведи\ -\ Солнцеклёш.cue 
windows-1251

Вследствие чего терминал покажет такой cue как-то так:

pEvD1K8DNq.jpg

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

Идём дальше... Нередко случается, что хранящийся рип необходимо быстро конвертировать в треки какого-нибудь распространённого lossy-формата, и сделать это нужно в терминале, потому что X-ы могут быть недоступны. Конечно, в официальном репозитории Debian stretch есть shntool и cuetools, с помощью которых порезать lossless-рип не составляет никакого труда. Например такой "простой" командой:

$ cuebreakpoints --split-gaps Маша\ и\ Медведи\ -\ Солнцеклёш.cue | shnsplit -o "cust ext=ogg oggenc -q 4 - -o %f" Маша\ и\ Медведи\ -\ Солнцеклёш.flac 

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

Более того, полученные такой командой треки лишены метаданных:

$ ogginfo split-track01.ogg 
Обработка файла "split-track01.ogg"...

Новый логический поток (#1, серийный номер: 23adacc4): тип vorbis
Заголовки vorbis обработаны для потока 1, далее информация...
Версия: 0
Поставщик: Xiph.Org libVorbis I 20150105
Каналы: 2
Битрейт: 44100

Номинальный битрейт: 128,000000 Кб/с
Максимальный битрейт не установлен
Минимальный битрейт не установлен
Vorbis stream 1:
    Total data length: 2672894 bytes
    Playback length: 2m:48.360s
    Average bitrate: 127,008506 kb/s
Логический поток 1 завершён

Метаданные придётся как-то заполнять. В случае с Vorbis можно использовать тот же cuetools, но если треки MP3, головная боль будет обеспечена. Учитывая, что делать это придётся в голой консоли, перспектива совсем не обещает лёгкой жизни.

С X-ми дела обстоят лучше, но с Х-ми устанешь возить по экрану курсор мыши, да и не всегда X-ы доступны. Отсюда вывод: мне нужен инструмент, который сможет максимально упростить манипуляции с CDDA-рипами и позволит выполнять в консоли следующие действия:

  1. Перекодировать исходный cue рипа в UTF-8 одним простым движением;
  2. Получать копию исходного cue с кириллицей преобразованной в транслитерацию;
  3. Получать на экран терминала полную информацию о рипе, включая список треков, длительность треков, хеш PCM-потока, метаданные рипа;
  4. Делить CDDA-рип на треки, при этом иметь возможность обрезать зазоры и автоматически получить на выходе треки с заполненными метаданными, форматы треков из списка: vorbis, opus, flac, mp3;
  5. Одной командой переопределять метаданные треков по исходному cue рипа, если таковой имеется;
  6. Собирать метаданные треков в текстовый файл, который можно использовать для переопределения метаданных треков, когда исходного cue нет. Естественно, полученный файл должен иметь сходный с cue синтаксис.

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

2. Назначение cuetoolkit и особенности его использования

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

Дело в том, что наряду с CDDA-рипами техногенная цивилизация XXI века имеет в своём арсенале ещё один вид звуковых рипов - так называемые собственные оцифровки снятые с записей на магнитной ленте или виниловых пластинках. Эти рипы отличаются от CDDA-рипов техническими параметрами PCM, а именно частотой дискретизации и квантованием. Инструменты cuetoolkit не предназначены для работы с такими рипами.

Второй важный момент... Файлообменные ресурсы сети Интернет предлагают в широком ассортименте CDDA-рипы двух типов:

  • цельные CDDA-рипы;
  • потрековые CDDA-рипы.

Основное отличие между этими двумя состоит в том, что цельные CDDA-рипы содержат звуковой поток в одном единственном медиа файле, а в потрековом CDDA-рипе количество медиа файлов будет равно количеству треков на звуковом компакт-диске, с которого этот рип снят. Кроме этого, у потрекового рипа содержание cue будет значительно отличаться от cue цельного рипа. Инструменты cuetoolkit задуманы, созданы, отлажены и протестированы только для работы с цельными CDDA-рипами.

Наконец CDDA-рипы доступные в файлообменных ресурсах сети Интернет могут отличаться друг от друга форматом медиа файла. Кодирование звука без потерь доступно нескольким современным аудио-кодекам, наибольшее распространение получили FLAC, Monkey's Audio, WavPack, ALAC. Инструменты cuetoolkit поддерживают работу с файлами форматов FLAC, Monkey's Audio, WavPack и WAV.

В наборе cuetoolkit есть инструмент для деления исходного CDDA-рипа на треки. Поддерживаются треки следующих форматов:

  • FLAC;
  • OGG Vorbis;
  • Opus;
  • MP3.

В наборе cuetoolkit есть инструмент для сбора метаданных из набора треков одного формата, поддерживаемые форматы перечислены выше. Этот инструмент собирает метаданные предложенных треков и генерирует текстовый файл, в котором используется синтаксис cue. Файлы полученные при помощи этого инструмента могут быть использованы другими инструментами cuetoolkit, но не годятся для использования со сторонним программным обеспечением. Это тоже следует учитывать.

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

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

Это всё, о чём мне хотелось рассказать перед описанием практического использования инструментов cuetoolkit. Самое интересное далее...

3. Установка cuetoolkit

Программа cuetoolkit разрабатывалась и тестировалась в окружении операционной системы Debian stretch. Установка cuetoolkit будет продемонстрирована на примере этой же операционной системы.

Код cuetoolkit написан на python3x и тестировался только с Python 3.5.3. Код программы не требует компиляции. Чтобы установить программу, потребуется следующее программное обеспечение:

  • git, так как в текущем состоянии cuetoolkit доступен только на github.com;
  • python3-pip - потребуется для установки пакета в систему.

Кроме того настоятельно рекомендуется предварительно установить из официального хранилища пакетов Debian stretch пакеты python3-mutagen и python3-chardet, дабы избежать возможных коллизий с apt. Инструменты из состава cuetoolkit требуют, чтобы в системе был установлен file. Все дальнейшие действия в этом описании предполагают, что перечисленные пакеты уже установлены.

Собственно, приступим...

Получаю код cuetoolkit.

sadmin@stretch:~$ git clone https://github.com/tgi-f/cuetoolkit.git
Клонирование в «cuetoolkit»…
remote: Counting objects: 180, done.
remote: Compressing objects: 100% (112/112), done.
remote: Total 180 (delta 96), reused 148 (delta 64), pack-reused 0
Получение объектов: 100% (180/180), 38.28 KiB | 0 bytes/s, готово.
Определение изменений: 100% (96/96), готово.
sadmin@stretch:~$ 

Захожу в каталог cuetoolkit.

sadmin@stretch:~$ cd cuetoolkit/
sadmin@stretch:~/cuetoolkit$ 

Находясь в этом каталоге устанавливаю cuetoolkit.

sadmin@stretch:~/cuetoolkit$ sudo pip3 install .
Processing /home/sadmin/cuetoolkit
Requirement already satisfied: chardet>=2.3.0 in /usr/lib/python3/dist-packages (from cuetoolkit==0.1.1)
Requirement already satisfied: mutagen>=1.36 in /usr/lib/python3/dist-packages (from cuetoolkit==0.1.1)
Installing collected packages: cuetoolkit
  Running setup.py install for cuetoolkit ... done
Successfully installed cuetoolkit-0.1.1
sadmin@stretch:~/cuetoolkit$ 

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

Если посмотреть на содержимое каталога /usr/local/bin, можно увидеть, что все инструменты из состава cuetoolkit уже доступны.

sadmin@stretch:~/cuetoolkit$ ls /usr/local/bin | grep cue
cue2copy
cue2points
cue2report
cue2tags
cue2tracks
tags2cue
sadmin@stretch:~/cuetoolkit$ 

Важное замечание: некоторые исполняемые файлы cuetoolkit требуют, чтобы в системе были установлены следующие пакеты:

  • shntool;
  • flac;
  • monkeys-audio;
  • wavpack;
  • vorbis-tools;
  • opus-tools;
  • lame.

Все перечисленные пакеты могут быть установлены из официального хранилища Debian stretch, кроме monkeys-audio. Отсутствие в системе перечисленных пакетов может вызвать ошибку при использовании некоторых исполняемых файлов cuetoolkit. Пример:

sadmin@stretch:~/cdda$ cue2report Маша\ и\ Медведи\ -\ Солнцеклёш.cue 
cue2report: error: shntool is not installed
sadmin@stretch:~/cdda$ 

Решить проблему можно только установив в систему соответствующий пакет.

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

4. Копируем cue-файл CDDA-рипа

У меня есть цельный CDDA-рип, который содержит три файла.

sadmin@stretch:~/cdda$ file *
Маша и Медведи - Солнцеклёш.cue:  ISO-8859 text, with CRLF line terminators
Маша и Медведи - Солнцеклёш.flac: FLAC audio bitstream data, 16 bit, stereo, 44.1 kHz, 126919800 samples
Маша и Медведи - Солнцеклёш.log:  Little-endian UTF-16 Unicode text, with CRLF, CR line terminators
sadmin@stretch:~/cdda$ 

Наибольший интерес сейчас представляет файл cue, который в исходном состоянии имеет windows кодировку.

sadmin@stretch:~/cdda$ uchardet Маша\ и\ Медведи\ -\ Солнцеклёш.cue 
windows-1251
sadmin@stretch:~/cdda$

В составе cuetoolkit есть утилита cue2copy. С её помощью можно довольно просто скопировать исходный cue файл.

sadmin@stretch:~/cdda$ cue2copy -o copy.cue Маша\ и\ Медведи\ -\ Солнцеклёш.cue
Done!
sadmin@stretch:~/cdda$ 

Теперь, если заглянуть в текущий каталог, в нём обнаружится копия исходного cue с именем copy.cue. Кодировка полученной копии - UTF-8.

sadmin@stretch:~/cdda$ uchardet copy.cue 
UTF-8
sadmin@stretch:~/cdda$ 

Утилита cue2copy позволяет копировать cue файлы и, при необходимости, преобразовать русскоязычные кириллические символы исходного cue в транслитерацию. Программа имеет минимальный набор ключей, справку по которым можно получить прямо в командной строке.

sadmin@stretch:~/cdda$ cue2copy -h
usage: cue2copy [-h] [-v] [-t] [-o OUTPUT] cue_file

positional arguments:
  cue_file       the file being copied

optional arguments:
  -h, --help     show this help message and exit
  -v, --version  show program's version number and exit
  -t             convert to transliteration (only for Russian language)
  -o OUTPUT      the output file name
sadmin@stretch:~/cdda$ 

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

sadmin@stretch:~/cdda$ cue2copy Маша\ и\ Медведи\ -\ Солнцеклёш.cue
Done!
sadmin@stretch:~/cdda$ ls | grep cue
copy.cue
Маша и Медведи - Солнцеклёш.cue
Маша и Медведи - Солнцеклёш.cue~
sadmin@stretch:~/cdda$ 

Имя копии может совпадать с именем исходного cue, тогда исходный cue будет полностью переписан.

sadmin@stretch:~/cdda$ cue2copy -o Маша\ и\ Медведи\ -\ Солнцеклёш.cue Маша\ и\ Медведи\ -\ Солнцеклёш.cue
Done!
sadmin@stretch:~/cdda$ uchardet Маша\ и\ Медведи\ -\ Солнцеклёш.cue
UTF-8
sadmin@stretch:~/cdda$ 

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

sadmin@stretch:~/cdda$ cue2copy -t -o copy_trans.cue Маша\ и\ Медведи\ -\ Солнцеклёш.cue
Done!
sadmin@stretch:~/cdda$ 

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

5. Получаем на экран терминала полную информацию о CDDA-рипе

Продолжим с нашим CDDA-рипом. Напомню, в текущей директории я имею CDDA-рип и транслитерированную копию его cue файла.

sadmin@stretch:~/cdda$ file *
copy_trans.cue:                   ASCII text
Маша и Медведи - Солнцеклёш.cue:  ISO-8859 text, with CRLF line terminators
Маша и Медведи - Солнцеклёш.flac: FLAC audio bitstream data, 16 bit, stereo, 44.1 kHz, 126919800 samples
Маша и Медведи - Солнцеклёш.log:  Little-endian UTF-16 Unicode text, with CRLF, CR line terminators
sadmin@stretch:~/cdda$ 

В составе cuetoolkit есть утилита cue2report, с помощью которой можно получить отчёт о содержании CDDA-рипа на экран терминала. Программа имеет интерфейс командной строки и предоставляет минимальную справку.

sadmin@stretch:~/cdda$ cue2report -h
usage: cue2report [-h] [-v] [-c] cue_file

positional arguments:
  cue_file       the reported file name

optional arguments:
  -h, --help     show this help message and exit
  -v, --version  show program's version number and exit
  -c             count md5 hash of PCM if available
sadmin@stretch:~/cdda$ 

Чтобы получить отчёт о рипе, достаточно вызвать cue2report c именем cue рипа или именем медиа файла.

sadmin@stretch:~/cdda$ cue2report Маша\ и\ Медведи\ -\ Солнцеклёш.cue
genre:         Rock
year:          1998
disc id:       990B3E0C
commentary:    ExactAudioCopy v1.0b1
artist:        Маша и Медведи
album:         Солнцеклёш
type:          CDDA
cue sheet:     Маша и Медведи - Солнцеклёш.cue
media file:    Маша и Медведи - Солнцеклёш.flac
total length:  47:58.0
tracks total:  12
01  Маша и Медведи  Мил-Мила        02:52.5
02  Маша и Медведи  Любочка         04:21.5
03  Маша и Медведи  Коса            04:45.2
04  Маша и Медведи  День-Ночь       03:24.7
05  Маша и Медведи  Б.Т.            04:59.3
06  Маша и Медведи  Солнцеклёш      03:04.7
07  Маша и Медведи  Земно-Неземная  04:17.2
08  Маша и Медведи  Сказка          03:35.4
09  Маша и Медведи  Дворник         04:12.5
10  Маша и Медведи  Нелюбимый       03:40.0
11  Маша и Медведи  Московская      04:26.9
12  Маша и Медведи  Рейкьявик       04:18.1
sadmin@stretch:~/cdda$ 

Важное замечание: имена cue и медиа файла должны совпадать до знака.

У cue2report есть ключ -c, с помощью которого можно включить в отчёт md5 хэш PCM потока медиа файла CDDA-рипа.

sadmin@stretch:~/cdda$ cue2report -c Маша\ и\ Медведи\ -\ Солнцеклёш.flac 
Hashing [/home/sadmin/cdda/Маша и Медведи - Солнцеклёш.flac] (47:58.00) : 100% OK
genre:         Rock
year:          1998
disc id:       990B3E0C
commentary:    ExactAudioCopy v1.0b1
artist:        Маша и Медведи
album:         Солнцеклёш
type:          CDDA
md5 hash:      c6ab446da5619bd9b6329d6d1a1aa4b5
cue sheet:     Маша и Медведи - Солнцеклёш.cue
media file:    Маша и Медведи - Солнцеклёш.flac
total length:  47:58.0
tracks total:  12
01  Маша и Медведи  Мил-Мила        02:52.5
02  Маша и Медведи  Любочка         04:21.5
03  Маша и Медведи  Коса            04:45.2
04  Маша и Медведи  День-Ночь       03:24.7
05  Маша и Медведи  Б.Т.            04:59.3
06  Маша и Медведи  Солнцеклёш      03:04.7
07  Маша и Медведи  Земно-Неземная  04:17.2
08  Маша и Медведи  Сказка          03:35.4
09  Маша и Медведи  Дворник         04:12.5
10  Маша и Медведи  Нелюбимый       03:40.0
11  Маша и Медведи  Московская      04:26.9
12  Маша и Медведи  Рейкьявик       04:18.1
sadmin@stretch:~/cdda$ 

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

sadmin@stretch:~/cdda$ cue2report copy_trans.cue 
genre:         Rock
year:          1998
disc id:       990B3E0C
commentary:    ExactAudioCopy v1.0b1
artist:        Masha i Medvedi
album:         Solntseklesh
tracks total:  12
01  Masha i Medvedi  Mil-Mila
02  Masha i Medvedi  Liubochka
03  Masha i Medvedi  Kosa
04  Masha i Medvedi  Den-Noch
05  Masha i Medvedi  B.T.
06  Masha i Medvedi  Solntseklesh
07  Masha i Medvedi  Zemno-Nezemnaia
08  Masha i Medvedi  Skazka
09  Masha i Medvedi  Dvornik
10  Masha i Medvedi  Neliubimyi
11  Masha i Medvedi  Moskovskaia
12  Masha i Medvedi  Reikiavik
sadmin@stretch:~/cdda$ 

Кроме информации о метаданных CDDA-рипа, иногда возникает необходимость получить информацию об индексах cue файла, такой вариант предусмотрен. Для сортировки индексов в составе cuetoolkit есть утилита cue2points, она отбирает индексы исходного cue, сортирует их в соответствии с выбранной схемой, преобразует в формат m:ss.ff и выдаёт на экран терминала. У программы есть минимальная справка.

sadmin@stretch:~/cdda$ cue2points -h
usage: cue2points [-h] [-v] [-g {append,prepend,split}] cue_file

positional arguments:
  cue_file              the cue sheet file name

optional arguments:
  -h, --help            show this help message and exit
  -v, --version         show program's version number and exit
  -g {append,prepend,split}
                        control pre-gaps, append, prepend or split them
sadmin@stretch:~/cdda$ 

Программа имеет три различные схемы по которым отбираются индексы. Если индексы исходного cue определяют зазоры, то при помощи cue2points достаточно просто это выявить.

sadmin@stretch:~/cdda$ cue2points Маша\ и\ Медведи\ -\ Солнцеклёш.cue | wc -l
11
sadmin@stretch:~/cdda$ cue2points -g split Маша\ и\ Медведи\ -\ Солнцеклёш.cue | wc -l
22
sadmin@stretch:~/cdda$ 

В данном случае CDDA-рип имеет зазоры в каждом треке. Зазоры можно распределять на конец трека.

sadmin@stretch:~/cdda$ cue2points Маша\ и\ Медведи\ -\ Солнцеклёш.cue
2:52.34
7:14.00
11:59.17
15:23.72
20:23.17
23:27.70
27:45.12
31:20.40
35:33.02
39:13.00
43:39.65
sadmin@stretch:~/cdda$ 

Или на начало трека.

sadmin@stretch:~/cdda$ cue2points -g prepend Маша\ и\ Медведи\ -\ Солнцеклёш.cue 
2:48.27
7:10.62
11:55.50
15:22.57
20:18.74
23:25.27
27:42.62
31:17.15
35:29.55
39:08.72
43:36.37
sadmin@stretch:~/cdda$ 

С помощью ключа -g split можно получить на экран терминала все индексы исходного cue.

Важное замечание: cue2points только выводит на экран индексы исходного cue, для деления CDDA-рипа на треки предназначена другая утилита из состава cuetoolkit, о ней далее.

6. Делим CDDA-рип на треки

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

sadmin@stretch:~/cdda$ file *
copy_trans.cue:                   ASCII text
Маша и Медведи - Солнцеклёш.cue:  ISO-8859 text, with CRLF line terminators
Маша и Медведи - Солнцеклёш.flac: FLAC audio bitstream data, 16 bit, stereo, 44.1 kHz, 126919800 samples
Маша и Медведи - Солнцеклёш.log:  Little-endian UTF-16 Unicode text, with CRLF, CR line terminators
sadmin@stretch:~/cdda$ 

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

sadmin@stretch:~/cdda$ cue2tracks -h
usage: cue2tracks [-h] [-v] [-g {append,prepend,split}]
                  [-m {flac,ogg,opus,mp3}] [-o ENC_OPTS] [-r] [-q]
                  cue_file

positional arguments:
  cue_file              the converted file name

optional arguments:
  -h, --help            show this help message and exit
  -v, --version         show program's version number and exit
  -g {append,prepend,split}
                        control gaps
  -m {flac,ogg,opus,mp3}
                        the output media type, default is flac
  -o ENC_OPTS           encoder options
  -r                    rename tracks
  -q                    show no output
sadmin@stretch:~/cdda$ 

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

  • FLAC;
  • OGG Vorbis;
  • Opus;
  • MP3.

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

Разделяемый CDDA-рип задаётся в командной строке именем его cue или медиа файла, cue2tracks поддерживает следующие форматы CDDA-рипов:

  • FLAC;
  • WAV;
  • Monkey's Audio;
  • WavPack.

cue2tracks позволяет делить заданный CDDA-рип по одной из трёх схем:

  • append - зазоры в конце треков (схема по умолчанию);
  • prepend - зазоры в начале треков;
  • split - обрезает зазоры.

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

Предлагаю пример деления исходного CDDA-рипа на треки MP3 с обрезкой зазоров и переименованием файлов. Опции энкодера в примере заданы в командной строке.

sadmin@stretch:~/cdda$ cue2tracks -m mp3 -o ' -b 192 --noreplaygain' -r -g split Маша\ и\ Медведи\ -\ Солнцеклёш.flac 
shnsplit: warning: file 4 will be too short to be burned
shnsplit: warning: file 6 will be too short to be burned
shnsplit: warning: file 8 will be too short to be burned
shnsplit: warning: file 12 will be too short to be burned
shnsplit: warning: file 14 will be too short to be burned
shnsplit: warning: file 16 will be too short to be burned
shnsplit: warning: file 18 will be too short to be burned
shnsplit: warning: file 22 will be too short to be burned
Splitting [/home/sadmin/cdda/Маша и Медведи - Солнцеклёш.flac] (47:58.00) --> [track01.mp3] (2:48.27) : 100% OK
Splitting [/home/sadmin/cdda/Маша и Медведи - Солнцеклёш.flac] (47:58.00) --> [track02.mp3] (0:04.07) : 100% OK
Splitting [/home/sadmin/cdda/Маша и Медведи - Солнцеклёш.flac] (47:58.00) --> [track03.mp3] (4:18.28) : 100% OK
Splitting [/home/sadmin/cdda/Маша и Медведи - Солнцеклёш.flac] (47:58.00) --> [track04.mp3] (0:03.13) : 100% OK
Splitting [/home/sadmin/cdda/Маша и Медведи - Солнцеклёш.flac] (47:58.00) --> [track05.mp3] (4:41.50) : 100% OK
Splitting [/home/sadmin/cdda/Маша и Медведи - Солнцеклёш.flac] (47:58.00) --> [track06.mp3] (0:03.42) : 100% OK
Splitting [/home/sadmin/cdda/Маша и Медведи - Солнцеклёш.flac] (47:58.00) --> [track07.mp3] (3:23.40) : 100% OK
Splitting [/home/sadmin/cdda/Маша и Медведи - Солнцеклёш.flac] (47:58.00) --> [track08.mp3] (0:01.15) : 100% OK
Splitting [/home/sadmin/cdda/Маша и Медведи - Солнцеклёш.flac] (47:58.00) --> [track09.mp3] (4:55.02) : 100% OK
Splitting [/home/sadmin/cdda/Маша и Медведи - Солнцеклёш.flac] (47:58.00) --> [track10.mp3] (0:04.18) : 100% OK
Splitting [/home/sadmin/cdda/Маша и Медведи - Солнцеклёш.flac] (47:58.00) --> [track11.mp3] (3:02.10) : 100% OK
Splitting [/home/sadmin/cdda/Маша и Медведи - Солнцеклёш.flac] (47:58.00) --> [track12.mp3] (0:02.43) : 100% OK
Splitting [/home/sadmin/cdda/Маша и Медведи - Солнцеклёш.flac] (47:58.00) --> [track13.mp3] (4:14.67) : 100% OK
Splitting [/home/sadmin/cdda/Маша и Медведи - Солнцеклёш.flac] (47:58.00) --> [track14.mp3] (0:02.25) : 100% OK
Splitting [/home/sadmin/cdda/Маша и Медведи - Солнцеклёш.flac] (47:58.00) --> [track15.mp3] (3:32.03) : 100% OK
Splitting [/home/sadmin/cdda/Маша и Медведи - Солнцеклёш.flac] (47:58.00) --> [track16.mp3] (0:03.25) : 100% OK
Splitting [/home/sadmin/cdda/Маша и Медведи - Солнцеклёш.flac] (47:58.00) --> [track17.mp3] (4:09.15) : 100% OK
Splitting [/home/sadmin/cdda/Маша и Медведи - Солнцеклёш.flac] (47:58.00) --> [track18.mp3] (0:03.22) : 100% OK
Splitting [/home/sadmin/cdda/Маша и Медведи - Солнцеклёш.flac] (47:58.00) --> [track19.mp3] (3:35.70) : 100% OK
Splitting [/home/sadmin/cdda/Маша и Медведи - Солнцеклёш.flac] (47:58.00) --> [track20.mp3] (0:04.03) : 100% OK
Splitting [/home/sadmin/cdda/Маша и Медведи - Солнцеклёш.flac] (47:58.00) --> [track21.mp3] (4:23.37) : 100% OK
Splitting [/home/sadmin/cdda/Маша и Медведи - Солнцеклёш.flac] (47:58.00) --> [track22.mp3] (0:03.28) : 100% OK
Splitting [/home/sadmin/cdda/Маша и Медведи - Солнцеклёш.flac] (47:58.00) --> [track23.mp3] (4:18.10) : 100% OK
sadmin@stretch:~/cdda$ 

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

sadmin@stretch:~/cdda$ ls | grep mp3
01 - Маша и Медведи - Мил-Мила.mp3
02 - Маша и Медведи - Любочка.mp3
03 - Маша и Медведи - Коса.mp3
04 - Маша и Медведи - День-Ночь.mp3
05 - Маша и Медведи - Б.Т..mp3
06 - Маша и Медведи - Солнцеклёш.mp3
07 - Маша и Медведи - Земно-Неземная.mp3
08 - Маша и Медведи - Сказка.mp3
09 - Маша и Медведи - Дворник.mp3
10 - Маша и Медведи - Нелюбимый.mp3
11 - Маша и Медведи - Московская.mp3
12 - Маша и Медведи - Рейкьявик.mp3
sadmin@stretch:~/cdda$ 

Метаданные каждого из полученных треков заполнены в соответствии с метаданными исходного CDDA-рипа и при ближайшем рассмотрении имеют следующий вид.

sadmin@stretch:~/cdda$ eyeD3 01\ -\ Маша\ и\ Медведи\ -\ Мил-Мила.mp3 
/home/sadmin/cdda/01 - Маша и Медведи - Мил-Мила.mp3               [ 3.86 MB ]
-------------------------------------------------------------------------------
Time: 02:48 MPEG1, Layer III    [ 192 kb/s @ 44100 Hz - Joint stereo ]
-------------------------------------------------------------------------------
ID3 v2.4:
title: Мил-Мила
artist: Маша и Медведи
album: Солнцеклёш
album artist: None
recording date: 1998
track: 1/12     genre: Rock (id 17)
Comment: [Description: ] [Lang: XXX]
ExactAudioCopy v1.0b1/990B3E0C
-------------------------------------------------------------------------------
sadmin@stretch:~/cdda$ 

При использовании cue2tracks следует иметь ввиду, что опции энкодера могут быть заданы тремя различными способами:

  • опцией -o в командной строке при делении рипа, при этом важно соблюдать форму -o ' encoder options', пробел после открывающей кавычки обязателен;
  • файлом настройки опций энкодеров (~/.cuetoolkit/options), если в командной строке не задана опция -o;
  • дефолтными настройками cue2tracks, если в командной строке не задана опция -o и файл настройки опций энкодеров имеет начальное состояние.

Файл настройки опций энкодеров находится в домашнем каталоге в директории .cuetoolkit, полный путь ~/.cuetoolkit/options, имеет формат json. Файл создаётся при первом использовании cue2tracks и в начальном состоянии имеет следующий вид.

{
  "flac": {
    "enc": null
  },
  "mp3": {
    "enc": null
  },
  "ogg": {
    "enc": null
  },
  "opus": {
    "enc": null
  }
}

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

{
  "flac": {
    "enc": null
  },
  "mp3": {
    "enc": "--noreplaygain --lowpass -1 -V 0"
  },
  "ogg": {
    "enc": "-q 4"
  },
  "opus": {
    "enc": "--raw-rate 44100"
  }
}

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

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

sadmin@stretch:~/cdda$ cue2tracks -m ogg Маша\ и\ Медведи\ -\ Солнцеклёш.flac 
cue2tracks: error: oggenc is not installed
sadmin@stretch:~/cdda$ 

Исправить ситуацию возможно только установкой соответствующего вашей задаче энкодера.

При исполнении cue2tracks без ключей, заданный CDDA-рип будет поделен на треки FLAC с зазором в конце трека.

sadmin@stretch:~/cdda$ cue2tracks Маша\ и\ Медведи\ -\ Солнцеклёш.flac 
Splitting [/home/sadmin/cdda/Маша и Медведи - Солнцеклёш.flac] (47:58.00) --> [track01.flac] (2:52.34) : 100% OK
Splitting [/home/sadmin/cdda/Маша и Медведи - Солнцеклёш.flac] (47:58.00) --> [track02.flac] (4:21.41) : 100% OK
Splitting [/home/sadmin/cdda/Маша и Медведи - Солнцеклёш.flac] (47:58.00) --> [track03.flac] (4:45.17) : 100% OK
Splitting [/home/sadmin/cdda/Маша и Медведи - Солнцеклёш.flac] (47:58.00) --> [track04.flac] (3:24.55) : 100% OK
Splitting [/home/sadmin/cdda/Маша и Медведи - Солнцеклёш.flac] (47:58.00) --> [track05.flac] (4:59.20) : 100% OK
Splitting [/home/sadmin/cdda/Маша и Медведи - Солнцеклёш.flac] (47:58.00) --> [track06.flac] (3:04.53) : 100% OK
Splitting [/home/sadmin/cdda/Маша и Медведи - Солнцеклёш.flac] (47:58.00) --> [track07.flac] (4:17.17) : 100% OK
Splitting [/home/sadmin/cdda/Маша и Медведи - Солнцеклёш.flac] (47:58.00) --> [track08.flac] (3:35.28) : 100% OK
Splitting [/home/sadmin/cdda/Маша и Медведи - Солнцеклёш.flac] (47:58.00) --> [track09.flac] (4:12.37) : 100% OK
Splitting [/home/sadmin/cdda/Маша и Медведи - Солнцеклёш.flac] (47:58.00) --> [track10.flac] (3:39.73) : 100% OK
Splitting [/home/sadmin/cdda/Маша и Медведи - Солнцеклёш.flac] (47:58.00) --> [track11.flac] (4:26.65) : 100% OK
Splitting [/home/sadmin/cdda/Маша и Медведи - Солнцеклёш.flac] (47:58.00) --> [track12.flac] (4:18.10) : 100% OK
sadmin@stretch:~/cdda$ 

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

sadmin@stretch:~/cdda$ ls | grep flac
track01.flac
track02.flac
track03.flac
track04.flac
track05.flac
track06.flac
track07.flac
track08.flac
track09.flac
track10.flac
track11.flac
track12.flac
Маша и Медведи - Солнцеклёш.flac
sadmin@stretch:~/cdda$ 

Но будут содержать метаданные исходного CDDA-рипа.

sadmin@stretch:~/cdda$ metaflac --list --block-type=VORBIS_COMMENT track01.flac
METADATA block #2
  type: 4 (VORBIS_COMMENT)
  is last: false
  length: 236
  vendor string: reference libFLAC 1.3.2 20170101
  comments: 8
    comment[0]: artist=Маша и Медведи
    comment[1]: album=Солнцеклёш
    comment[2]: genre=Rock
    comment[3]: title=Мил-Мила
    comment[4]: tracknumber=01
    comment[5]: tracktotal=12
    comment[6]: date=1998
    comment[7]: comment=ExactAudioCopy v1.0b1/990B3E0C
sadmin@stretch:~/cdda$ 

7. Переопределяем метаданные треков по исходному cue

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

sadmin@stretch:~/cdda$ file *
copy_trans.cue:                   ASCII text
mp3:                              directory
Маша и Медведи - Солнцеклёш.cue:  ISO-8859 text, with CRLF line terminators
Маша и Медведи - Солнцеклёш.flac: FLAC audio bitstream data, 16 bit, stereo, 44.1 kHz, 126919800 samples
Маша и Медведи - Солнцеклёш.log:  Little-endian UTF-16 Unicode text, with CRLF, CR line terminators
sadmin@stretch:~/cdda$ 

Количество треков в каталоге mp3 совпадает с количеством треков в исходном CDDA-рипе, а файлы треков поименованы в определённом порядке.

sadmin@stretch:~/cdda$ ls -1 mp3
track01.mp3
track02.mp3
track03.mp3
track04.mp3
track05.mp3
track06.mp3
track07.mp3
track08.mp3
track09.mp3
track10.mp3
track11.mp3
track12.mp3
sadmin@stretch:~/cdda$ 

Все MP3-треки не имеют метаданных.

sadmin@stretch:~/cdda$ eyeD3 mp3/track01.mp3 
/home/sadmin/cdda/mp3/track01.mp3                                  [ 5.51 MB ]
-------------------------------------------------------------------------------
Time: 02:52 MPEG1, Layer III    [ ~268 kb/s @ 44100 Hz - Joint stereo ]
-------------------------------------------------------------------------------
No ID3 v1.x/v2.x tag found!
sadmin@stretch:~/cdda$ 

Мне нужно заполнить метаданные MP3-треков в соответствии с метаданными исходного CDDA-рипа. В составе cuetoolkit имеется утилита cue2tags, с помощью которой эта задача решается одной простой командой. Программа имеет интерфейс командной строки и минимальную справку.

sadmin@stretch:~/cdda$ cue2tags -h
usage: cue2tags [-h] [-v] -m {flac,ogg,opus,mp3} [-r] [-q] cue_file

positional arguments:
  cue_file              the cue sheet file name

optional arguments:
  -h, --help            show this help message and exit
  -v, --version         show program's version number and exit
  -m {flac,ogg,opus,mp3}
                        the target tracks media type, required option
  -r                    rename tracks
  -q                    no output
sadmin@stretch:~/cdda$ 

cue2tags извлекает метаданные исходного CDDA-рипа из cue файла, заполняет полученными данными метаданные предложенных треков и при необходимости переименовывает файлы треков. Программа поддерживает следующие форматы треков:

  • FLAC;
  • OGGVorbis;
  • Opus;
  • MP3.

Все треки должны быть одного формата, любого из указанных. Количество треков в каталоге должно совпадать с количеством треков в cue файле, файлы треков должны быть поименованы в соответствующем порядке. Захожу в каталог mp3.

sadmin@stretch:~/cdda$ cd mp3
sadmin@stretch:~/cdda/mp3$ 

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

sadmin@stretch:~/cdda/mp3$ cue2tags -m mp3 -r ../copy_trans.cue 
track01.mp3  ->  01 - Masha i Medvedi - Mil-Mila.mp3
track02.mp3  ->  02 - Masha i Medvedi - Liubochka.mp3
track03.mp3  ->  03 - Masha i Medvedi - Kosa.mp3
track04.mp3  ->  04 - Masha i Medvedi - Den-Noch.mp3
track05.mp3  ->  05 - Masha i Medvedi - B.T..mp3
track06.mp3  ->  06 - Masha i Medvedi - Solntseklesh.mp3
track07.mp3  ->  07 - Masha i Medvedi - Zemno-Nezemnaia.mp3
track08.mp3  ->  08 - Masha i Medvedi - Skazka.mp3
track09.mp3  ->  09 - Masha i Medvedi - Dvornik.mp3
track10.mp3  ->  10 - Masha i Medvedi - Neliubimyi.mp3
track11.mp3  ->  11 - Masha i Medvedi - Moskovskaia.mp3
track12.mp3  ->  12 - Masha i Medvedi - Reikiavik.mp3
sadmin@stretch:~/cdda/mp3$ 

Теперь файлы треков поименованы в транслитерации. Переопределяю метаданные треков по исходному cue CDDA-рипа.

sadmin@stretch:~/cdda/mp3$ cue2tags -m mp3 ../Маша\ и\ Медведи\ -\ Солнцеклёш.cue
01 - Masha i Medvedi - Mil-Mila.mp3         done
02 - Masha i Medvedi - Liubochka.mp3        done
03 - Masha i Medvedi - Kosa.mp3             done
04 - Masha i Medvedi - Den-Noch.mp3         done
05 - Masha i Medvedi - B.T..mp3             done
06 - Masha i Medvedi - Solntseklesh.mp3     done
07 - Masha i Medvedi - Zemno-Nezemnaia.mp3  done
08 - Masha i Medvedi - Skazka.mp3           done
09 - Masha i Medvedi - Dvornik.mp3          done
10 - Masha i Medvedi - Neliubimyi.mp3       done
11 - Masha i Medvedi - Moskovskaia.mp3      done
12 - Masha i Medvedi - Reikiavik.mp3        done
sadmin@stretch:~/cdda/mp3$ 

Теперь метаданные треков имеют следующий вид.

sadmin@stretch:~/cdda/mp3$ eyeD3 01\ -\ Masha\ i\ Medvedi\ -\ Mil-Mila.mp3 
/home/sadmin/cdda/mp3/01 - Masha i Medvedi - Mil-Mila.mp3          [ 5.52 MB ]
-------------------------------------------------------------------------------
Time: 02:52 MPEG1, Layer III    [ ~268 kb/s @ 44100 Hz - Joint stereo ]
-------------------------------------------------------------------------------
ID3 v2.4:
title: Мил-Мила
artist: Маша и Медведи
album: Солнцеклёш
album artist: None
recording date: 1998
track: 1/12     genre: Rock (id 17)
Comment: [Description: ] [Lang: XXX]
ExactAudioCopy v1.0b1/990B3E0C
-------------------------------------------------------------------------------
sadmin@stretch:~/cdda/mp3$ 

Учитывая, что cue файл - обычный текстовый файл, который легко правится в любом консольном текстовом редакторе, а метаданные треков при помощи cue2tags переопределяются одной командой, мы получаем достаточно удобный инструмент для заполнения метаданных треков в голой консоли Linux.

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

8. Собираем метаданные треков в текстовый файл

Итак, на данный момент в моей текущей директории имеется группа MP3-треков.

sadmin@stretch:~/cdda/mp3$ ls -1
01 - Masha i Medvedi - Mil-Mila.mp3
02 - Masha i Medvedi - Liubochka.mp3
03 - Masha i Medvedi - Kosa.mp3
04 - Masha i Medvedi - Den-Noch.mp3
05 - Masha i Medvedi - B.T..mp3
06 - Masha i Medvedi - Solntseklesh.mp3
07 - Masha i Medvedi - Zemno-Nezemnaia.mp3
08 - Masha i Medvedi - Skazka.mp3
09 - Masha i Medvedi - Dvornik.mp3
10 - Masha i Medvedi - Neliubimyi.mp3
11 - Masha i Medvedi - Moskovskaia.mp3
12 - Masha i Medvedi - Reikiavik.mp3
sadmin@stretch:~/cdda/mp3$ 

Все MP3-треки имеют метаданные такого вида.

sadmin@stretch:~/cdda/mp3$ eyeD3 11\ -\ Masha\ i\ Medvedi\ -\ Moskovskaia.mp3 
/home/sadmin/cdda/mp3/11 - Masha i Medvedi - Moskovskaia.mp3       [ 7.59 MB ]
-------------------------------------------------------------------------------
Time: 04:26 MPEG1, Layer III    [ ~238 kb/s @ 44100 Hz - Joint stereo ]
-------------------------------------------------------------------------------
ID3 v2.4:
title: Московская
artist: Маша и Медведи
album: Солнцеклёш
album artist: None
recording date: 1998
track: 11/12        genre: Rock (id 17)
Comment: [Description: ] [Lang: XXX]
ExactAudioCopy v1.0b1/990B3E0C
-------------------------------------------------------------------------------
sadmin@stretch:~/cdda/mp3$ 

Мне нужно переопределить метаданные этих треков. Допустим, что у меня нет соответствующего этим трекам CDDA-рипа, а значит, нет и исходного cue файла, поэтому воспользоваться cue2tags не получится.

В составе cuetoolkit есть утилита tags2cue, которая позволяет собирать метаданные заданных треков и на их основе получать начальный cue файл. Программа имеет интерфейс командной строки и минимальную справку.

sadmin@stretch:~/cdda/mp3$ tags2cue -h
usage: tags2cue [-h] [-v] [-a {single,various}] [-e] -m {flac,ogg,opus,mp3}
                cue_file

positional arguments:
  cue_file              this file will be created

optional arguments:
  -h, --help            show this help message and exit
  -v, --version         show program's version number and exit
  -a {single,various}   the album type(single/various artists), default is
                        single
  -e                    empty tags are acceptable
  -m {flac,ogg,opus,mp3}
                        the input media type
sadmin@stretch:~/cdda/mp3$ 

tags2cue умеет собирать метаданные с треков следующих форматов:

  • FLAC;
  • OGGVorbis;
  • Opus;
  • MP3.

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

sadmin@stretch:~/cdda/mp3$ tags2cue -m mp3 sample.cue
Done!
sadmin@stretch:~/cdda/mp3$ 

В результате работы tags2cue в текущей директории создаётся текстовый файл, повторяющий синтаксис cue, который можно править и использовать для переопределения метаданных исходных треков программой cue2tags.

sadmin@stretch:~/cdda/mp3$ ls | grep cue
sample.cue
sadmin@stretch:~/cdda/mp3$ 

Отчёт о содержании полученного cue файла можно просмотреть при помощи cue2report.

sadmin@stretch:~/cdda/mp3$ cue2report sample.cue
genre:         Rock
year:          1998
commentary:    cuetoolkit-0.1.1
artist:        Маша и Медведи
album:         Солнцеклёш
tracks total:  12
01  Маша и Медведи  Мил-Мила
02  Маша и Медведи  Любочка
03  Маша и Медведи  Коса
04  Маша и Медведи  День-Ночь
05  Маша и Медведи  Б.Т.
06  Маша и Медведи  Солнцеклёш
07  Маша и Медведи  Земно-Неземная
08  Маша и Медведи  Сказка
09  Маша и Медведи  Дворник
10  Маша и Медведи  Нелюбимый
11  Маша и Медведи  Московская
12  Маша и Медведи  Рейкьявик
sadmin@stretch:~/cdda/mp3$ 

Важное замечание: все заданные треки должны иметь заполненные метаданные, если какой-либо трек не имеет метаданных, на экран будет выведено предупреждение, cue файл не будет создан.

sadmin@stretch:~/cdda/mp3$ tags2cue -m mp3 try.cue
"03 - Masha i Medvedi - Kosa.mp3": no suitable tag
"08 - Masha i Medvedi - Skazka.mp3": no suitable tag
sadmin@stretch:~/cdda/mp3$ 

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

sadmin@stretch:~/cdda/mp3$ tags2cue -m mp3 -e try.cue
"03 - Masha i Medvedi - Kosa.mp3": no suitable tag
"08 - Masha i Medvedi - Skazka.mp3": no suitable tag
"03 - Masha i Medvedi - Kosa.mp3": artist is empty
"03 - Masha i Medvedi - Kosa.mp3": title is empty
"08 - Masha i Medvedi - Skazka.mp3": artist is empty
"08 - Masha i Medvedi - Skazka.mp3": title is empty
Done!
sadmin@stretch:~/cdda/mp3$ 

В результате, полученный cue файл будет иметь следующее содержание.

sadmin@stretch:~/cdda/mp3$ cue2report try.cue 
genre:         Rock
year:          1998
commentary:    cuetoolkit-0.1.1
artist:        Маша и Медведи
album:         Солнцеклёш
tracks total:  12
01  Маша и Медведи  Мил-Мила
02  Маша и Медведи  Любочка
03  empty           empty
04  Маша и Медведи  День-Ночь
05  Маша и Медведи  Б.Т.
06  Маша и Медведи  Солнцеклёш
07  Маша и Медведи  Земно-Неземная
08  empty           empty
09  Маша и Медведи  Дворник
10  Маша и Медведи  Нелюбимый
11  Маша и Медведи  Московская
12  Маша и Медведи  Рейкьявик
sadmin@stretch:~/cdda/mp3$ 

tags2cue позволяет получить начальный cue файл двух видов:

  • альбом одного исполнителя - задан по умолчанию;
  • сборник, альбом содержит разных исполнителей - задаётся ключом -a various.

Важное замечание: cue файл полученный при помощи программы tags2cue допускается использовать только с программами из набора cuetoolkit, для использования со сторонним программным обеспечением этот файл не годится.

9. Условия использования и распространения

Cuetookit - свободная программа с открытым исходным кодом, распространяется на условиях лицензии GPL любой версии без предоставления каких-либо гарантий.

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

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