#r #audio #wav
#r #Аудио #wav
Вопрос:
Я хотел бы разделить 8 ГБ (продолжительностью 24 часа) Файлы WAVE на файлы меньшего размера (продолжительностью 1 час). У меня есть около 800 больших файлов для разделения, поэтому я не мог сделать это вручную.
Я пытаюсь использовать пакеты: tuneR, seewave и phonTools. Ниже приведен фрагмент моего скрипта на R:
example1=readWave("example.wav", from=0, to=1, units= "hours")
savewav(example1,f=48000)
example2=readWave("example.wav", from=22, to=23, units= "hours")
savewav(example2,f=48000)
Когда я запускал пример 1, все было правильно. Я получил ВОЛНОВОЙ файл продолжительностью один час.
Проблема заключается в разделении файлов объемом 8 ГБ в последующие часы, как в примере 2. Я получаю комментарий в консоли: readBin(con, int, n = N, size = байты, signed = (байты! = 1), ‘: недопустимый аргумент ‘n’.
Вероятно, у R проблема с размером этого файла, который слишком велик, потому что WAVE ограничен 4 ГБ. Я уверен, что этот файл включает в себя все 24 часа записи, потому что я меняю файл с WAVE на FLACK в аудиопрограмме Audacity, и все данные были там.
Есть какое-либо другое решение для размещения такого большого файла в R?
Ответ №1:
Используйте ffmpeg:
ffmpeg -i example.wav -f segment -segment_time 3600 -c copy out%03d.wav
Ссылка: https://www.ffmpeg.org/ffmpeg-formats.html#segment_002c-stream_005fsegment_002c-ssegment
Комментарии:
1. Я думаю, что это тоже был бы правильный путь.
ffmpeg
гораздо лучше подходит для такого рода задач. Если OP хочет использовать его из R, они всегда могут использоватьsystem()
. Они также могут использоватьсяsox
следующим образом:sox example.wav out.wav trim 0 3600 : newfile : restart
. 12. Спасибо. Когда я использовал ваш код, программа создала только 12 файлов (менее 4 ГБ). Но когда я добавляю дополнительную информацию в код, все было правильно. Я использую следующий код:
D:Desktopffmpegbin>ffmpeg -f s16le -ar 48000 -i example.wav -f segment -segment_time 3600 -c copy outd.wav
.