9

我正在使用该sox工具,我想合并两个音频文件,比如说long.oggshort.ogg输出一个文件output.ogg。这很容易使用$ sox -m long.ogg short.ogg output.ogg

问题是,我希望在 n 秒后播放(而short.ogg应该从头开始)。为此,我发现了效果。但我不明白只延迟输入文件的语法,而不是那个。long.oggshort.ogglong.ogg

我找到了一种(肮脏的)这样做的方式(n = 6):

$ sox short.ogg delayed.ogg pad 6
$ sox -m long.ogg delayed.ogg output.ogg

我不想创建中间文件。在此先感谢您的帮助。

4

5 回答 5

13

您应该能够执行以下操作:

sox short.ogg -p pad 0 6|sox - long.ogg output.ogg

-psox 的选项用于管道 - 基本上,它告诉 sox 使用 stdout 作为输出。用作第二个sox-的输入实际上是说输入是标准输入(恰好是前一个 sox 的标准输出,因为我们正在使用 管道|)。pad 0 6告诉 pad 0 秒开始和 6 秒结束。

希望这可以帮助。

于 2011-04-29T03:50:31.443 回答
11

感谢 icyrock,我设法找到了解决方案。我在用着:

$ sox short.ogg -p pad 6 0 | sox - -m long.ogg output.ogg

对于多轨(奥兰多的学分):

$ sox starts-last.mp3 -p pad 2 0 | sox - -m starts-second.mp3 -p pad 2 0 | sox - -m starts-first.mp3 combined.mp3
于 2011-05-04T21:57:43.263 回答
2

这是另一个受益于使用双引号的解决方案。它使命令更具可读性并且非常易于扩展:

sox −−combine sequence  "|sox input/odin.wav -p pad 0 1" "|sox input/dva.wav -p pad 0 1" "|sox input/tri.wav -p pad 0 1" output/test.wav

这将连接所有三个文件,每个文件后暂停 1 秒(odin、silence、dva、silence、tri、silence。)

应用于原始帖子,我们会得到:

sox −−combine sequence  "|sox long.ogg -p pad 0 6" "|sox short.ogg -p pad 0 1" newfile.ogg

(在 Windows 上的 SoX 14.4.1 上测试正常。)

我几乎没有看到任何使用双引号的 SoX 示例,所以我希望这对某人有所帮助!

于 2014-04-01T07:15:19.217 回答
0

因为我还不允许发表评论,所以我只想说我喜欢 Fabien 的回答,因为它也可以与“NULL”声音文件一起使用:例如,

sox --combine concatenate "|sox -n -p synth 1 sine 300" "|sox -n -p synth 1 sine 400" useful.wav

将写入 1 秒 300 Hz 的正弦音,然后写入 1 秒 400 Hz 的正弦音,并将其写入文件“useful.wav”。

sox -n -p synth 1 sine 300 | sox --combine concatenate - farts.wav synth 1 sine 400

只会将 1 秒的 400 Hz 正弦波写入文件“farts.wav”。该文件缺少 300 Hz 的第一个正弦波。

于 2015-04-24T18:30:08.277 回答
0

也遇到了延迟命令。

您可以执行以下操作: sox.exe -m short.ogg long.ogg delay 6

这将合并两个文件,short.ogg 将在 6 秒后开始进入 long.ogg

于 2015-03-23T20:47:48.500 回答