FFmpeg: Как создать динамические изменения громкости в аудиофайле? - PullRequest
0 голосов
/ 14 октября 2018

Я работаю над проектом, в котором мне нужно динамически изменять громкость аудиофайла.

Допустим, у меня есть аудиофайл с именем xyz.mp3 (20-секундный аудиофайл).Мне нужно установить громкость в нем следующим образом:

Time Range (in Seconds)     ||     Volume Percentage (in %)
-------------------------------------------------------------------    
    0 - 4                   ||           100
                            ||
    4 - 8                   ||    change from 100 - 20 (dynamically)
                            ||
    8 - 12                  ||           20
                            ||           
    12 - 16                 ||    change from 20 - 100 (dynalically)
                            ||
    16 - 20                 ||           100       

Теперь я знаю, что для изменения громкости звука на определенное время я могу использовать следующую команду:

ffmpeg -i in.mp3 -af volume=20:enable='between(t,8,12)' out.mp3

но когда я использую эффект громкости, он не меняет динамически громкость.Он просто прямо меняет громкость со 100 на 20 и не меняет его, как затухание.

и когда я использую команду затухания, например:

ffmpeg -i in.mp3 -af afade=t=in:ss=4:d=8,afade=t=out:st=12:d=16 out.mp3

или

ffmpeg -i in.mp3 -af afade=enable='between(t,4,8)':t=in:ss=4:d=4,afade=enable='between(t,12,16)':t=out:st=12:d=4 out.mp3

, нопохоже, что afade не работает несколько раз, даже когда я использую версию ffmpeg 3.0.1.

Поскольку afade работает только один раз, я также разделил звук на части по 4 секунды и добавил к нему эффекты затухания.и затем объединить их снова, но между каждым клипом возникает промежуток в несколько миллисекунд.Кто-нибудь знает лучший способ сделать это?Пожалуйста, помогите мне ...

Обновление 1:

Вот код, который я использовал:

"volume='" +
            "between(t,0,8)+(1-0.8*(t-8)/4)*" +        // full
            "between(t,8.01,11.99)+0.1*" +             // change from HIGH -> LOW
            "between(t,12,16)+(0.1+0.8*(t-16)/4)*" +   // low
            "between(t,16.01,19.99)+1*" +              // change from LOW -> HIGH   -
            "between(t,20,24)+(1-0.8*(t-24)/4)*" +     // full
            "between(t,24.01,27.99)+0.1*"+             // change from HIGH -> LOW   -
            "between(t,28,32)+(0.1+0.8*(t-32)/4)*" +   // low
            "between(t,32.01,35.99)+1*" +              // change from LOW -> HIGH  -
            "between(t,36,40)+(1-0.8*(t-40)/4)*" +     // full
            "between(t,40.01,43.99)+0.1*"+             // change from HIGH -> LOW   -
            "between(t,44,48)+(0.1+0.8*(t-48)/4)*" +   // low
            "between(t,48.01,51.99)+" +                // change from LOW -> HIGH -
            "between(t,52,56)" +                       // high
            "':eval=frame";

В этом коде я получилмаленький (промежуток в несколько миллисекунд) в тех местах, где я инициализирую звук для изменения громкости

Обновление 2 Хорошо, я понял, мне просто нужно изменить значения времени, например, с 19,99 до 19,9999 иС 16.01 до 16.0001 и это решит проблему.Спасибо, Гьяан, сэр.

1 Ответ

0 голосов
/ 14 октября 2018

Использование

volume='between(t,0,4)+(1-0.8*(t-4)/4)*between(t,4.01,7.99)+0.2*between(t,8,12)+(0.2+0.8*(t-12)/4)*between(t,12.01,15.99)+between(t,16,20)':eval=frame
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...