Делим FLAC на треки в Linux с помощью ffcuesplit

prolinux

Опубликован:  2023-08-18T05:51:45.776008Z
Отредактирован:  2023-08-18T05:51:45.776008Z
Статус:  публичный
34
0
0

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

О задаче

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

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

О ffcuesplit

Программа ffcuesplit, её придумал и написал я буквально на днях, специально предназначена для деления цельных CDDA-рипов различных форматов на отдельные треки, при этом можно получить треки одного из четырёх форматов: FLAC, Opus, Vorbis, MP3, право выбора предоставлено пользователю.

ffcuesplit - это свободная реализация, распространяется под лицензией GNU GPLv3 и доступна для использования всеми желающими. Исходный код программы можно найти и загрузить на свой компьютер в моём профиле на github.com. Программа написана на языке программирования Python, разрабатывалась и тестировалась под управлением операционной системы Debian sid.

Как установить ffcuesplit

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

  • python3-chardet;

  • ffmpeg;

  • flac, opus-tools, vorbis-tools, lame.

$ sudo apt install python3-chardet ffmpeg flac opus-tools vorbis-tools lame

Для установки программы необходимо скачать исходный код ffcuesplit, в Debian это можно сделать при помощи wget.

$ wget https://github.com/jazz4web/ffcuesplit/archive/refs/heads/main.zip

yvDuUn0xE4.png

В итоге выполненного действия в домашнем каталоге текущего пользователя системы на моём компьютере появился файл архива с именем main.zip. Распаковываю его в системный каталог /opt.

$ sudo unzip -d /opt/ main.zip

В результате такой распаковки в каталоге /opt появился вложенный каталог с именем ffcuesplit-main, его можно переименовать.

$ sudo mv -v /opt/ffcuesplit-main /opt/ffcuesplit

А теперь я положу символическую ссылку на исполняемый файл программы в один из системных каталогов переменной окружения PATH.

$ sudo ln -s -T /opt/ffcuesplit/ffcuesplit.py /usr/local/bin/ffcuesplit

Всё, программа установлена и готова к использованию.

qg8oPIyXQz.png

Делим исходный CDDA-рип на треки FLAC

В моём распоряжении именно для этой демонстрации есть CDDA-рип, он лежит в домашнем каталоге текущего пользователя, во вложенном каталоге с именем sample, для начала войду в этот каталог в терминале.

$ cd sample/

IF1WrDzZzk.png

Как мы уже знаем, CDDA-рип в самом общем случае обычно представлен парой файлов с одинаковым именем и различными расширениями, в данном случае это sample.cue и sample.flac. И поделить такой рип на треки в формате FLAC с помощью ffcuesplit очень просто.

$ ffcuesplit sample.flac

Su5N1pu81S.png

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

В результате я получаю в текущем каталоге в дополнение к самому рипу ещё и набор треков в формате FLAC.

VtOQt9vh6U.png

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

$ metaflac --list --block-type=VORBIS_COMMENT 01.flac

I8G7WMh0Ef.png

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

Именование файлов

Как видно из предыдущего примера файлы треков в результате деления были поименованы по схеме %num.ext, где num - двузначный номер трека, а ext - расширение файла.

Программа поддерживает ещё одну схему именования файлов треков:

%num - %artist - %title.ext.

Чтобы получить такие имена треков, нужно задать ключ -r при делении рипа.

$ ffcuesplit -r sample.cue

Выбор энкодера

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

$ ffcuesplit -m opus sample.cue

Рип будет поделен на треки в формате Opus.

$ ffcuesplit -m vorbis sample.cue

Рип будет поделен на треки в формате Vorbis.

$ ffcuesplit -m mp3 sample.cue

В этом случае мы получим треки в формате MP3.

Четвёртый формат - FLAC - задан по умолчанию, и в этом случае ключ -m не обязателен.

Опции энкодера

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

$ ffcuesplit -m vorbis -o " -q 3" sample.cue

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

ffcuesplit поддерживает все актуальные опции поддерживаемых энкодеров, при этом по умолчанию для энкодеров заданы следующие ключи:

  • FLAC -8;

  • Opus - умолчания (ничего);

  • Vorbis -q 4;

  • MP3 -V 0 --lowpass -1 --noreplaygain.

Следует иметь ввиду, что ffcuesplit никак не проверяет и не фильтрует заданные пользователем ключи энкодеров, вся ответственность ложится на плечи пользователей.

Контроль зазоров

Как известно, в CDDA-рипе в самом общем случае для каждого трека указываются зазоры, то есть каждый трек в cuesheet имеет два индекса INDEX 00 и INDEX 01.

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

$ ffcuesplit -g append sample.cue

Зазоры можно распределить в начало трека.

$ ffcuesplit -g prepend sample.cue

Обрезку зазоров можно задать явно, что впрочем не обязательно.

$ ffcuesplit -g split sample.cue

Контроль зазоров имеет смысл только в том случае, если в исходном cuesheet есть хотя бы один INDEX 00.

Молчаливый режим

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

$ ffcuesplit -q sample.cue

z3kQDAX5Sj.png

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

Выводы

Как видно из показанных примеров, использовать ffcuesplit не просто, а очень просто.

Программа безукоризненно делит на треки рипы в форматах FLAC и WavPack, с рипами в формате Monkey's Audio происходят странности, некоторые треки получаются порезанными не по секторам, видимо таким образом проявляются особенности декодера, потому что, если исходный файл .ape предварительно перегнать в формат FLAC и далее поделить на треки его по тому же cuesheet, все полученные треки будут порезаны по секторам.

Вопросы автору программы можно задать на электронную почту, адрес указан в исполняемом файле программы. Уважаемый читатель, если вам понравилась и пригодилась программа ffcuesplit, отблагодарить автора можно любой приемлемой для вас денежной суммой на электронный кошелёк, при этом следует помнить, что перевод на 5 рублей лучше, чем никакого перевода... :-) Автор благодарен вам - всем откликнувшимся за добровольное и безвозмездное пожертвование.