Инструменты Linux для кодирования аудио без потерь

debianeach

Опубликован:  2019-03-28T12:55:44.632267Z

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

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

Наиболее широкое распространение получили три формата: FLAC, WavPack и Monkey's Audio, по-крайней мере коллекция файлов этих трёх форматов на различных торрент-трекерах сети Интернет может считаться самой обширной.

Для кодирования и декодирования файлов формата FLAC в репозитории Debian buster имеется одноимённый пакет, который можно установить при помощи apt.

sudo apt install flac

В составе пакета есть две консольные утилиты:

  • flac - энкодер и декодер;
  • metaflac - утилита для просмотра и редактирования метаданных.

Утилита flac даёт возможность кодировать аудио-данные в формат FLAC и декодировать файлы этого формата. Файлы FLAC принято именовать с расширением .flac, чтобы получить такой файл, понадобится исходный файл, на входе flac принимает различные форматы, и в том числе файлы WAV или сырой PCM-поток. Для примера у меня есть WAV-файл, который послужил исходником в предыдущих выпусках блога, где мы говорили о lossy-кодеках, этот файл имеет следующие параметры:

06v612stSE.png

На снимке экрана выше показан выхлоп mediainfo для моего исходного файла, который представляет из себя CDDA-рип - наиболее часто встречаемая и удобная форма распространения музыки в сети Интернет на сегодня.

Кодирую этот файл в формат FLAC с максимально возможной степенью сжатия.

flac -8 05.wav

wShoI0YGMI.png

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

IMhIX1IYYk.png

Как видно, FLAC обеспечивает экономию дискового пространства в размере примерно одной трети от размера исходного файла, не очень много. Файл FLAC можно легко декодировать, для этого нужно указать опцию -d и имена входящего и исходящего файлов.

flac -d 05.flac -o 05-from-flac.wav

EZGxSwOUXL.png

На полученные файлы мы ещё взглянем чуть позже, а пока перейдём к другому популярному формату - WavPack. В Debian buster есть одноимённый пакет, который и предоставляет энкодер и декодер для файлов этого формата.

sudo apt install wavpack

Пакет содержит следующие консольные утилиты:

  • wavpack - энкодер;
  • wvunpack - декодер;
  • wvtag - утилита для работы с метаданными;
  • wvgain - утилита для добавления ReplayGain в файлы этого формата.

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

wavpack -h 05.wav

7IRNZiISGd.png

В итоге в моём каталоге появился ещё один файл.

g8nYjAXeKt.png

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

wvunpack 05.wv -o 05-from-wavpack.wav

NUGXeYfCDb.png

Потребовалось указать только имена входящего и исходящего файлов.

Следующий популярный формат - Monkey's Audio, для этого формата в официальном репозитории Debian buster нет энкодера, а декодер имеется только в пакете ffmpeg. Но неофициальный репозиторий Deb-Multimedia содержит пакеты для работы с Monkey's Audio в двух вариантах - старая версия кодека и текущая версия кодека. Для этой демонстрации я буду использовать текущую версию кодека, которую можно установить при помощи apt, если Deb-Multimedia подключен, по ссылке можно найти инструкцию для подключения.

sudo apt install monkeys-audio

Файлы формата Monkey's Audio обычно имеют расширение .ape, чтобы получить такой файл, нужно указать энкодеру исходный файл WAV, имя нового файла и степень сжатия. Поскольку от степени сжатия в данном случае зависит не только размер полученного файла, но ещё и скорость кодирования и декодирования, с этим параметром стоит обращаться вежливо и аккуратно, я буду кодировать свой файл со степенью сжатия -c4000.

mac 05.wav 05.ape -c4000

fH7RNT3rIP.png

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

F6mimmxi5K.png

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

mac 05.ape 05-from-ape.wav -d

TlejJYpKJ1.png

Таким образом в моём текущем каталоге появилось несколько новых файлов формата WAV, которые получены путём кодирования и декодирования различных форматов. Объединяет все эти файлы одно - все они содержат один и тот же PCM-поток, и доказать это можно, посчитав хеш этого потока для каждого файла. Сделать это мне поможет shntool, в составе которого имеется соответствующий режим. Напоминаю, что shntool есть в официальном репозитории Debian и его можно установить при помощи apt.

sudo apt install shntool

Считаем хеш для всех WAV-файлов в текущем каталоге.

shnhash *.wav

sFgIdQOftQ.png

Хеши всех файлов абсолютно совпадают, то есть мы имеем дело с одним и тем же PCM-потоком.

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

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

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