2015-03-12 1 views
2

Я пытаюсь выполнить анализ звука в файле на Python, и у меня есть звуковой файл из шоу с высоким разрешением и очень большой (2,39 ГБ). Тем не менее, всякий раз, когда я пытаюсь открыть это с помощью модуля волновой, я получаю следующее сообщение об ошибке:Файл большой волны, который не читается в Python

wave.Error: unknown format: 65534 

Я получил этот файл, путем преобразования ts-файл в файл .wav. Я использовал один и тот же метод в стандартном представлении, и он работал отлично. Я могу сделать некоторый анализ, используя

data = np.memmap(audioclip,dtype='h',mode='r') 

однако, это не получить точные результаты, так как он считает, что AudioClip 3 часа долго, когда это только один час долго. Любая помощь будет оценена по достоинству, у меня есть аналогичные проблемы с различными кодами ошибок, однако они не очень помогают этой проблеме. Спасибо огромное!

+0

инструмент командной строки: avprobe yourbigfile.wav, который поставляется в комплекте с avconv частью libav, может выплевывать основную информацию, такую ​​как Duration на медиафайлах ... что она говорит в вашем файле? ... ffprobe является альтернативой avprobe –

ответ

5

Отказ от ответственности: Я действительно не знаю много о питоне.

Я гугл wave.py и нашел следующую ссылку: http://www.opensource.apple.com/source/python/python-3/python/Lib/wave.py

Если посмотреть на функцию с именем _read_fmt_chunk вы увидите источник сообщения об ошибке. Короче говоря, волновой модуль поддерживает только WAVE_FORMAT_PCM. Формат 65534 - это формат под названием WAVE_FORMAT_EXTENSIBLE, определенный Microsoft и используемый для многоканальных файлов волн. Это довольно необычно.

Я думаю, что у вас есть несколько вариантов:

  1. найти новый способ преобразования файла, который не производит WAVE_FORMAT_EXTENSIBLE
  2. Изменить источник для wave.py поддержки WAVE_FORMAT_EXTENSIBLE - предполагая SubFormat поля является PCM или IEEE_FLOAT, что не было бы большой проблемой. С этой точки зрения он просто увеличивает размер заголовка. Если это еще один SubFormat, вам нужно будет запустить соответствующий декодер, прежде чем вы сможете даже добраться до PCM.
  3. Используйте другой инструмент для преобразования файла .wav в тот, который не является. sox может справиться с этим.

Что касается второй части вашего вопроса. Из вашего вопроса неясно, как вы определяете продолжительность файла. Но если вы делаете неверные предположения о количестве каналов, которые могут отбросить вас.

+0

Спасибо! В итоге я просто использовал FFMpeg для преобразования 5-канального файла в 2-канальный. –