Есть несколько возможностей:
Применяйте простую нормализацию (например, пиковую или среднеквадратичную нормализацию ). Это изменит только усиление во всем файле, так что вы все равно будете испытывать различия между громкими и тихими частями. Не очень рекомендуется для вашего случая использования.
Используйте динамическое сжатие с
compand
фильтром. Это уменьшит динамический диапазон (то есть разницу между тихими и громкими частями) на протяжении всей записи. Вы должны найти правильный порог, при котором начинается сжатие, и вы, скорее всего, получите довольно шумные сигналы для мягких частей.Используйте
dynaudnorm
фильтр, который «позволяет применять дополнительное усиление к« тихим »частям звука, избегая искажений или срезая« громкие »участки». В вашем случае это было бы предпочтительным вариантом.
По сути, вам просто нужно скачать последнюю статическую сборку ffmpeg отсюда и затем запустить:
ffmpeg -i input.wav -filter:a "dynaudnorm" output.wav
Скорее всего, вам потребуется настроить параметры фильтра для вашего конкретного случая использования. Используйте примеры, приведенные для compand
фильтра, в качестве отправной точки:
Сделайте музыку с тихими и громкими пассажами, подходящими для прослушивания в шумной обстановке:
compand=.3|.3:1|1:-90/-60|-60/-40|-40/-30|-20/-20:6:0:-90:0.2
Еще один пример звука с шепотом и взрывом:
compand=0|0:1|1:-90/-900|-70/-70|-30/-9|0/-3:6:0:0:0
Здесь параметры второго примера, в частности:
attacks=0|0 decays=1|1 points=-90/-900|-70/-70|-30/-9|0/-3 soft-knee=6 gain=0 volume=0 delay=0
Вы можете отрегулировать усиление, чтобы сохранить ту же динамическую обработку, но настроить ее в соответствии с базовым уровнем входного сигнала.
Кроме того, в качестве графической альтернативы ffmpeg вы можете использовать Audacity и его встроенный компрессор, который обеспечивает тот же эффект, что и compand
фильтр в ffmpeg. В вики тоже есть хорошее объяснение опций.