一种解决方案是(基于此 Digital Cardboard 博客文章)像这样调用 sox:
sox in.wav out.wav silence 1 0.1 0.1% reverse silence 1 0.1 0.1% reverse
(Here is a version with placehoders X and Y instead of specific values to
explain below what is happening exactly:
sox in.wav out.wav silence 1 X Y reverse silence 1 X Y reverse
)
Run Code Online (Sandbox Code Playgroud)
X是声音被 sox 解释为非静音的最短持续时间(以秒为单位)。例如,在 0.15 秒长的音频开始处可能会发出响亮的咔嗒声。如果我们设置0.2为X,那么这种响亮而短暂的点击将被解释为静音并将被删除。如果X我们设置了for 0.1,那么点击将被 sox 解释为非静音部分的开始,这意味着点击之前的所有内容都将被删除,但点击本身不会被删除。
另请注意,如果持续时间是整数,则应使用尾随零,因此1.0应使用尾随零来1避免意外行为。
Y定义响度阈值。它下面的一切都会被解释为沉默,无论多长或多短。因此,开始时一些不太响亮的长隆隆声可能会低于阈值,因此被解释为静音,因此不会被删除。如果其持续时间足够长,则任何声音足以高于阈值的声音都将被解释为非静音的开始(请参阅X)。
请注意,
digitalcardboard规定应使用最小值来0.1%代替0。
1只是指定仅在开始时删除静音。为了在最后消除静音,我们使用相同的方法,但首先反转音频。为什么这种方法对于修剪末端是正确的应该在下面变得显而易见,我在下面进一步分析其他答案的解决方案的作用。
简单的答案是:sox 不支持这一点。
但我们可以尝试通过修剪静音然后在开始时添加固定量的静音来解决此问题。这可以通过以下方式完成:
sox in.wav out.wav silence 1 0.1 0.1% reverse silence 1 0.1 0.1% reverse pad X 0
Run Code Online (Sandbox Code Playgroud)
X是我们要预先添加的静音的持续时间(以秒为单位)。
0在此位置意味着末尾不应添加填充。
当然,这与保留原始静音的一段持续时间(如果存在)不同,因为如果输入在开始时也没有任何静音,那么这也将允许结果文件在开始时没有任何静音。尽管如此,修剪+填充是我能想到的最好的办法。
到目前为止,这里的所有答案都无法解决该问题。OP想要消除开头和结尾的沉默。对于感兴趣的人来说,以下是以前的解决方案所做的事情:
哦,所有这些答案都没有提供解决方案来按照OP的要求在开始时保持一些沉默。
| 归档时间: |
|
| 查看次数: |
2250 次 |
| 最近记录: |