android - FFmpeg:如何在音频文件中创建动态音量变化?
问题描述
我正在做一个需要动态更改音频文件音量的项目。
假设我有一个名为 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,而不是像衰减那样改变它。
当我使用 fade 命令时:
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
但看起来即使我使用的是 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)即可解决问题。谢谢江先生。
解决方案
利用
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
推荐阅读
- react-native - 如何在 React Native 中存储和导入静态文件?
- sql - 我的查询正确吗?我可以优化它吗?整数的正和和负和
- java - 录制音频并播放问题
- python - 在python中重塑数据
- haskell - 在 Haskell 中计算近似值的生成器、选择器模式
- excel - Excel 以千为单位复制百分比...为什么?
- iterm2 - 更改 cygwin mintty/Mac iTerm/Unix xterm 的前景色和背景色的 ANSI 序列
- javascript - 从 JS 中的两个(或更多)内置对象(Map、EventTarget)继承
- bash - 从 bash 中的 yaml 数组中获取值
- html - HTML:如何在每次单击 html 中的选项卡时刷新页面/文档?