Делим FLAC на треки в Linux с помощью ffcuesplit
prolinux
Опубликован: | 2023-08-18T05:51:45.776008Z |
Отредактирован: | 2023-08-18T05:51:45.776008Z |
Статус: | публичный |
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
В итоге выполненного действия в домашнем каталоге текущего пользователя системы на моём компьютере появился файл архива с именем 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
Всё, программа установлена и готова к использованию.
Делим исходный CDDA-рип на треки FLAC
В моём распоряжении именно для этой демонстрации есть CDDA-рип, он лежит в домашнем каталоге текущего пользователя, во вложенном каталоге с именем sample
, для начала войду в этот каталог в терминале.
$ cd sample/
Как мы уже знаем, CDDA-рип в самом общем случае обычно представлен парой файлов с одинаковым именем и различными расширениями, в данном случае это sample.cue
и sample.flac
. И поделить такой рип на треки в формате FLAC с помощью ffcuesplit очень просто.
$ ffcuesplit sample.flac
Процесс пошёл, он может занять некоторый промежуток времени, его длительность зависит от размера рипа и частоты процессора, следует дождаться его завершения.
В результате я получаю в текущем каталоге в дополнение к самому рипу ещё и набор треков в формате FLAC.
При этом каждый трек уже имеет метаданные, полученные из исходного файла sample.cue
, вот как они выглядят на примере первого трека.
$ metaflac --list --block-type=VORBIS_COMMENT 01.flac
Всё, задача решена. Впрочем, следует уделить внимание некоторым тонким деталям работы с 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
Молчаливый режим ffcuesplit предусмотрен на всякий пожарный случай, если команду необходимо использовать в сценариях интерпретатора.
Выводы
Как видно из показанных примеров, использовать ffcuesplit не просто, а очень просто.
Программа безукоризненно делит на треки рипы в форматах FLAC и WavPack, с рипами в формате Monkey's Audio происходят странности, некоторые треки получаются порезанными не по секторам, видимо таким образом проявляются особенности декодера, потому что, если исходный файл .ape
предварительно перегнать в формат FLAC и далее поделить на треки его по тому же cuesheet, все полученные треки будут порезаны по секторам.
Автор программы тоже живой человек, он спит, кушает и имеет привычки, как и все обычные люди этой великолепной земли. Вопросы автору можно задать на электронную почту, адрес указан в исполняемом файле программы. Уважаемый читатель, если вам понравилась и пригодилась программа ffcuesplit, отблагодарить автора можно любой приемлемой для вас денежной суммой на мой электронный кошелёк, при этом следует помнить, что перевод на 5 рублей лучше, чем никакого перевода... :-) Автор благодарен вам - всем откликнувшимся за добровольное и безвозмездное пожертвование.