gpt4 book ai didi

audio - 使用 SoX 更改音频文件中某个时间范围的音量级别

转载 作者:行者123 更新时间:2023-12-04 13:23:14 64 4
gpt4 key购买 nike

我想使用 SoX 更改音频文件中特定时间范围/片段的音量级别。

现在,我必须:

  • 将原文件修剪3次,得到:音效改变前的部分,中间的部分(我正在改变声级的地方),以及
  • 之后的部分
  • 在它自己的文件
  • 中,对提取的“中间”音频块执行改变声级的效果。
  • 将所有内容重新拼接在一起,考虑到 SoX 推荐的 5ms 渐变/交叉渐变重叠

  • 有没有更好的方法来做到这一点,而不涉及编写脚本来执行上述操作?

    最佳答案

    对于偶然发现这个排名靠前的线程的人,正在寻找一种避开音频文件中间的方法:

    我一直在玩 SoX,我构建的方法使用管道来处理每个部分,而无需创建所有这些临时文件!

    结果是单行解决方案,尽管您需要设置时序等,除非所有文件的淡入淡出时序都相同,否则使用算法生成行可能很有用。

    我很高兴让管道工作,因为我知道这方面对其他人来说很困难。命令行选项可能很难正确。但是我真的不喜欢凌乱的附加文件作为替代。

    通过使用混音功能并使用打击垫定位每个部分,然后对每个部分进行修剪和淡化,我们还可以避免在此处使用“拼接”。我真的不是粉丝。

    一个工作单行示例,在 SoX 14.4.2 Windows 中测试:

    它在 2 秒时衰减(下降)-6dB,在 5 秒时返回到 0dB(使用 0.4 秒的线性衰减):

    sox -m -t wav "|sox -V1 inputfile.wav -t wav - fade t 0 2.2 0.4" -t wav "|sox -V1 inputfile.wav -t wav - trim 1.8 fade t 0.4 3.4 0.4 gain -6 pad 1.8" -t wav "|sox -V1 inputfile.wav -t wav - trim 4.8 fade t 0.4 0 0 pad 4.8" outputfile.wav gain 9.542

    让我们把它分解成几个部分,使其更具可读性:

    第 1 部分 = 全音量,第 2 部分 = 躲避,第 3 部分 = 全音量
    sox -m
    -t wav "|sox -V1 inputfile.wav -t wav - fade t 0 2.2 0.4"
    -t wav "|sox -V1 inputfile.wav -t wav - trim 1.8 fade t 0.4 3.4 0.4 gain -6 pad 1.8"
    -t wav "|sox -V1 inputfile.wav -t wav - trim 4.8 fade t 0.4 0 0 pad 4.8"
    outputfile.wav gain 9.542

    现在,把它分解,非常彻底

    ' -m ' .. 说我们要混音(这会自动降低增益,见最后一个参数)

    ' -t wav ' .. 表示接下来的管道命令将返回一个 WAV(似乎 WAV 头在管道中丢失了)

    然后..第一个管道部分(鸭子前的完整音量)

    ' -V1 ' .. 说忽略警告 - 将有一个关于不知道此特定部分的输出文件长度的警告,因为它正在输出,但此操作不应有其他警告

    然后是输入文件名

    ' -t wav ' .. 强制输出类型

    ' - ' .. 是将返回到 SoX 命令行的管道输出的标准名称

    ' 淡化 t 0 2.2 0.4 ' .. 淡出整个音量部分。 t = 线性。 0 淡入。然后(因为我们希望交叉淡入淡出的中点在 2 秒)我们淡出 2.2 秒,淡入淡出 0.4 秒(淡出参数用于淡入淡出结束时!)

    ' -t wav ' .. 建议下一部分的类型 - 如上所述

    然后..第二个管道部分(鸭嘴部分)

    ' -V1 ' .. 再次,忽略输出长度警告 - 见上文
    然后相同的输入文件名

    ' -t wav ' .. 强制输出类型,如上

    ' - ' .. 对于管道输出,见上文

    ' 修剪 1.8 ' .. 因为这个中间部分将在 2 秒时到达过渡的中间,所以(具有 0.4 秒的交叉淡入淡出)躲避的音频文件将在此之前 0.2 秒开始

    ' 褪色 t 0.4 3.4 0.4 ' .. 淡入躲避部分并再次淡出。所以 0.4 淡入。然后(最复杂的部分)因为下一个交叉淡入淡出将在 5.2 秒结束,我们必须将该数字减去该部分的修剪量,所以 5.2-1.8=3.4(再次这是因为淡出位置处理淡出的结束时间)

    ' 增益-6 ' .. 是我们应该躲避的量,以 dB 为单位

    ' 垫 1.8 ' .. 必须与上面的修剪图相匹配,以便在开始时插入一定量的静音以使其在混合部分时同步

    ' -t wav ' .. 建议下一部分的类型 - 如上所述

    然后..第三个管道部分(返回满级)

    ' -V1 ' .. 再次 - 见上文

    然后相同的输入文件名

    -t wav ' .. 强制输出类型,如上

    - ' .. 对于管道输出,见上文

    修剪 4.8 ' .. 最后一部分将在 5 秒开始,但是(带有 0.4 秒的淡入淡出)音频将在此之前 0.2 秒开始

    ' 褪色 t 0.4 0 0 ' .. 淡入到这个完整的音量部分。没有淡出

    ' 垫 4.8 ' .. 必须与上面的修剪图相匹配,如上所述
    然后输出文件名

    ' 增益 9.542 ' .. 看起来很棘手,但基本上当你“-m”混合 3 个文件时,SoX 将音量减小到 1/3(三分之一)以提供空间。

    我们没有击败它,而是提升到 300%。我们用这个公式得到 9.542 的 dB 量 20*log(3)/log(10)

    如果您将单行复制并粘贴到您可以轻松看到的地方,那么它就没有解释那么可怕了!

    虽然最终 - 我最初担心交叉渐变是否需要是对数的而不是线性的,但在我的情况下,从聆听结果线性肯定给出了我期望的声音。

    您可能想尝试更长的交叉淡入淡出,或者让过渡点早晚发生,但我希望单行给那些认为需要许多临时文件的人带来希望!

    让我知道更多的澄清是否会有所帮助!

    audacity waveform

    关于audio - 使用 SoX 更改音频文件中某个时间范围的音量级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20127095/

    64 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com