Как добавить кучу WAV-файлов, сохранив (не добавляя ноль) числовой порядок?


7

У меня есть много (7500) WAV-файлов (названных по их номерам), которые я хотел бы объединить в один. Я думаю, что это должно быть сделано с помощью цикла bash, потому что при использовании глобирования некоторые файлы были бы в неправильном порядке (например, 1111 до 2).

Какой лучший способ сделать это под Linux?

Ответы:


13

Если все файлы имеют одинаковые параметры, такие как частота дискретизации и количество каналов, вы все равно не можете просто их объединить. Вы должны удалить WAV-заголовок.

Возможно, проще всего использовать утилиту для манипулирования аудиофайлами, например sox, которая содержит метод для объединения файлов. На самом деле, он делает это по умолчанию. Например, чтобы объединить три WAV-файла в один длинный:

$ sox short1.wav short2.wav short3.wav long.wav

Цикл не будет располагать файлы в нужном вам порядке. Вам нужно отсортировать имена, но обработать их численно. sort -nсделаю это.

Таким образом:

$ sox $(ls *.wav | sort -n) out.wav

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

$ ls *.wav | sort -n > script

Тогда у нас есть файл сценария, который выглядит так:

1.wav
2.wav
...
3999.wav
4000.wav
...
file7500.wav

Мы редактируем это, чтобы сделать несколько командных строк:

# catenate about half the files to temp1.wav   
sox \
1.wav \
2.wav \
... \
3999.wav \
temp1.wav

# catenate the remainder to temp2.wav  
sox \
4000.wav \
... \
7500.wav \
temp2.wav

# catenate the two halves
sox temp1.wav temp2.wav out.wav ; rm temp1.wav temp2.wav

В качестве первого шага редактирования списка файлов вы можете использовать viкоманду :%s/.*/& \\/для добавления обратной косой черты после каждой строки.


Спасибо, это, кажется, правильный путь, но кажется, что sox не берет больше, чем 6479.wav файлов (выходит с «sox FAIL форматами: не могу открыть входной файл` 6479.wav ': слишком много открытых файлов » ) :-(
Neula

Ах, в этом случае мы можем просто сломать операцию. Например, мы можем разделить список файлов на две половины, объединить каждую половину и затем объединить половинки. Я бы захватил вывод ls *.wav | sort -nв файл, превратить список в soxкомандные строки и затем получить его.
Каз

1
Сохранение всех открытых файлов одновременно выглядит как ошибка / недостаток в sox.
Каз

В итоге выяснилось, что sox не принимает более 348 файлов, поэтому мне придется делать это 21 раз. При объединении первых файлов я заметил, что они кажутся поврежденными, поэтому объединение их мне не помогает. В любом случае, вы решили проблему! спасибо
Neula

Вы имеете в виду оригинальные файлы повреждены? Это очень плохо.
Каз
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.