我正在使用sox
工具,我想合并两个音频文件,让我们说long.ogg
和short.ogg
输出一个文件output.ogg
。这是非常容易使用$ sox -m long.ogg short.ogg output.ogg
。
事情是,我希望short.ogg
在n秒后播放(而long.ogg
应该从一开始就开始)。为此,我发现了pad效果。但是我不理解语法,只延迟short.ogg
输入文件,而不是long.ogg
输入文件。
我发现了一个(肮脏的)方法来做这件事(n=6):
$ sox short.ogg delayed.ogg pad 6
$ sox -m long.ogg delayed.ogg output.ogg
我不希望创建中间文件。谢谢你的帮助。
您应该能够做如下操作:
sox short.ogg -p pad 0 6|sox - long.ogg output.ogg
sox的 -p
选项用于管道—基本上,它告诉sox使用stdout作为输出。使用-
作为第二个sox的输入实际上是说输入是标准输入(它恰好是前一个sox的标准输出,因为我们正在使用|
)。pad 0 6
告诉pad开始0秒,结束6秒。
感谢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
下面是得益于双引号的另一个解决方案。它使命令更具可读性,并且非常容易扩展:
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
这将连接所有三个文件,并在每个文件(odin、silence、dva、silence、tri、silence.)之后暂停1秒
应用于原始帖子,我们将得到:
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的例子使用双引号,所以我希望这有助于别人!
因为我还不允许评论,我只想说我喜欢Fabien的回答,因为它也可以与"NULL"声音文件一起使用:例如,
sox --combine concatenate "|sox -n -p synth 1 sine 300" "|sox -n -p synth 1 sine 400" useful.wav
将在300 Hz下写入1秒正弦音,然后在400 Hz下写入1秒正弦音,并将其写入文件"useful.wav"。
sox -n -p synth 1 sine 300 | sox --combine concatenate - farts.wav synth 1 sine 400
将只写入1秒的正弦波在400赫兹的文件"屁。wav"。文件缺少300 Hz的第一个正弦波
运行跨延迟命令
你可以这样做:Sox.exe -m short。ogg长。Ogg delay 6
这将合并两个文件和短。Ogg将开始6秒进入long.ogg