Sox: объединение нескольких аудиофайлов без разрыва между ними

я объединяю несколько (максимум 25) аудиофайлов с помощью Сокс С

sox first.mp3 second.mp3 third.mp3 result.mp3

который делает то, что он должен; объединяет данные файлы в один файл. Но, к сожалению, есть небольшой промежуток времени между этими файлами в результате.mp3. Есть ли способ устранить этот пробел?

Я создаю первым.mp3, второй.mp3 и так далее, прежде чем объединить их путем слияния нескольких аудио (той же длины / формата / скорости):

sox -m drums.mp3 bass.mp3 guitar.mp3 first.mp3

как я могу проверить и заверить, что во всех этих файлах нет временного промежутка? (объединены и объединены)

мне нужно добиться бесшовного воспроизведения всех объединенных файлов (если играть в них в браузере один за другим, он работает нормально).

Спасибо за любую помощь.

EDIT:

точный пример (без реальных имен файлов) команды, которую я запускаю, теперь:

sox "|sox -m file1.mp3 file2.mp3 file3.mp3 file4.mp3 -p" "|sox -m file1.mp3 file6.mp3 file7.mp3 -p" "|sox -m file5.mp3 file6.mp3 file4.mp3 -p" "|sox -m file0.mp3 file2.mp3 file9.mp3 -p" "|sox -m file1.mp3 file15.mp3 file4.mp3 -p" result.mp3

это объединяет файлы и передает их непосредственно в команду конкатенации. Полученный mp3 (результат.mp3) имеет очень небольшую задержку между объединенными файлами. Любые идеи действительно оценены.

3 ответов


Это мое предположение на ваш вопрос:

  • sox не добавляет промежуток времени во время конкатенации,
  • однако он добавляет промежуток времени в других операциях, например, если вы делаете преобразование перед конкатенацией.

чтобы узнать, что происходит, я предлагаю вам проверять все длительности ваших файлов каждый раз (вы можете использовать soxi, например), чтобы увидеть, что происходит.

если он не работает (промежуток времени добавляется во время конкатенации), пусть мне, пожалуйста, сделайте еще одну догадку:

  • Sox добавить промежуток времени, потому что ваши образцы в начале или в конце файла не близки к нулю.

чтобы решить эту проблему,вы можете использовать очень короткое затухание в исчезающих файлах.

кроме того, чтобы заставить sox выводить файлы с четко определенной длиной, вы можете использовать параметр trim следующим образом:

sox filein.mp3 trim 0 duration fileout.mp3

лучший, хотя и наименее полезный способ сделать это-не использовать MP3-файлы в качестве исходных файлов. Файлы WAV, FLAC или M4A не имеют этой проблемы.

MP3s не состоят из образцов с фиксированной скоростью, поэтому обрезка участка произвольной длины не будет работать так, как вы ожидаете. Если кодировщик не был умным (например, хромой), часто будет разрыв в начале или конце Аудио MP3-файла. Я сделал тест с образцом длиной 0.98 s (с точно 73½ кадрами CDDA и многими MP3 шифраторы используют рамки для минимальных длин образца). Затем я закодировал образец с помощью трех разных MP3-кодеров (lame, sox и ancient блеск), затем декодировал эти файлы с помощью трех декодеров (lame, sox и madplay). Вот как длины выборки сравниваются с оригиналом:

 Enc.→Dec.          Length     Samples  CDDA Frames
 -----------------  ---------  -------  -----------
 shine→lame         0.95"      42095    71.5901
 shine→madplay      0.97"      42624    72.4898
 shine→sox          0.97"      42624    72.4898
 lame→lame          0.98"      43218    73.5000
*Original           0.98"      43218    73.5000
 sox→sox            0.99"      43776    74.4490
 sox→lame           1.01"      44399    75.5085
 lame→madplay       1.02"      44928    76.4082
 lame→sox           1.02"      44928    76.4082
 sox→madplay        1.02"      44928    76.4082

только файл, закодированный и декодированный lame, оказался одинаковой длины (в основном потому, что lame вставляет тег длины для исправления этих слишком коротких образцов и знает, как его декодировать). Все закодированное sox заканчивалось крошечным пробелом, независимо от того, какой декодер я использовал. Таким образом, присоединение к файлам приведет к крошечным щелчкам.

Ваш браузер, скорее всего, смешивания и перекрытия исходных файлов очень немного, так что вы не слышите щелчки. воспроизведение без пауз трудно сделать правильно.


сначала вы должны действительно проверить, если в начале и конце файлов нет паузы, я не знаю, если Сокс могут сделать это, но вам нужно проверить энергию(РМС дБ) начала и окончания звуковых сигналов и вырезать начало и конец тишине, чтобы соединить аудио файлы без зазоров необходимо применить оконную функцию в ваш сигнал работает как fadein/fadeout, и потом плавно начало одной с концом другой.

sox обеспечивают