Нормализация звука — процесс выравнивания частотных характеристик при студийной звукозаписи ...

Вопрос от Чудика

Я хочу, чтобы самый громкий пиковый звук в записе сделанной мной на смартфон(диктофон или камеру) был настолько громким, насколько позволяет кодек, а затем соответственно усилил все остальные звуки. Какой практический пример для того, чтобы сделать это?

Отвечает Мистер Очевидность:

обратиться профессиональную студию звукозаписи и платить, за каждый файл ...

Или сделать так:

Вариант 1: встроенные фильтры нормализации

Текущий ffmpeg имеет два фильтра, которые можно напрямую использовать для нормализации - хотя они уже достаточно продвинуты, поэтому они не просто применяют усиление для достижения пикового уровня. Они здесь:

  • loudnorm: нормализация громкости по EBU R128. Вы можете установить интегрированную цель громкости, цель диапазона громкости или максимальный истинный пик. Это рекомендуется для публикации аудио и видео и используется вещательными компаниями по всему миру.
  • dynaudnorm: «Интеллектуальная» нормализация громкости без ограничения, которая динамически применяет нормализацию к оконным частям файла. Это может изменить характеристики звука, поэтому его следует применять с осторожностью.

Также volumeфильтр можно использовать для выполнения простых настроек громкости. См. Вики запись Audio Volume Manipulation для более подробной информации.

loudnormФильтр может быть использован с одним проходом, но рекомендуется , чтобы выполнить два прохода, что позволяет более точно линейной нормализации. Это немного сложно автоматизировать. Кроме того, если вы хотите «простую» среднеквадратичную или пиковую нормализацию до 0 дБFS (или любую другую цель), читайте дальше.


Вариант 2: использовать ffmpeg-normalize инструмент

Я создал программу Python для нормализации медиа-файлов , также доступную в PyPi . Вы просто:

  • скачать ffmpeg (выберите статическую сборку версии 3.1 или выше)
  • поместите ffmpeg исполняемый файл в свой файл $PATH, добавив его, например /usr/local/bin, или добавив его каталог в$PATH
  • Бегать pip install ffmpeg-normalize
  • использование ffmpeg-normalize

Например:

ffmpeg-normalize input.mp4 -o output.mp4 -c:a aac -b:a 192k

Или просто нормализовать несколько аудиофайлов в пакетном режиме и записать их как несжатый WAV в выходную папку:

ffmpeg-normalize *.m4a -of /path/to/outputFolder -ext wav

Инструмент поддерживает EBU R128 (по умолчанию), RMS и пик. Посмотрите на ffmpeg-normalize -hдругие варианты и проверьте README для некоторых примеров.

Кроме того, он поддерживает перекодирование с другими кодерами (например, AAC или MP3) или автоматическое объединение аудио обратно в видео.


Вариант 3: нормализация звука вручную с ffmpeg

В ffmpeg вы можете использовать volumeфильтр для изменения громкости трека. Убедитесь, что вы скачали последнюю версию программы.

Это руководство предназначено для нормализации пиков , что означает, что самая громкая часть в файле будет сидеть на 0 дБ вместо чего-то более низкого. Существует также нормализация на основе RMS, которая пытается сделать среднюю громкость одинаковой для нескольких файлов. Для этого не пытайтесь довести максимальную громкость до 0 дБ, а среднюю громкость до выбранного уровня дБ (например, -26 дБ).

Узнайте усиление, чтобы применить

Сначала вам нужно проанализировать аудиопоток на максимальную громкость, чтобы увидеть, окупится ли нормализация:

ffmpeg -i video.avi -af "volumedetect" -vn -sn -dn -f null /dev/null

Заменить /dev/nullс NULна Windows. , И аргументы , проинструктировать FFmpeg игнорировать не-аудио потоков в ходе этого анализа. Это резко ускоряет анализ.
-vn-sn-dn

Это выведет что-то вроде следующего:

[Parsed_volumedetect_0 @ 0x7f8ba1c121a0] mean_volume: -16.0 dB
[Parsed_volumedetect_0 @ 0x7f8ba1c121a0] max_volume: -5.0 dB
[Parsed_volumedetect_0 @ 0x7f8ba1c121a0] histogram_0db: 87861

Как видите, наш максимальный уровень громкости составляет -5,0 дБ, поэтому мы можем применить усиление 5 дБ. Если вы получите значение 0 дБ, вам не нужно нормализовать звук.

Примените фильтр громкости:

Теперь мы применяем volumeфильтр к аудиофайлу. Обратите внимание, что применение фильтра означает, что нам придется перекодировать аудиопоток. Какой кодек вы хотите для аудио, конечно, зависит от исходного формата. Вот некоторые примеры:

  • Обычный аудиофайл: просто закодируйте файл любым нужным вам кодером:

    ffmpeg -i input.wav -af "volume=5dB" output.mp3

Ваши варианты, конечно, очень широки.

  • Формат AVI: обычно есть аудио MP3 с видео, которое поставляется в контейнере AVI:

    ffmpeg -i video.avi -af "volume=5dB" -c:v copy -c:a libmp3lame -q:a 2 output.avi

Здесь мы выбрали уровень качества 2. Значения варьируются от 0 до 9, и ниже означает лучше. Обратитесь к руководству MP3 VBR для получения дополнительной информации о настройке качества. Вы также можете установить фиксированный битрейт -b:a 192k, например.

  • Формат MP4: в контейнере MP4 вы обычно найдете аудио AAC. Мы можем использовать встроенный кодировщик AAC в ffmpeg.

    ffmpeg -i video.mp4 -af "volume=5dB" -c:v copy -c:a aac -b:a 192k output.mp4

Здесь вы также можете использовать другие кодеры AAC. Некоторые из них также поддерживают VBR. Посмотрите этот ответ и руководство по кодированию AAC для некоторых советов.

В приведенных выше примерах видеопоток будет скопирован с использованием -c:v copy. Если во входном файле есть субтитры или несколько видеопотоков, используйте опцию -map 0перед именем выходного файла.

Пример

Предпосылки: установлен ffmpeg, pip3, ffmpeg-normalize

Нормализовать все файлы:

ffmpeg-normalize *.m4a -of normalize -ext wav

И вот 6 лекций по приблизительно 90 минут и пару других коротких записей превращаются в удобные для работы:

ls -l
итого 17927924
-rw-rw-r-- 1 ink ink   40544334 дек  5 09:52 Голос001.wav
-rw-rw-r-- 1 ink ink 2381177102 дек  5 09:56 Голос002.wav
-rw-rw-r-- 1 ink ink 1470627942 дек  5 10:01 Голос003.wav
-rw-rw-r-- 1 ink ink 2383343802 дек  5 10:06 Голос004.wav
-rw-rw-r-- 1 ink ink 1844013730 дек  5 10:10 Голос005.wav
-rw-rw-r-- 1 ink ink 2218326830 дек  5 10:14 Голос006.wav
-rw-rw-r-- 1 ink ink 1858110658 дек  5 10:19 Голос007.wav
-rw-rw-r-- 1 ink ink  478573400 дек  5 10:20 Голос008.wav
-rw-rw-r-- 1 ink ink 1455978194 дек  5 10:23 Голос009.wav
-rw-rw-r-- 1 ink ink 1978598816 дек  5 10:27 Голос010.wav
-rw-rw-r-- 1 ink ink 2248830048 дек  5 10:32 Голос011.wav

за 40 минут итого, обработано около 600 минут.

Предупреждение WARNING: The sample rate will automatically be set to 192 kHz by the loudnorm filter. Specify -ar/--sample-rate to override it. ПРЕДУПРЕЖДЕНИЕ: Частота дискретизации будет автоматически установлена на 192 кГц фильтром нормы громкости. Укажите -ar/--частоту дискретизации, чтобы переопределить ее.