#android #android-studio #ffmpeg #audio-streaming #equalizer
Вопрос:
Я хочу реализовать функцию нормализации звука видео. Я провел некоторые исследования и разработки, но не нашел подходящего решения.
У меня также есть сомнения в том, должен ли я извлекать аудио из видео, а затем нормализовать его, а затем объединить аудио в видео(что может быть трудоемкой задачей), или я могу напрямую нормализовать видеофайл?
Или, если для этого есть какая-либо конкретная команда FFmpeg, я бы с удовольствием ее использовал.
Комментарии:
1. Для FFmpeg есть фильтр EBU R 128: ffmpeg.org/ffmpeg-filters.html#loudnorm . Или, если вы хотите сделать это вручную: trac.ffmpeg.org/wiki/AudioVolume . В обоих случаях потребуется перекодировать звуковую дорожку.
2. На самом деле, я хочу реализовать его для файлов видео(.mp4). Можно ли нормализовать звук в уже записанных видео?
3. Для совместимости со всеми проигрывателями вы можете сохранить закодированную видеодорожку как есть и перекодировать только звуковые дорожки. Возможно, вместо этого можно указать метаданные ReplayGain, если проигрыватель поддерживает их во время воспроизведения.
Ответ №1:
Я нашел одно решение для вышеуказанного вопроса.
Мы можем использовать команду FFmpeg для нормализации звука в видео. Но перед этим нам нужно выяснить, какую выгоду можно применить
Во-первых, нам нужно проанализировать аудиопоток на максимальную громкость, чтобы увидеть, окупится ли нормализация:
val complexCommand = arrayOf("-i",videoPath,"-af","volumedetect","-f","null","null")
Это выведет что-то вроде следующего:
[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 дБ, то вам не нужно нормализовать звук.
Теперь мы можем нормализовать файл .mp4, используя следующую команду FFmpeg.
val complexCommand = arrayOf(
"-i",
originalVideoPath,
"-af",
"volume= 5.0dB",
"-c:v", "copy",
"-c:a",
"aac",
"-strict",
"experimental",
"-b:a",
"128k",
destinationPath
)
128 Кб-это скорость передачи аудио в битах видео, которую нам нужно установить. Это может варьироваться в зависимости от видео.