Я работаю над проектом, в котором мне нужно динамически изменять громкость аудиофайла.
Допустим, у меня есть аудиофайл с именем 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 и это решит проблему.Спасибо, Гьяан, сэр.