Может ли Pydub не привести к ошибке памяти, когда аудио-сегмент большой файл?

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

sound = AudioSegment.from_mp3("vanilla_sky.mp3")
File "D:\Python27\lib\site-packages\pydub\audio_segment.py", line 423, in from_mp3
return cls.from_file(file, 'mp3')
File "D:\Python27\lib\site-packages\pydub\audio_segment.py", line 412, in from_file
obj = cls._from_safe_wav(output)
File "D:\Python27\lib\site-packages\pydub\audio_segment.py", line 445, in _from_safe_wav
return cls(data=file)
File "D:\Python27\lib\site-packages\pydub\audio_segment.py", line 130, in __init__
data = data if isinstance(data, basestring) else data.read()
MemoryError

1 ответ

Короче нет - это пидуб AudioSegment представляет само аудио (и содержит аудио данные).

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

обходные

Если вы просто хотите преобразовать звук, вы можете включить ведение журнала и скопировать конкретную команду ffmpeg, которая вам необходима для преобразования. Выходные данные журнала покажут вызов подпроцесса, который вы можете сразу использовать в коде Python:

>>> import logging

>>> l = logging.getLogger("pydub.converter")
>>> l.setLevel(logging.DEBUG)
>>> l.addHandler(logging.StreamHandler())

>>> AudioSegment.from_file("./vanilla_sky.mp3")
subprocess.call(['ffmpeg', '-y', '-i', '/var/folders/71/42k8g72x4pq09tfp920d033r0000gn/T/tmpeZTgMy', '-vn', '-f', 'wav', '/var/folders/71/42k8g72x4pq09tfp920d033r0000gn/T/tmpK5aLcZ'])

(первый /var/… файл является копией входного файла, второй файл является выходным файлом, который загружается в AudioSegment после конвертации)

Другие вопросы по тегам