Спор «FLAC или MP3» обычно идёт на словах: один слышит «воздух», другой не слышит ничего. Я взял один трек, сжал его шестью способами и измерил, что изменилось в файле.

MP3 128 кбит/с обрезал всё выше 16,5 кГц, MP3 320 дошёл до 20,1 кГц. После десяти пересохранений MP3 128 потерял больше 10 дБ. FLAC после повторного сжатия совпал с оригиналом до бита. Под катом пять замеров с графиками, расчёт для слепого теста и таблица, какой формат для чего брать.

Что сравниваю

Трек: COOL&CREATE, «Help me, ERINNNNNN!!», издание 2024 года. Это аранжировка музыки из Touhou: быстрая электроника с вокалом, плотная и громкая. Длина 5 минут 16 секунд, 44,1 кГц, 16 бит, стерео. Это параметры обычного компакт-диска.

Кодировщик MP3: LAME 3.100, настройки по умолчанию.

ffmpeg -i track.flac -c:a pcm_s16le orig.wav      # несжатый звук
lame -b 128 orig.wav cbr128.mp3                   # постоянные 128 кбит/с
lame -b 320 orig.wav cbr320.mp3                   # постоянные 320 кбит/с
lame -V2 orig.wav v2.mp3                          # переменный битрейт
lame -V0 orig.wav v0.mp3                          # переменный, выше качество

-V0 и -V2 задают качество, а битрейт кодировщик подбирает сам для каждого отрезка. Вики Hydrogenaudio даёт для них средние 245 и 190 кбит/с. На моём треке вышло 261 и 184.

Замер 1. Размер

Размер одного трека в разных форматах
Размер одного трека в разных форматах

Формат

Размер

Средний битрейт

Доля от WAV

WAV

55,7 МБ

1411 кбит/с

100%

FLAC

43,0 МБ

1090 кбит/с

77%

MP3 320

12,6 МБ

320 кбит/с

23%

MP3 V0

10,3 МБ

261 кбит/с

19%

MP3 V2

7,3 МБ

184 кбит/с

13%

MP3 128

5,1 МБ

128 кбит/с

9%

FLAC сжал трек на четверть, MP3 320 в четыре с лишним раза. На тысячу таких треков FLAC займёт около 43 ГБ, MP3 320 около 13 ГБ, MP3 128 около 5 ГБ. Степень сжатия FLAC зависит от музыки. Здесь плотная громкая электроника, и она сжалась слабо: тихая акустика обычно сжимается сильнее.

FLAC при этом ничего не теряет. Я проверил это контрольной суммой распакованного звука:

ffmpeg -i track.flac -f s16le - | md5sum      # 511b1390...
ffmpeg -i orig.wav   -f s16le - | md5sum      # 511b1390...
ffmpeg -i again.flac -f s16le - | md5sum      # 511b1390...

Третья строка: WAV, заново сжатый во FLAC. Все три суммы совпали, то есть звук совпадает до бита. FLAC работает как архиватор: предсказывает следующий отсчёт по предыдущим и хранит только ошибку предсказания.

Замер 2. Где обрывается верх

MP3 устроен иначе. Он делит звук на кадры по 1152 отсчёта, переводит каждый в спектр и решает, какие частоты записать точно, какие грубо, а какие выбросить. Первым под нож идёт самый верх спектра. На спектрограмме это видно как чёрная полоса сверху: слева оригинал, дальше MP3 320 и MP3 128.

Спектрограммы одного отрывка: FLAC, MP3 320 и MP3 128
Спектрограммы одного отрывка: FLAC, MP3 320 и MP3 128

То же самое одним графиком, усреднённо по всему треку:

Усреднённый спектр файлов от 10 до 22 кГц
Усреднённый спектр файлов от 10 до 22 кГц

Чёрная линия FLAC доходит до 22 кГц, это предел для частоты дискретизации 44,1 кГц. Остальные линии в какой-то момент падают вниз:

Формат

Спектр обрывается на

MP3 64

10,9 кГц

MP3 128

16,5 кГц

MP3 V2 и MP3 192

18,7 кГц

MP3 320

20,1 кГц

MP3 V0

обрыва нет, линия идёт рядом с FLAC

Линия MP3 V0 идёт вплотную к FLAC, потому что на этой настройке LAME фильтр верхних частот выключает. Кодировщик сам об этом пишет, если запустить его с ключом --verbose:

-V0     polyphase lowpass filter disabled
-b 320  Using polyphase lowpass filter, transition band: 20094 Hz - 20627 Hz
-V2     Using polyphase lowpass filter, transition band: 18671 Hz - 19205 Hz
-b 128  Using polyphase lowpass filter, transition band: 16538 Hz - 17071 Hz

Из этого не следует, что V0 равен FLAC. График показывает, сколько энергии в среднем на каждой частоте. Насколько точно эти частоты записаны, по нему не видно. V0 оставляет верх спектра на месте и кодирует его грубо. Точность показывает следующий замер, и там V0 уступает MP3 320.

Слышен ли обрыв, зависит от слуха и от музыки. Верхняя граница слуха с возрастом опускается, и от 17 до 20 кГц в музыке мало энергии: на графике этот участок примерно на 50 дБ ниже пика спектра. Свою границу легко узнать: включите генератор тона и ведите частоту вверх, пока звук не пропадёт.

MP3 64 устроен ещё жёстче: LAME на этом битрейте сам понижает частоту дискретизации до 24 кГц, выше 12 кГц в таком файле звука нет совсем. Горб на 13 кГц, скорее всего, след обратного пересчёта в 44,1 кГц для графика: он зеркален спаду у 11 кГц относительно 12 кГц.

Замер 3. Разница с оригиналом

Обрыв верха показывает только часть потерь. Чтобы увидеть всё, я распаковал MP3 обратно в отсчёты и вычел их из оригинала. Осталось то, чем файлы отличаются.

Спектрограмма разницы между FLAC и MP3
Спектрограмма разницы между FLAC и MP3

Слева разница для MP3 320, справа для MP3 128, отрывок тот же, что на спектрограмме выше. Яркость показывает громкость. У MP3 128 разница идёт по всему спектру, а сильнее всего она ниже 5 кГц, где звучит сама музыка.

В цифрах: насколько разница тише самого трека.

Формат

Разница тише трека на

MP3 128

16,7 дБ

MP3 V2

20,2 дБ

MP3 V0

25,9 дБ

MP3 320

30,2 дБ

30,2 дБ мало. Шум на таком уровне, включённый отдельно, слышит любой. В MP3 его обычно не слышно, потому что кодировщик прячет ошибку рядом с громкими звуками. Ухо плохо различает тихий звук, если на близкой частоте в тот же момент звучит громкий. Это свойство называется маскировкой, и на нём построен весь формат: модель слуха в кодировщике считает, сколько ошибки поместится под каждым громким звуком, и тратит биты там, где спрятать её негде.

Поэтому число из таблицы нельзя читать как «слышимость». Оно говорит, сколько звука изменилось, и молчит о том, заметит ли это человек.

Замер 4. Повторное сжатие

Маскировка рассчитана на один проход. Если распаковать MP3 и сжать снова, кодировщик заново решает, что выбросить, и ошибки складываются. Я прогнал трек через LAME десять раз подряд.

Отличие от оригинала после каждого перекодирования
Отличие от оригинала после каждого перекодирования

Сколько раз сжали

MP3 320

MP3 128

1

30,2 дБ

16,7 дБ

5

25,8 дБ

9,9 дБ

10

23,9 дБ

6,4 дБ

MP3 320 за десять проходов потерял 6,3 дБ, MP3 128 потерял 10,3 дБ. В жизни это выглядит так: трек скачали в MP3, обрезали в редакторе и сохранили, залили на сервис, сервис сжал его ещё раз. С FLAC такого не случается: его можно распаковывать и сжимать сколько угодно, сумма из первого замера останется той же.

Отсюда главный довод за FLAC. Он нужен как исходник, из которого в любой момент получается MP3, Opus или формат, которого пока нет. Обратного пути у сжатого файла нет.

Замер 5. FLAC, в котором нет верха

Расширение .flac говорит только о том, что файл сжат без потерь. Что лежало на входе кодировщика, оно не говорит. Мне попался такой файл на Wikimedia Commons, когда я искал трек для статьи:

Спектры двух файлов FLAC
Спектры двух файлов FLAC

У обоих файлов одинаковые параметры: 44,1 кГц, 16 бит. У «Help me, ERINNNNNN!!» спектр доходит до 22 кГц. У второго файла он обрывается на 15,3 кГц ступенькой, как у MP3 на графике из второго замера.

По самому файлу не узнать, откуда обрыв. Так выглядит MP3, пересохранённый во FLAC, и так же может выглядеть запись, которую отфильтровали при сведении. Но если вы платите за FLAC или качаете его ради качества, спектр стоит проверить. Спектрограмму показывают Audacity и Spek, а одной командой её строит ffmpeg:

ffmpeg -i track.flac -lavfi showspectrumpic=s=1200x600 spectrum.png

Перекодировать MP3 во FLAC бессмысленно: файл вырастет в несколько раз, а выброшенное не вернётся.

Слышно ли это

Замеры показывают, что файлы разные. Слышит ли это человек, проверяют только слепым тестом: слушатель не знает, какой файл играет, и выбирает на слух.

В 2009 году на конвенции Audio Engineering Society показали такую работу: Pras, Zimmerman, Levitin и Guastavino, «Subjective Evaluation of MP3 Compression for Different Musical Genres». Тринадцать подготовленных слушателей, музыканты и звукорежиссёры, сравнивали CD-качество с MP3 от 96 до 320 кбит/с. По аннотации работы, они значимо предпочитали CD файлам MP3 с битрейтом до 192 кбит/с. Про 256 и 320 кбит/с такого вывода в аннотации нет.

Вики Hydrogenaudio пишет то же другими словами: в слепых тестах LAME обычно становится неотличим от оригинала на битрейтах заметно ниже максимального.

Чужие уши ничего не говорят о ваших, поэтому проще проверить самому. Нужна программа, которая играет два файла под нейтральными названиями и переключает их без паузы: плагин ABX для foobar2000 на компьютере или сравнение версий трека в Nami на телефоне. Сколько верных ответов нужно, чтобы результат не был везением, считается по формуле для подбрасывания монеты:

Попыток

Верных ответов

Шанс угадать столько случайно

10

8 и больше

5,5%

10

9 и больше

1,1%

16

12 и больше

3,8%

16

13 и больше

1,1%

Восемь из десяти ещё похоже на удачу. Девять из десяти или тринадцать из шестнадцати уже говорят, что разницу вы слышите.

Два условия, без которых тест ничего не покажет:

  • Громкость файлов должна совпадать. Более громкий вариант обычно кажется лучше.

  • Наушники должны быть проводными. Bluetooth сам сжимает звук с потерями: SBC, AAC, aptX и LDAC все относятся к таким кодекам. FLAC по дороге к беспроводным наушникам перекодируется так же, как MP3.

Что из этого следует

Задача

Формат

Почему

Домашняя библиотека, архив

FLAC

Исходник без потерь: из него получается любой формат, повторное сжатие ему не вредит

Телефон с небольшой памятью

MP3 V0 или 320

В 3 или 4 раза меньше FLAC. В работе 2009 года слушатели предпочитали CD только файлам до 192 кбит/с

Мобильный интернет

от 128 до 192 кбит/с

Экономит трафик, потери уже можно услышать

Трек, который будут резать и пересохранять

FLAC

У MP3 128 десять пересохранений съели больше 10 дБ

В Nami это устроено так: сервер хранит файлы в исходном формате, а в экономном качестве сжимает их на лету в Opus 128 кбит/с и отдаёт телефону.

Ограничения замеров

  • Трек один, и скачать его бесплатно нельзя: это файл из моей коллекции. Скрипт работает на любом вашем файле. На другой музыке цифры сдвинутся: кастаньеты и клавесин для MP3 труднее, чем плотный рок.

  • Кодировщик один, LAME 3.100. Старые кодировщики на том же битрейте работают хуже.

  • Разница в децибелах не равна слышимости, об этом сказано в третьем замере. На слух её проверяет только слепой тест.

  • Opus и AAC я не сравнивал. Они новее и на низких битрейтах сжимают лучше MP3. Fraunhofer закрыл программу лицензирования MP3 23 апреля 2017 года и сам назвал AAC более эффективным кодеком.

  • FLAC 24 бита и 96 кГц я тоже не трогал: это отдельный спор.

Попробовать

Nami бесплатный, без рекламы и аккаунтов. Про проект целиком я рассказывал в первой статье.

Комментарии (7)


  1. David_Osipov
    10.10.2026 10:09

    Рекомендую вместо старого mp3 добрый Opus - классная вещь.


    1. AstolfoOwO Автор
      10.10.2026 10:09

      Ну в потоковом прослушивании все равно приходится использовать mp3 при плохом соединении, а так я использую opus как базу для среднего интернета если оригинал в flac)


  1. AliceKwangweith
    10.10.2026 10:09

    Как ни странно но по ощущениям в MP3 стереобаза более сплюснутая, звук более плоский что ли, разница конечно не супер-громадная, у кого есть хороший ЦАП+усилитель не за 100$ мне кажется разницу в любом случае услышат. Возможно это и есть эти самые шумы. Давно перешел на FLAC и ни капли не жалею, скачку делаю в TIDAL


    1. AstolfoOwO Автор
      10.10.2026 10:09

      Весьма громадная в определенных жанрах, но по поводу ЦАПа не знаю, я им толком то не пользовался, ибо у самого звуковая карта (не смотря что они выполняют почти одну и ту же функцию, результат все равно разный)


  1. MountainGoat
    10.10.2026 10:09

    Все эти тесты всегда предлагают определить, есть ли разница в звуке. При этом даже не ставится вопрос, а звучит ли хуже. Если ставить вопрос так, то окажется, что 64кб/с хватит всем.

    С именно MP3 есть нюанс: стандарт допускает широкое поле для вариаций, и есть кодеки, отличные от lame, которые могут, например, обрезать всё что выше 16Кгц независимо от битрейта. И их можно было найти в платных программах за дохренище денег. Или в устройствах. Кто такими пользовался, тот уверенно слышал, как убог MP3 320k.

    Кстати, то, что MP3 320k стал стандартом на трекерах, очень плохо. Ни на флот, ни на корнеплод. Весит дофига, а если пересжимать, то могут вылезти, а могут и не вылезти, непонятные шумы.


    1. AstolfoOwO Автор
      10.10.2026 10:09

      Думаю, вопрос «хуже или нет» не ставят потому, что ответ зависит от жанра. Плотный рок или электроника прячут потери под громким звуком, кастаньетам и клавесину сжатие даётся труднее. «Есть ли разница» проверить проще: ответ либо верный, либо нет.

      На 64 кбит/с LAME на моём треке понизил частоту дискретизации до 24 кГц и срезал всё выше 10,9 кГц. Хватит ли этого, тоже зависит от музыки.)


      1. MountainGoat
        10.10.2026 10:09

        Ну 64 конечно, для красного словца. Я свою хранилку набиваю Opus 168 кб/с. Качаю флаки, если получается, и конверчу. Под флаки места мало.