首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FFmpeg :如何在音频文件中创建动态音量更改?

FFmpeg :如何在音频文件中创建动态音量更改?
EN

Stack Overflow用户
提问于 2018-10-14 06:31:02
回答 1查看 1.2K关注 0票数 4

我正在做一个项目,在这个项目中,我需要动态地改变音频文件的音量。

比方说,我有一个名为xyz.mp3的音频文件(20秒音频文件)。我需要把它的音量设为:

代码语言:javascript
复制
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       

现在,我知道要更改音频中特定时间的音量,可以使用以下命令:

代码语言:javascript
复制
ffmpeg -i in.mp3 -af volume=20:enable='between(t,8,12)' out.mp3

但是当我使用卷效应时,它不会动态地改变音量。它只是直接改变音量从100到20,而不是改变它像褪色。

当我使用afade命令时,比如:

代码语言:javascript
复制
ffmpeg -i in.mp3 -af afade=t=in:ss=4:d=8,afade=t=out:st=12:d=16 out.mp3

代码语言:javascript
复制
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 :

下面是我使用的代码:

代码语言:javascript
复制
"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,它就可以解决这个问题。谢谢你吉安先生。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-14 07:10:40

使用

代码语言:javascript
复制
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
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52800083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档