Громкость на практике: dialnorm, нормализация, аттенюация, replay gain

Автор: Николай СапуновОбновлено: август 202620 мин чтения
Содержание статьи +

Опубликовано: 2026-06-05 · Время чтения: 16 мин · Автор: Николай Сапунов, CEO Фора Софт

Коротко

Целевое значение громкости – это лишь половина истории; вторая половина – механизм, который его достигает, и таких механизмов два совершенно разных семейства. Семейство метаданных – dialnorm в Dolby AC-3/E-AC-3/AC-4, ReplayGain в музыкальных файлах, Apple Sound Check, выходной gain Opus – не трогает байты звука и сообщает плееру, насколько повернуть ручку громкости при декодировании. Семейство обработки – нормализация Spotify в реальном времени, транскодирование под EBU R128, проход FFmpeg loudnorm – реально меняет уровень, который слышит слушатель: либо живым gain, либо пересчётом файла. Понимание того, какой механизм использует адресат, говорит вам, тегировать ли мастер, пересобирать его или просто измерить и отгрузить как есть.

Почему это важно

Любая спецификация доставки звука вручает вам число, а статья о целях по платформам говорит, какие это числа. Здесь – ответ на следующий вопрос, в который упирается каждый операционный лид, продакт-менеджер или контент-инженер: как это число применяется и что конкретно сделать с файлом. Перепутайте два семейства – и совершите дорогую ошибку: пересоберёте файл, которому нужен был лишь тег; раздавите динамику ради «громкости» на платформе, которая всё равно вас прикрутит; отгрузите Dolby-поток с неверным dialnorm, от которого каждая гостиная потянется к пульту. Это практический слой: dialnorm, Replay Gain, Sound Check и тест, который запускают перед отправкой.

Два семейства, одна задача

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

Первый способ – изменить сам звук: обработать сигнал так, чтобы файл после изменения измерялся на цели. Так делает мастеринг-инженер лимитером, так делает транскодирование FFmpeg и так делает стриминговый сервис в реальном времени, проигрывая дорожку тише. Байты, доходящие до слушателя, отличаются от тех, с которых вы начали.

Второй способ – оставить звук в покое и приложить число: маленький фрагмент метаданных, который говорит «этот контент измеряется как X; примените gain Y при воспроизведении». Байты звука нетронуты. Изменение громкости происходит, но в плеере, в цифровой области, прямо перед тем как звук покинет устройство. Это dialnorm, ReplayGain, Apple Sound Check и выходной gain Opus.

Ментальная модель, удерживающая вас от беды: обработка переписывает файл; метаданные переписывают ручку громкости. Измерение громкости – гейтированное значение LUFS по всей программе из ITU-R BS.1770-5 – одинаково в обоих мирах. Различается то, что вы с ним делаете. (Если термин LUFS – число громкости на логарифмической шкале, где ближе к нулю означает громче, – для вас новый, начните с вводной статьи о громкости.)

Рисунок 1. Два семейства нормализации громкости. Метаданные не трогают байты и двигают ручку громкости; обработка меняет сигнал, который слышит слушатель.

Dialnorm: ручка громкости, встроенная в Dolby

Если вы отгружаете что-либо через Dolby – эфирное телевидение, OTT-каталог на E-AC-3, поток нового поколения на AC-4 – вы встретите dialnorm, и это самое непонятое поле во всём аудиоконвейере.

Dialnorm (dialogue normalization, нормализация диалога) – это значение метаданных, переносимое внутри каждого потока Dolby Digital (AC-3) и Dolby Digital Plus (E-AC-3). Оно не меняет ни одного отсчёта звука. Вместо этого оно сообщает декодеру простым числом, насколько громок диалог в этой программе, и декодер использует это число, чтобы повернуть всю программу вверх или вниз – так, чтобы диалог лёг на согласованный опорный уровень во всех каналах и во всех программах, которые переключает зритель.

Поле – целое число от 1 до 31. Каждый шаг – один децибел. Значение 31 означает «диалог в контенте уже на опорном уровне – аттенюацию не применять». Значение 1 означает «диалог очень горячий – приглуши контент на 30 dB». Общая формула, которую применяет декодер:

аттенюация_dB = dialnorm − 31

Подставим реальное число. Самое частое продакшен-значение Dolby – dialnorm 27, что соответствует диалогу, измеренному как −27 LKFS (LKFS и LUFS – одна и та же шкала). Декодер вычисляет 27 − 31 = −4 dB, то есть прикручивает программу на 4 dB при воспроизведении. Программа с диалогом на −24 LKFS должна нести dialnorm 24, и декодер прикрутит её на 7 dB. Весь смысл в том, что после аттенюации декодера диалог каждой программы ложится в одно место, и зрителя не разрывает, когда за тихой драмой идёт громкая реклама. Это техническая механика американского CALM Act и ATSC A/85.

Подвох – и источник бесчисленных тикетов поддержки – в том, что dialnorm верен, только если он совпадает с реальной громкостью диалога контента. Рекомендация Dolby – измерить среднюю громкость диалога и выставить dialnorm равным измеренному значению. Поставите неверно – декодер применит неверный gain: поток, чей диалог реально на −24 LKFS, но несёт дефолтный dialnorm 31, проиграет на 7 dB громче соседей, потому что декодеру сказали не применять аттенюацию, когда нужно было −7 dB. Многие провалы в продакшене восходят к энкодеру, оставленному на заводском dialnorm, который никто не измерял.

AC-4 идёт дальше

Dolby AC-4, стандартизованный как ETSI TS 103 190, сохраняет принцип метаданных громкости и расширяет его. AC-4 несёт метаданные громкости в битстриме, чтобы декодер мог достичь целевой громкости на любом устройстве воспроизведения, и добавляет dialogue enhancement – отдельный слой метаданных, позволяющий зрителю поднять диалог относительно остального микса при декодировании, ради разборчивости в шумной комнате или ради доступности. Там, где dialnorm в AC-3 – единый глобальный gain, AC-4 отделяет диалог достаточно, чтобы декодер усилил его независимо. Принцип тот же – метаданные инструктируют декодер – но управление тоньше. Разбор AC-4 покрывает это полностью.

Replay Gain: та же идея для музыкальных файлов

Replay Gain – это музыкальная версия dialnorm, и она старше современной эпохи LUFS. Она решает проблему, с которой сталкивались все: перемешиваешь плейлист – и одна дорожка громыхает, а следующая шепчет, потому что громкость зависит скорее от года мастеринга, чем от музыки. Replay Gain хранит внутри каждого файла gain, который плеер должен применить, чтобы привести эту дорожку к стандартной громкости.

Текущая спецификация, Replay Gain 2.0, измеряет громкость по ITU-R BS.1770 (тем же алгоритмом, что и всё остальное) и опирается на уровень −18 LUFS, выбранный ради совместимости с исходной спецификацией 2001 года. Gain – простое вычитание:

replay_gain_dB = опорный_уровень − измеренная_громкость
             = −18 LUFS − измеренная_громкость

Дорожка, измеренная как −12 LUFS, получает сохранённый gain −18 − (−12) = −6 dB, и Replay Gain-плеер прикручивает её на 6 dB. Тихая джазовая запись на −24 LUFS получает +6 dB и поднимается. Файл никогда не переписывается; значение живёт как тег (кадр REPLAYGAIN_TRACK_GAIN в ID3v2 для MP3, Vorbis comment для FLAC, ключ APEv2 для WavPack).

Replay Gain хранит два gain, и различие важно. Track gain делает каждую дорожку одинаково громкой – хорошо для перемешивания и шумной среды. Album gain вычисляет один gain для всего альбома как единой склеенной программы, чтобы намеренно тихая баллада осталась тише, чем следующий за ней хард-рок, ровно как задумал мастеринг-инженер. Спецификация также хранит значение пика для дорожки и для альбома, чтобы плеер мог предсказать клиппинг: если положительный gain толкнёт сигнал за цифровой full scale, плеер либо уменьшит gain, либо лимитирует пики.

Opus – белая ворона

Один важный нюанс для тех, кто отгружает Opus – кодек по умолчанию для WebRTC и растущее присутствие в стриминге. Opus следует EBU R128, поэтому его опорная громкость – −23 LUFS, а не −18. RFC 7845 определяет поле output gain в заголовке Opus, которое плееры должны применять по умолчанию, а тег R128_TRACK_GAIN вычисляется относительно −23 LUFS, на 5 dB тише, чем −18 у ReplayGain. Если протегировать Opus-файл инструментом, который полагает −18, уровень будет неверен на 5 dB. Используйте инструмент, который знает, что Opus особый.

Apple Sound Check против Spotify: метаданные против реального времени

Apple Sound Check и нормализация громкости Spotify целятся почти в одно значение, но принадлежат к противоположным семействам – и это различие меняет то, что делаете вы как продюсер.

Apple Sound Check – это метаданные. Apple анализирует громкость каждой дорожки, сохраняет результат и при воспроизведении применяет глобальный gain, чтобы привести дорожку к примерно −16 LUFS. Файл никогда не изменяется; gain применяется в цифровой области при декодировании, без потерь благодаря современной 32-битной обработке. Это концептуально идентично ReplayGain – сохранённое число, толчок громкости – просто реализация самой Apple. Современный гипергромкий мастер прикручивается; старая тихая запись подталкивается вверх; динамика внутри каждой дорожки сохраняется.

Spotify нормализует в реальном времени. Он не полагается на тег, путешествующий с файлом. Когда вы проигрываете дорожку, Spotify измеряет её и применяет живой gain, чтобы достичь своей цели −14 LUFS, с тремя выбираемыми режимами: Normal (−14), Loud (−11, добавляет лимитер для защиты тихих мастеров, которые поднимают вверх) и Quiet (−19). Поскольку нормализацию вычисляет сервис, она работает независимо от того, какие теги несёт ваш файл.

Практическое следствие – правило, которое стоит усвоить каждому музыкальному продюсеру: нормализатор не перегромить. Сведите сингл к −8 LUFS, чтобы «звучать громко на Spotify», и Spotify просто прикрутит его на 6 dB до −14 – вы отдали динамический диапазон и не получили ничего в уровне воспроизведения. Один мастер на цели музыкального кластера, около −14 LUFS с истинным пиком на −1 dBTP, играет верно почти везде; −16 у Apple означает лишь чуть меньше прикручивания. Сами цели, платформа за платформой, живут в статье о целях по платформам.

Рисунок 2. Какой механизм где применяется. Найдите адресата слева; справа – тегировать, пересобирать или просто измерить.

Нормализация против аттенюации: в какую сторону платформа может двигать?

Тонкая, но экономящая деньги деталь: не каждый адресат может двигать ваш уровень в обе стороны. Некоторые только аттенюируют – прикручивают громкий контент – и никогда не поднимают тихий вверх.

Spotify с поднятием по альбому и лимитером режима Loud повернёт тихий мастер вверх. YouTube и в большинстве случаев нормализация воспроизведения Apple только прикручивают вниз; мастер тише цели остаётся на месте и просто играет тихо. ReplayGain и dialnorm двигаются в обе стороны, ограниченные сверху запасом до клиппинга.

Почему важно: если ваш адресат только-вниз, мастеринг тише «на всякий случай» означает, что контент играет тише, чем у всех, и теряет воспринимаемую упругость. Сводите к цели, а не ниже, и пусть платформа аттенюирует оттуда, только если ей нужно. Аттенюация всегда безопасна; полагаться на подъём, который может не прийти, – нет.

Что происходит при нарушении цели

Повторяются три режима отказа, и каждый ложится на своё семейство.

Несовпадение метаданных (неверный dialnorm). Звук в порядке; число лжёт. Декодер применяет неверный gain, и программа слишком громкая или слишком тихая относительно соседей. Исправление бесплатно: измерить диалог, поправить поле dialnorm, перемультиплексировать. Перекодировать звук не нужно, потому что отсчёты не были проблемой.

Чрезмерная компрессия в погоне за громкостью. Вы раздавили динамический диапазон, чтобы поднять интегральную громкость, но адресат всё равно нормализует к фиксированной цели. Вы оказываетесь на том же уровне воспроизведения, что и чистый мастер, минус динамика, плюс вероятные выбросы истинного пика на наушниках слушателя. Чистый убыток. Исправление – пересвести со здравой динамикой и дать нормализации сделать свою работу.

Клиппинг истинного пика после подъёма. Тихий мастер поднимают (ReplayGain, режим Loud у Spotify, pre-amp плеера), и пики превышают full scale, клиппуя на DAC. Поэтому спецификация Replay Gain хранит метаданные пика, и поэтому спецификации стриминга просят потолок −1 dBTP – запас, чтобы подъём не клиппнул.

Как протестировать мастер перед доставкой

Гадать не нужно. То же измерение по BS.1770, что использует каждая платформа, доступно бесплатно на вашей машине через FFmpeg, так что вы можете проверить интегральную громкость и истинный пик перед отгрузкой. Надёжный метод – два прохода: измерить, затем действовать по измерению.

# Проход 1 — только измерение. Печатает интегральную громкость (I), истинный пик (TP),
# loudness range (LRA) и порог в JSON. Прочтите числа; не меняйте ничего.
ffmpeg -i master.wav -af loudnorm=I=-14:TP=-1:LRA=11:print_format=json -f null -

Прочтите значения input_i (интегральные LUFS) и input_tp (истинный пик, dBTP) из JSON, который печатает фильтр. Если input_i уже на цели адресата, а input_tp ниже потолка – готово: отгружайте файл нетронутым и там, где адресат использует метаданные, приложите верный тег вместо пересборки. Если действительно нужно пересобрать под цель (спецификация требует, чтобы сам файл измерялся как −23 LUFS), запустите второй проход, который вернёт измеренные числа и применит один линейный gain, чтобы динамика выжила:

# Проход 2 — применить один линейный gain по измеренным значениям из прохода 1.
# linear=true делает это чистым изменением gain, а не покадровым компрессором.
ffmpeg -i master.wav -af loudnorm=I=-23:TP=-1:LRA=11:measured_I=-18.2:measured_TP=-3.4:measured_LRA=9.1:measured_thresh=-28.7:linear=true -ar 48000 out.wav

Под обеими командами лежит правило решения: сначала измерь, потом выбери семейство. Если адресат читает метаданные (Dolby, Apple, Replay Gain-библиотека), файл может остаться как есть, а вы выставите тег. Если адресату нужны сами байты на уровне (вещательный deliverable, транскод под фиксированную цель), вы пересобираете с линейным gain. Динамику давить почти никогда не нужно, и никогда не выставляйте значение метаданных, которое не измеряли.

Где здесь Фора Софт

В OTT- и Internet-TV-системах, которые мы строим, обработка громкости по адресату вшита в шаг транскодирования и упаковки, а не оставлена загрузке. Единый мезонин-мастер измеряется один раз, затем маршрутизируется: для Dolby-рендиций вычисляется и записывается значение dialnorm, транскод с линейным gain выдаёт вещательный deliverable, а стриминговые рендиции оставляются на уровне мастера для нормализации сервисом. В продуктах видеоконференций и телемедицины, которые мы поставляем, та же дисциплина применяется к пути Opus, где опорный уровень −23 LUFS и выходной gain заголовка должны соблюдаться, чтобы уровни голоса оставались согласованными между участниками. Верный механизм под каждого адресата – это разница между каталогом, который играет ровно, и тем, что генерирует тикеты о громкости.

Главное

  • Два семейства: метаданные двигают громкость плеера; обработка меняет сигнал.
  • Dialnorm (1–31 = −30…0 dB) говорит декодеру Dolby, насколько прикрутить.
  • Неверный dialnorm чинится перемультиплексированием – никогда не перекодируйте звук.
  • Replay Gain опирается на −18 LUFS; Opus – на −23 LUFS. Не путайте их.
  • Apple Sound Check – метаданные (−16); Spotify нормализует в реальном времени (−14).
  • Нормализатор не перегромить; горячий мастеринг лишь теряет динамику.
  • Перед доставкой измерьте FFmpeg loudnorm в два прохода; пересобирайте, лишь если нужно.

Что почитать дальше

Строите такую систему?

Подберём параметры кодирования под ваш контент и посчитаем стоимость доставки до старта разработки.