Вопрос или проблема
У меня есть сценарий для обработки/кодирования видео. Некоторые видео имеют разные уровни громкости (например, два видео были объединены, и одно из них имело громкий звук, а другое – тихий). Я хочу нормализовать звук так, чтобы громкий звук был уменьшен, а тихий звук увеличен, чтобы они стали почти равными. Хотя я использую HandbrakeCLI для кодирования, но любое другое решение, например ffmpeg, которое можно использовать из терминала Linux, также подойдет.
Я провел некоторые исследования, но у меня очень ограниченные знания об аудио, поэтому я не смог заставить это работать. Некоторые из решений, которые я исследовал, – это audio-normalize и Replaygain (просто тег, но мне нужно напрямую изменить видео при кодировании, а не просто добавить тег).
У меня есть пример входных данных и пример выходных данных. Пример выходных данных создан вручную путем выбора громкого звука и его уменьшения, а также вручную выбора тихого звука и его увеличения.
Как видно на оригинальном аудио, весь звук тихий, кроме последней небольшой части, которая слишком громкая, а в выходных данных оба почти равны. Но проблема в том, что я хочу сделать это автоматически.
Правка:
Результат ffmpeg -i in.mp4 -af "dynaudnorm" -vcodec copy out.mp4
:
Существует также эффект vlevel и соответствующая программа vlevel-bin
. Он использует буфер предварительного просмотра, чтобы определить, тише или громче грядущий звук по сравнению с заданным порогом, и начинает изменять громкость, чтобы адаптироваться к тому, что произойдет в ближайшее время.
Плюсы: не требует настройки. Учитывая просто аудиофайл, он установит их на постоянный уровень, так что если каждое видео будет обработано с помощью vlevel, они будут нормализованы относительно друг друга.
Минусы: это не встроенный эффект ffmpeg; вам нужно будет извлечь звук из видео, конвертировать его в правильную битрейт и формат для vlevel-bin, а затем повторно закодировать звук обратно в ваше видео. Это также (по необходимости) уменьшит динамический диапазон вашего аудио. Не до крайностей “войны громкости”, но пики и впадины будут заметно сжаты.
Ранее я использовал это в нескольких телевизионных шоу, которые полагались на постоянные взрывы между тихими разговорными сценами, и это сделало их просмотримыми без необходимости контроля громкости на протяжении всего эпизода.
Ответ или решение
Нормализация звуковых уровней в видео: полное руководство
Ваша задача по нормализации звуковых уровней в видео, особенно когда вы работаете с видеоматериалами, которые могут иметь различные уровни громкости, требует тщательного подхода и использования надлежащих инструментов. Давайте рассмотрим, как это можно сделать с помощью таких инструментов, как FFmpeg.
Причины вариации звуковых уровней
Если несколько видео объединены в одно, может возникнуть проблема, когда одно видео имеет громкий звук, а другое – тихий. Это может вызывать дискомфорт для зрителей, когда им приходится постоянно регулировать громкость. Нормализация аудио в видеофайле — это процесс, который помогает уравновесить эти уровни.
Инструменты для нормализации аудио
Одним из самых мощных и универсальных инструментов для нормализации аудио является FFmpeg. Это свободное программное обеспечение, которое поддерживает различные форматы видео и аудио, и обладает множеством фильтров для обработки звука.
Использование FFmpeg для нормализации
Чтобы автоматизировать процесс нормализации звука, FFmpeg предлагает несколько параметров. Основной фильтр, который мы рассмотрим, — это dynaudnorm
. Это динамическая нормализация звука, которая автоматически регулирует уровни громкости.
Шаги по использованию FFmpeg:
-
Установка FFmpeg: Если FFmpeg еще не установлен на вашей системе, вы можете установить его через пакетный менеджер вашей операционной системы. Например, на Ubuntu это выглядит так:
sudo apt update sudo apt install ffmpeg
-
Команда для нормализации:
Используйте следующую команду для нормализации видеофайла:ffmpeg -i input.mp4 -af "dynaudnorm" -vcodec copy output.mp4
Здесь
-i input.mp4
— это входной файл, а-vcodec copy
указывает на копирование видеодорожки без повторной кодировки, что экономит время и качество видео. -
Настройка фильтров:
Если вы хотите более тонкой настройки, вы можете использовать дополнительные параметры в фильтреdynaudnorm
, например:ffmpeg -i input.mp4 -af "dynaudnorm=f=10" -vcodec copy output.mp4
Этот параметр
f=10
управляет ответом фильтра на изменение громкости.
Альтернативные подходы
Кроме FFmpeg, существует и другие утилиты, такие как vlevel-bin
, которые могут помочь в нормализации звука. Они требуют немного больше ручного вмешательства, так как вам будет нужно извлечь аудио, обработать его, а затем вернуть в видео.
Преимущества и недостатки vlevel-bin
:
Преимущества:
- Не требует настройки и может работать с любым аудиофайлом.
- Сетевые аудио могут одинаково нормализоваться, если обработаны через
vlevel
.
Недостатки:
- Упрощает динамический диапазон аудио, что может неуместно в некоторых случаях.
Заключение
Нормализация звука в видео является важной задачей, особенно в том случае, если вы работаете с несколькими источниками, и вам необходимо обеспечить единообразие уровня громкости. Использование FFmpeg с фильтром dynaudnorm
представляет собой один из самых эффективных и автоматизированных методов достижения этого результата. Если вы знакомитесь с процессом обработки аудио, данные методы могут значительно улучшить качество выпускаемого материала и обеспечить более комфортное восприятие вашей аудитории.