Как уменьшить громкость в определенном интервале времени с помощью ffmpeg.exe

Как уменьшить громкость в определенном интервале времени с помощью ffmpeg.exe

Я пытаюсь уменьшить громкость в определенном временном интервале с помощью ffmpeg.exe. Допустим, у меня есть видео длиной 5 минут, и я хочу уменьшить громкость между 00:01:30 и 00:02:00. Я читал, что мы можем использовать разные параметры одновременно, но я не смог разобраться.

Любая помощь будет высоко оценена.

решение1

Вы можете сделать это с помощью комплекса фильтров:

ffmpeg -i in.mp4 -filter_complex "[0:v]null[out2];[0:a]atrim=duration=90[a];\
[0:a]atrim=start=90:duration=30,volume=0.1,asetpts=PTS-STARTPTS[b];[a][b]concat=v=0:a=1[c];\
[0:a]atrim=start=120,asetpts=PTS-STARTPTS[d];[c][d]concat=v=0:a=1[out1]" \
-acodec mp2 -map [out1] -map [out2] out.mp4

Он снижает громкость до 0,1 (1,0 — полный) на сегменте от 90 до 120 секунд. Как это работает? Он ничего не делает с видеопотоком (фильтр ноль), просто включает его в график фильтра. Затем обрезает первые 90 секунд из аудиопотока, затем обрезает 30 секунд (90-120) из аудиопотока и снижает громкость до 0,1. Затем объединяет последние 2 аудиопотока с помощью concat. Затем снова обрезает оставшийся аудиопоток и снова объединяет его.

Надеюсь, поможет.

Связанный контент