【发布时间】:2012-03-28 20:28:41
【问题描述】:
使用 Sox,我如何将音频文件缩短 5 秒,从末尾开始修剪?
例如,这是从头开始修剪文件的方法:
sox input output trim 5000
这是在结尾添加 5 秒静音的方法:
sox input output pad 0 5000
【问题讨论】:
使用 Sox,我如何将音频文件缩短 5 秒,从末尾开始修剪?
例如,这是从头开始修剪文件的方法:
sox input output trim 5000
这是在结尾添加 5 秒静音的方法:
sox input output pad 0 5000
【问题讨论】:
语法是sox input output trim <start> <duration>
例如sox input.wav output.wav trim 0 00:35 会将前 35 秒输出到 output.wav。
(使用sox input -n stat可以知道长度是多少)
来自SoX documentation 上的trim 命令:
从音频中截取部分内容。可以给出任意数量的位置;在到达第一个 位置 之前,音频不会发送到输出。然后效果会在每个位置的复制和丢弃音频之间交替。对第一个 position 参数使用 0 值允许从音频的开头进行复制。
例如,
sox infile outfile trim 0 10将复制前十秒,而
play infile trim 12:34 =15:00 -2:00和
play infile trim 12:34 2:26 -2:00将从音频的 12 分 34 秒开始播放到音频的 15 分钟(即 2 分 26 秒),然后在音频结束前两分钟继续播放。
根据dpwe's comment,position 值被解释为相对于前一个 position,除非它们以 = 开头(在这种情况下,它们是相对于文件的开头)或-(在这种情况下,它们相对于文件的结尾)。
因此,在结尾处修剪 5 秒将是 sox input output trim 0 -5
【讨论】:
sox input output trim <start> <duration>,或sox input output trim <start> =<end>。完整的trim 语法接受任意数量的<position> 参数对,默认情况下它们被解释为相对于前面的位置,或者如果前面有'=',则相对于文件的开头,或者相对于文件的结尾文件(如果已知)如果前面有“-”。只输出每对位置之间的声音。
上面的命令是错误的,它只会让你持续 5 秒。你实际上需要使用:
sox input output reverse trim 5 reverse
这将从文件末尾开始 5 秒。
【讨论】:
sox input output trim 0 -5
我是 SoX 的新手,但我注意到此页面经常出现在音频修剪的搜索结果中,并且会被许多尝试做类似事情的人看到。
因此,我想提供我个人认为最好的解决方案。
我在John Smith Optional 提到的文件末尾遇到了同样的“点击”。这表明短暂的淡出可以在音频结束时消除任何故障伪影,并且确实可以正常工作。接受淡出位置参数的负值表示音频结束前的时间是关键。
所以我认为没有比这更好的方法来实现 OP 的目标了:
sox full_length.wav trimmed.wav fade 0 -5 0.01
参数 1 为“0”,因此没有淡入。 参数2去掉最后5秒 参数 3 使用 10ms 淡入淡出
【讨论】:
fade 的停止时间提供负值在 SoX v14.4.1 上对我不起作用。