Нормализация звука — процесс выравнивания частотных характеристик при студийной звукозаписи ...
Вопрос от Чудика
Я хочу, чтобы самый громкий пиковый звук в записе сделанной мной на смартфон(диктофон или камеру) был настолько громким, насколько позволяет кодек, а затем соответственно усилил все остальные звуки. Какой практический пример для того, чтобы сделать это?
Отвечает Мистер Очевидность:
обратиться профессиональную студию звукозаписи и платить, за каждый файл ...
Или сделать так:
Вариант 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/--частоту дискретизации, чтобы переопределить ее.