Может ли 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
после конвертации)