О Lossy

2018-03-03

Все мы любим хорошую музыку. Ещё совсем недавно хорошей цифровой музыкой был Audio CD. Это 44100 Гц, стерео, 16 бит (линейных) на канал, никак не пожатое, а значит, если верить Википедии, 1411.2 кбит/с.

Но в конце XX века, в эпоху зарождения мультимедиа, когда музыку стали играть не только на проигрывателях, но и на компьютерах, оказалось, что Audio CD (то есть голый PCM) всё же лучше сжимать. Был, например, Microsoft ADPCM, который это дело немного сжимал, без потери качества, в файлы WAV. Но, как правило, исходные 44 кГц стерео таким образом всё равно требовали много места. Поэтому качество понижали до 22 кГц моно. Один из первых мультимедиа альбомов того времени: «Погружение» группы «Наутилус Помпилиус» — до сих пор где-то у меня валяется, так и делал.

Тогда победил MP3. Для хранения и распространения сжатой музыки. На 128 кбит/с «обеспечивающий CD качество».

MP3 возник странно. Технически это MPEG-1 Audio Layer 3. Слой для сжатия аудиоданных в крутом и прогрессивном тогда модном стандарте для запихивания видеоданных на Video CD. Только упакованный в свой собственный формат файла .mp3. Video CD теперь никому не интересен. Следующий стандарт MPEG-2 используется на DVD и в цифровом (не HD) ТВ вещании. А ещё следующий стандарт MPEG-4 используется сейчас для HD видео и продолжает развиваться.

MP3 был революционен. Это был (почти) первый формат сжатия с потерями. Когда мы не пытаемся сохранить всё, что было в исходном сигнале, а, на основе некоей психоакустической модели, выпиливаем то, что человек всё равно не услышит, а оставшееся сжимаем. Как JPEG.

Тогда я пробовал оцифровывать накопленную аудиоколлекцию. Компакт-кассеты (просто «кассеты», но правильнее «компакт-кассеты») оказались полным дерьмом. Частотный диапазон там такой, что дискретизировать с более чем 22 кГц смысла не было. Катушечных магнитофонов в доме не водилось. А вот виниловые пластинки потрясли качеством звука. На хорошем оборудовании можно вытянуть качество получше, чем CD. Только от щелчков нужно избавляться.

И тогда же я понял, что MP3 — тоже дерьмо. На этих самых 128 кбит/с качество звука сильно страдает. И что самое жуткое — появляются мерзкие металлические призвуки там, где их быть не должно. Моим ушам нужно хотя бы 192 кбит/с, а лучше больше.

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

Оригинал в CD качестве, поэтому, как и положено, присутствуют частоты до 22 кГц.

Original Flac

Будем жать с помощью FFmpeg, а точнее с помощью LAME.

На 320 кбит/с и на 256 кбит/с спектрограмма выглядит почти как у оригинала.

На 192 кбит/с видны признаки подрезания частот на 16 кГц. Спектрограмма «темнеет», видимо, пcихоакустическая модель что-то повырезала. На слух самые высокочастотные «всплески» действительно пропали.

MP3 192 kbps

На пресловутых 128 кбит/с всё уже конкретно подрезано на 16 кГц. Фоновые звуки «замазаны» и начинают «подбулькивать». Уже ничего общего с оригиналом в плане наслаждения музыкальными деталями.

MP3 128 kbps

Но в MP3 можно сделать и 64 кбит/с. Пропало стерео. Всё жутко булькает и раздражает совершенно посторонними призвуками.

MP3 64 kbps

И даже 32 кбит/с. Ой, ну даже Рабинович лучше напоёт. Не слушайте этот ужас.

MP3 32 kbps

Ну вы поняли, да? От исходного звука остались только дырки. Не делайте так. И вообще не используйте MP3.

Потому что есть Ogg Vorbis. Или просто Vorbis. Он появился в 2002. Именно как специальный независимый свободный формат для сжатия аудиоданных с потерями. И в нём всё гораздо лучше.

Вот вам Vorbis на 128 кбит/с. Никаких обрезаний частот нет. Всё звучит прекрасно. Разве что самые «верхи» чуток смазаны.

Vorbis 128 kbps

Можно и 64 кбит/с. Здесь частоты подрезаны на уровне 16 кГц. Звучит глуше, но вполне терпимо. Лишних призвуков не появляется.

Vorbis 64 kbps

Теоретически, можно урезать битрейт ещё меньше, но ffmpeg так не умеет.

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

Но те же самые ребята, из Xiph.Org, в 2012 придумали Opus. Это ещё более крутой кодек, подходящий не только для музыки в качестве Audio CD, но и для сжатия речи, например, в телефонии. Он, соответственно, умеет и совершенно низкие битрейты.

Opus на 128 кбит/с начинает немного подрезать частоты, где-то на 20 кГц. Это едва заметно.

Opus 128 kbps

На 64 кбит/с видно, что работает переменный битрейт (VBR). Opus пытается сохранить частоты, но в половине случаев обрезает ниже 16 кГц. Звучит лучше, чем Vorbis на том же битрейте.

Opus 64 kbps

На 32 кбит/с Opus пытается держаться, но видно, что высокие частоты редеют. Звучит сильно хуже, глухо и «пережато». Но исходная композиция вполне узнаваема, не тошнит, как от MP3 на 32 кбит/с.

Opus 32 kbps

Opus на 16 кбит/с. Через две подушки :) Но высокие частоты иногда проскакивают.

Opus 16 kbps

Opus на 8 кбит/с. Всё, всё потерялось. Остались только слова, хрипы и ритм.

Opus 8 kbps

Opus на 4 кбит/с. Похоже, Opus сфокусировался на голосе. На фоне общего безобразия человеческий голос остаётся различим.

Opus 4 kbps

Тут Opus, конечно, сдался, и переключился в «телефонный» режим. Но слова слышно. Пусть и плохо :)

Opus — хорош. Очень хорош. Правда, он не рекомендует частоту дискретизации 44100 Гц. И через ffmpeg получилась передискретизация в 48000 Гц. С другой стороны, вроде как оборудование сейчас работает как раз на 48 кГц. И ещё непонятно, кто лучше сделает ресэмплинг: кодек или Pulse Audio.

Вот больше красивых картинок:

UPD1
Из документации FFmpeg:

Based on quality produced from high to low:
libopus > libvorbis >= libfdk_aac > aac > libmp3lame >= eac3/ac3 > libtwolame > vorbis > mp2 > wmav2/wmav1

(libvorbis — это внешняя для ffmpeg библиотека, а vorbis — это встроенная кривая реализация)

UPD2
Да, похоже, для хранения музыки я останусь на Vorbis -q5.

-q5 — это VBR со "средним" качеством кодирования, что примерно соответствует 160 кбит/с. Этого вполне достаточно для моих ушей. По умолчанию, кстати, предлагается -q3.

Opus не хочет сохранять оригинальные 44 кГц дискретизации, меня это настораживает. К тому же он более молодой, внезапно может возникнуть проблема с поддержкой кодека в плеере. Хотя и Хром, и Андроид, и DeadBeef уже вполне умеют. А Flac сильно большой получается, чтобы гонять музыку через мобильный интернет.

UPD3
Ух, какая жопа творится при передаче звука через Bluetooth: http://stereo.ru/to/7p99w-bluetooth-audio-harakteristiki-besprovodnogo-zvuka Может, завезут туда Opus когда-нибудь?