pydub получает доступ к частоте дискретизации (Гц) и аудиосигналу из mp3-файла

Только что обнаружил этот интересный пакет Python pydub, который конвертирует любой аудиофайл в mp3, wav и т. д.

Насколько я прочитал его документацию, процесс выглядит следующим образом:

  1. прочитать аудиофайл mp3, используя from_mp3()
  2. создает wav-файл с помощью export().

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


person bninopaul    schedule 14.07.2015    source источник


Ответы (1)


Если вас не интересует фактический аудиоконтент файла, вы можете использовать pydub.utils.mediainfo():

>>> from pydub.utils import mediainfo
>>> info = mediainfo("/path/to/file.mp3")
>>> print info['sample_rate']
44100
>>> print info['channels']
1

Это использует утилиту avprobe avlib и возвращает все виды информации. Предлагаю попробовать :)

Должно быть намного быстрее, чем открывать каждый mp3 с помощью AudioSegment.from_mp3(…)

person Jiaaro    schedule 14.07.2015
comment
Помимо частоты дискретизации и определения, является ли файл монофоническим или стереофоническим, я также хотел получить аудиоконтент в виде массива. Как мне это сделать? - person bninopaul; 15.07.2015
comment
@bninopaul Невозможно получить доступ к аудиоданным без декодирования mp3 — вам придется использовать AudioSegment.from_mp3(…) для получения аудиоданных. Необработанные данные являются атрибутом экземпляра AudioSegment как my_audio_segment._data. - person Jiaaro; 15.07.2015
comment
в моем случае audio._data возвращает длинную строку, состоящую из нулевого символа /x00 - person bninopaul; 15.07.2015
comment
это строка байтов — большинство аудио начинается с большого количества нулей (молчание в начале) — если вам нужен числовой массив, вы можете легко преобразовать его (вот пример, где я сделал это в фильтре эквалайзера: github.com/jiaaro/pydub/blob/master/pydub/effects.py#L200) - person Jiaaro; 16.07.2015