Преобразуем Monkey's Audio в формат FLAC на базе Debian

prolinux

Опубликован:  2023-09-04T04:14:00.687147Z
Отредактирован:  2023-09-04T04:14:00.687147Z
Статус:  публичный
39
0
0

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

О Monkey's Audio

Monkey's Audio - формат для упаковки и хранения оцифрованных аудио данных без потерь. Кодек для этого формата был разработан на другой операционной системе, не Linux. При этом реализация кодека совместимая с операционными системами на базе ядра Linux есть и доступна у многих современных вендоров. Увы, в официальное хранилище Debian пакет с этим кодеком не попал, но при желании его можно установить из deb-multimedia.

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

lkaSP5X8NG.png

Как видно на снимке экрана, мы имеем два файла с одинаковым именем и разными расширениями. И сейчас я покажу, как на базе операционной системы Debian можно преобразовать этот рип в формат FLAC.

Необходимое для этой демонстрации ПО

Для этой демонстрации мне понадобятся следующие пакеты:

  • ffmpeg;

  • flac;

  • shntool.

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

$ sudo apt install -y ffmpeg flac shntool

Чтобы повторить все описанные далее действия, эту команду нужно выполнить перед тем как...

Преобразуем Monkey's Audio в FLAC

Чтобы преобразовать Monkey's Audio в любой другой формат, совершенно не обязательно иметь в системе нативный для этого формата кодек. Декодер Monkey's Audio встроен в ffmpeg, и воспользоваться им совершенно не сложно. Вот как будет выглядеть команда:

$ ffmpeg -i sample.ape -v quiet -stats -codec:a pcm_s16le -f wav - | flac -8 --totally-silent -o sample.flac -

Команда получилась достаточно длинная, она содержит программный канал, и при исполнении этой команды два процесса связанные друг с другом выполняются одновременно. В команде я указал входящий файл - sample.ape, и исходящий файл - sample.flac. Жму enter и смотрю в окно терминала.

c3XmnaPuT7.png

Процесс пошёл. Следует дождаться полного завершения этого процесса.

Проверяем данные

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

И Monkey's Audio, и FLAC являются форматами архивными. В обоих файлах, исходном sample.ape и полученном sample.flac должен храниться один и тот же PCM поток. Убедиться в этом очень просто, достаточно посчитать контрольные суммы потоков в обоих файлах. Сделать это можно с помощью такой команды:

$ shnhash sample.ape sample.flac

Жму enter.

Ekp2tD0KjC.png

Программа приступила к распаковке PCM потока и подсчёту контрольной суммы, процесс этот медленный, особенно в случае с Monkey's Audio. Дожидаюсь полного его завершения.

JteqlK215J.png

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

Метаданные

У исходного рипа есть в наличии файл с cuesheet - sample.cue, в нём хранятся метаданные рипа и потрековая разметка CDDA. В подавляющем большинстве случаев такие рипы получены с помощью программы EAC на коммерческой операционной системе, и поэтому файл cuesheet имеет соответствующую кодировку, что не очень удобно для пользователей Linux. Рипы хранятся обычно достаточно долго, хорошо, когда FLAC файл имеет адекватные cuesheet рипа метаданные. Запаковать cuesheet внутрь FLAC можно с помощью программы flacpack. У текущего рипа есть обложка, её тоже упакуем внутрь FLAC.

$ flacpack -p folder.jpg sample.flac

2gek87FQG7.png

Проверить полученный файл FLAC очень просто с помощью qmmp.

$ qmmp sample.flac &

M02YhWlQIO.png

Жму enter и наблюдаю следующую картину.

A2LtDPGHje.png

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

gzb7AjR517.png

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

Выводы

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

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