Делим FLAC на треки в Linux с помощью ffcuesplit
Jazz
Поделить цельный CDDA-рип на отдельные треки под управлением операционной системы с Linux можно несколькими различными способами. В этом обзоре я покажу элементарные приёмы работы с утилитой командной строки ffcuesplit, она без труда справляется с задачей, при этом полученные в результате её работы треки будут иметь уже заполненные в соответствии с cuesheet рипа метаданные, и им можно уже в процессе деления дать соответствующие cuesheet рипа имена.
О программе
ffcuesplit — утилита командной строки для деления цельных CDDA-рипов на треки, при этом с помощью этой программы можно получать треки различных форматов: mp3, ogg, opus, m4a, flac. Метаданные треков ffcuesplit заполняет автоматически в процессе деления, получая при этом данные из файла .cue
.
ffcuesplit разработана мной с помощью современного языка программирования Python, распространяется свободно в исходных кодах и может быть использована всеми желающими в соответствии с условиями GNU GPLv3. Скачать исходный код программы можно в моём профиле на github.com по этой короткой ссылке.
Принцип работы ffcuesplit достаточно прост. Программа читает и анализирует хранящиеся в cuesheet рипа данные, отбирает для каждого определённого в файле .cue
трека метаданные и индексы разметки, а затем в соответствии с полученными данными формирует для каждого трека две команды. Первая команда использует программу ffmpeg и её встроенные декодеры, с помощью соответствующего формату медиа файла рипа декодирует хранящийся в нём PCM-поток и отдаёт его на свой stdout. Вторая команда использует указанный пользователем энкодер и, получая PCM-поток на своём stdin, сжимает его в соответствующий указанному энкодеру формат. Обе команды в рамках ffcuesplit исполняются с помощью subpocess — модуля стандартной библиотеки Python, и связаны в процессе исполнения программным каналом. Единственное условие для правильной работы ffcuesplit — в операционной системе должны быть установлены ffmpeg и энкодер, с помощью которого пользователь намерен сжимать исходный PCM-поток.
Установка ffcuesplit
Поскольку работа программы основана на декодерах ffmpeg и свободных энкодерах популярных ныне audio форматов, всё это великолепие перед использованием ffcuesplit необходимо установить в операционную систему. Список зависимостей следующий:
-
ffmpeg;
-
lame;
-
vorbis-tools;
-
opus-tools;
-
faac;
-
python3-chardet.
В рамках этого обзора я буду использовать ffcuesplit под управлением операционной системы Debian sid, в ней все зависимости можно установить вот такой простой командой:
$ sudo apt install ffmpeg lame vorbis-tools opus-tools faac python3-chardet
Для установки ffcuesplit мне потребуется только терминал и соединение с сетью Интернет, поскольку исходный код программы хранится на github.com
. Устанавливать ffcuesplit можно в любой каталог файловой системы, в том числе в домашний каталог текущего пользователя. Но обычно сторонние программы принято устанавливать в системный каталог /opt
, поэтому в терминале вхожу в этот системный каталог.
$ cd /opt
Так как код ffcuesplit хранится только на github.com
, перед установкой программы стоит поставить в операционную систему ещё и Git.
$ sudo apt install git
Работа в системном каталоге /opt
требует прав суперпользователя. Скопировать исходный код ffcuesplit из Git можно следующей командой.
$ sudo git clone https://github.com/jazz4web/ffcuesplit.git
Как видно на снимке экрана, в результате исполненной команды в системном каталоге /opt
появился вложенный каталог с именем ffcuesplit. Чтобы запуск программы был удобным и лаконичным, достаточно положить символическую ссылку на исполняемый модуль ffcuesplit в системный каталог /usr/local/bin
.
$ sudo ln -s -T /opt/ffcuesplit/ffcuesplit.py /usr/local/bin/ffcuesplit
И всё... Программа готова к использованию.
Как видно на снимке экрана выше, программа имеет встроенную справку и, как и любая другая утилита командной строки, управляется ключами, которые могут принимать те или иные значения.
Делим цельный CDDA-рип на треки
В моём распоряжении есть цельный CDDA-рип в формате FLAC — в самом общем случае это два файла с совпадающими до знака именами, различающимися только расширением (.cue
и .flac
). Чтобы поделить этот образ на треки, достаточно указать программе имя любого из этих двух файлов следующей простой командой.
$ ffcuesplit image.cue
Или...
$ ffcuesplit image.flac
Как видно на снимке экрана выше, по мере продвижения прогресса кодирования в текущем рабочем каталоге будут появляться файлы треков. Если треки рассмотреть более пристально, можно увидеть, что каждый трек уже содержит заполненные в соответствии с содержимым файла .cue
метаданные.
Управление зазорами
Как известно, cuesheet цельного CDDA-рипа имеет в своём содержимом не только метаданные образа, но ещё и индексную разметку треков. Индексная разметка предполагает специальные поля с именами INDEX 00
и INDEX 01
, при этом INDEX 01
является обязательным для всех треков образа. Оба индекса содержат в себе обычную строку вида min:sec:frame
, выражающую соответствующий таймкод. Расстояние между этими таймкодами определяют длительность зазоров между треками и длительность каждого трека.
Считается, что если один или более треков в cuesheet образа имеют оба индекса, то в образе определены зазоры, которые можно, в случае необходимости, обрезать. ffcuesplit управляет зазорами при помощи ключа -g
. Этот ключ может принимать значения append
, prepend
и split
. Если в команде ключ -g
не задан, он принимает значение по-умолчанию — split
. Таким образом, используя ключ -g
можно управлять распределением зазоров.
Зазоры можно распределить в конец трека:
$ ffcuesplit -g append image.cue
Зазоры можно распределить в начало трека:
$ ffcuesplit -g prepend image.cue
Зазоры можно обрезать:
$ ffcuesplit image.cue
Именование файлов треков
Созданные файлы треков имеют соответствующие номеру трека имена. ffcuesplit умеет именовать треки по схеме num - artist - title
, за эту функцию отвечает ключ -r
.
$ ffcuesplit -r image.flac
А что, кроме FLAC?
ffcuesplit умеет делить цельные CDDA-рипы в форматах FLAC, WavPack и Monkey's Audio, при этом образы первых двух форматов программа делит корректно, придерживаясь сэмплов исходного PCM-потока. Образы Monkey's Audio по сэмплам делить не получается по причине некорректной работы алгоритмов ffmpeg с его декодером.
ffcuesplit умеет получать файлы треков в форматах mp3, opus, ogg и m4a. О некоторых мелких деталях в работе программы с этими энкодерами я расскажу дополнительно в отдельном для каждого формата обзоре.