суббота, 13 июня 2020 г.

FFMPEG - как изменить громкость видео без перекодирования

Всем доброго дня!


Недавно возник новый вопрос.

Часто присылают видео файлы с очень разным качеством и видео и аудио. В основном я обрабатываю видео так, чтобы подготовить файлы к загрузке на YouTube. Для этого приходится понижать битрейт например с 20000 кб/с до 2500 кб/с.

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

Как обычно, вновь выручает комбайн - утилита FFMPEG. Похоже, она умеет всё. Всё что только возможно сделать с видео и аудио. И, похоже, она работает с любыми контейнерами.



Повышение уровня аудио


Итак, как же повысить уровень аудио дорожки в  видео файле?

Вот так:

ffmpeg -i $INPUT_FILE -vcodec copy -af "volume=10dB" $OUTPUT_FILE

Если же нужно понизить уровень аудио в видео файле, тогда можно сделать вот так:

ffmpeg -i $INPUT_FILE -vcodec copy -af "volume=-10dB" $OUTPUT_FILE

Рецепт, как обычно, найден на просторах Интернет, вот здесь.

Однако, и на оффсайте есть нужная информация.




Нормализация


Ещё более интересным представляется процесс нормализации звуковых дорожек файлов.

Вначале предлагается проанализировать файл:


ffmpeg -i video.avi -af "volumedetect" -vn -sn -dn -f null /dev/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 dB, значит нормализация должна быть 5 dB.

Обычный аудио файл
ffmpeg -i input.wav -af "volume=5dB" output.mp3

AVI формат (обычно с mp3)
ffmpeg -i video.avi -af "volume=5dB" -c:v copy -c:a libmp3lame -q:a 2 output.avi

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


О нормализации написано здесь и здесь.