Sox: объединить два аудиофайла с пэдом

я использую sox инструмент, и я хотел бы объединить два аудиофайла скажем long.ogg и short.ogg для вывода файла output.ogg. Это очень легко использовать $ sox -m long.ogg short.ogg output.ogg.

всего, хотелось бы short.ogg на играется через n секунд (while long.ogg следует начинать с самого начала). Для этого я нашел pad эффект. Но я не понимаю синтаксиса, чтобы задерживать только short.ogg входной файл, а не long.ogg один.

я нашел (грязный) способ сделать это (с N=6):

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

Я бы не хотел создавать промежуточный файл. Заранее спасибо за вашу помощь.

5 ответов


вы должны быть в состоянии сделать что-то вроде:

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

-p опция для sox используется для трубопроводов-в основном, она говорит sox использовать stdout в качестве выхода. Используя - поскольку вход во второй sox фактически говорит, что вход является stdin (который, случается, является stdout предыдущего 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

это объединит все три файла с 1-секундной паузой после каждого (один, тишина, два, тишина, три, тишина.)

применительно к исходному сообщению мы получим:

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

(протестировано OK на SoX 14.4.1 в Windows.)

я почти не видел примера SoX, использующего двойные кавычки, поэтому я надеюсь, что это помогает кому-то!


также наткнулся на команду delay.

вы можете сделать следующее: закон SOX.ехе -м коротким.Огг долго.ogg задержка 6

это объединит два файла и короткие.ogg начнет 6 секунд в длину.ogg


потому что мне пока не разрешено комментировать, я просто хотел бы сказать, что мне нравится ответ Фабьена, потому что его также можно использовать с "нулевым" звуковым файлом: например,

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

запишет 1 секунду синусоидального тона при 300 Гц, затем 1 секунду синусоидального тона при 400 Гц и запишет его в файл "полезно.в формате WAV".

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

будет записывать только 1 секунду синусоидальной волны при 400 Гц в файл " пукает.в формате WAV". В файле отсутствует первая синусоидальная волна при 300 Гц.