FFMPEG нормализатор звука dynaudnorm не влияет на amix - PullRequest
0 голосов
/ 18 октября 2019

По сути, я смешиваю несколько mp3-файлов с amix и adelay.

Проблема, с которой я столкнулся, заключается в том, что самый первый громкость mp3 слишком низкий, а последний слишком громкий, точно такой же, как обсуждалосьв этом посте: FFMPEG проблема объема фильтра amix с входами различной длительности

Я следовал решению @ Gyan, добавив эти параметры в amix :duration=first:dropout_transition=0,dynaudnorm, но это не влияет на вывод.

Моя команда просто такая:

ffmpeg \
-i "video.mp4" \
-i "audio1.mp3" \
-i "audio2.mp3" \
-i "audio3.mp3" \
-y \
-filter_complex " \
    [a:0]volume=0[videoAudio]; \
    [1]adelay=500[ad1]; \
    [2]adelay=5400[ad2]; \
    [3]adelay=10000[ad3]; \
    [videoAudio][ad1][ad2][ad3]amix=inputs=4:duration=first:dropout_transition=0,dynaudnorm \
" \
output.mp3

Есть идеи, как заставить dynaudnorm работать?

Ответы [ 2 ]

1 голос
/ 20 октября 2019

Пожалуйста, сверьтесь с документацией dynaudnorm, она все ясно объясняет. В частности, значения длительности очень высоки, поэтому нормализация никогда не наступит. Вам нужно изменить первые два параметра фильтра dynaudnorm: f (framelen) и g (gausssize) на гораздо более низкие значения.

1 голос
/ 20 октября 2019

[a:0]volume=0[videoAudio]; \

Если вы заглушаете саундтрек к видео, почему бы не оставить его в покое?

[1]adelay=500[ad1]; \

Если ваши mp3-файлы стереофонические, вы должны указать задержку для обоих каналов.

duration=first

Задерживая ваши входы,audio3.mp3 автоматически станет самым длинным:

[ delay 500ms ]<audio1.mp3>|
[                          |       delay 5400ms ]<audio2.mp3>
[                          |                                   delay 10000ms ]<audio3.mp3>

Вертикальная линия (сразу после audio1.mp3) помечает конец потока как duration=first. В этом случае вам действительно нужно значение по умолчанию duration=longest!

dropout_transition=0

Я предлагаю установить эту опцию на общую длину вашего микса, после чего следуетvolume фильтр установлен на количество входов, чтобы восстановить громкость.

Чтобы узнать общую длину вашего микса:

ffmpeg \
-i "audio1.mp3" \
-i "audio2.mp3" \
-i "audio3.mp3" \
-lavfi "
  [0]adelay=500|500[ad1];
  [1]adelay=5400|5400[ad2];
  [2]adelay=10000|10000[ad3];
  [ad1][ad2][ad3]amix=inputs=3
" \
-f null -

Допустим, это возвращает, например, time=00:01:30.74,Тогда последняя команда будет выглядеть следующим образом:

ffmpeg \
-i "audio1.mp3" \
-i "audio2.mp3" \
-i "audio3.mp3" \
-lavfi "
  [0]adelay=500|500[ad1];
  [1]adelay=5400|5400[ad2];
  [2]adelay=10000|10000[ad3];
  [ad1][ad2][ad3]amix=inputs=3:dropout_transition=90.74,volume=3,dynaudnorm
" \
output.mp3

[править]
Если вы скажете, что прочитали ответ Гаяна с указанным вами URL, тогда я не понимаю, почемуЯ все еще должен был рассказать вам о duration=first и dropout_transition=0. Позвольте мне показать вам значение dropout_transition.

ffmpeg \
-i "input1.mp3" -i "input2.mp3" -i "input3.mp3" \
-lavfi "[1]adelay=11233[ad2];[2]adelay=20141[ad3];[0][ad2][ad3]amix=inputs=3" \
-f null -
[...]
size=N/A time=00:00:33.43 bitrate=N/A speed= 134x

Я проверил 3 образца. Общая длительность звукового микса составляет 33.43 секунды.

Вот так будет выглядеть сигнал с dropout_transition=0:

ffmpeg \
-i "input1.mp3" -i "input2.mp3" -i "input3.mp3" \
-lavfi "
  [1]adelay=11233[ad2];[2]adelay=20141[ad3];
  [0][ad2][ad3]amix=inputs=3:dropout_transition=0,
  volume=3,showwavespic=s=639x128
" \
"ffmpeg_amix=dt=0,vol=3,wavespic.png"

ffmpeg_amix=dt=0,vol=3,wavespic Так же, как сигнал вваш оригинальный пост;конец становится очень громким. Так что это не имеет ничего общего с dynaudnorm.

С dropout_transition, установленным на общую длину аудио микса (и не забывайте volume=3), именно так должна выглядеть форма волны:

ffmpeg \
-i "input1.mp3" -i "input2.mp3" -i "input3.mp3" \
-lavfi "
  [1]adelay=11233[ad2];[2]adelay=20141[ad3];
  [0][ad2][ad3]amix=inputs=3:dropout_transition=33.43,
  volume=3,showwavespic=s=639x128
" \
"ffmpeg_amix=dt=33.43,vol=3,wavespic.png"

ffmpeg_amix=dt=33.43,vol=3,wavespic

Затем вы должны поиграть с dynaudnorm его параметрами, как упомянул Пол Б. Махол:

ffmpeg \
-i "input1.mp3" -i "input2.mp3" -i "input3.mp3" \
-lavfi "
  [1]adelay=11233[ad2];[2]adelay=20141[ad3];
  [0][ad2][ad3]amix=inputs=3:dropout_transition=33.43,
  volume=3,dynaudnorm=f=200:g=15,showwavespic=s=639x128
" \
"ffmpeg_amix=dt=33.43,vol=3,dynaudnorm=f=200-g=15,wavespic.png"

ffmpeg_amix=dt=33.43,vol=3,dynaudnorm=f=200-g=15,wavespic

Я больше фанат фильтра acompressor:

ffmpeg_amix=dt=33.43,vol=3,acomp=l=2-t=-30dB-a=200-r=1000-d=0-mu=+5.1dB,wavespic [/ edit]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...