2017-08-11 57 views
1

我想使用python和pydub库将大型podcasts mp3文件分割成更小的5分钟块。这是我的代码:pydub - memoryerror

folder = r"C:\temp" 
filename = r"p967.mp3" 

from pydub import AudioSegment 

sound = AudioSegment.from_mp3(folder + "\\" + filename) 

这适用于小文件,但对于我感兴趣的大型播客100MB +。这会返回以下错误。

Traceback (most recent call last):  
    File "C:\temp\mp3split.py", line 6, in <module> 
sound = AudioSegment.from_mp3(folder + "\\" + filename) 
    File "C:\Python27\lib\site-packages\pydub\audio_segment.py", line 522, in from_mp3 
return cls.from_file(file, 'mp3', parameters) 
    File "C:\Python27\lib\site-packages\pydub\audio_segment.py", line 511, in from_file 
obj = cls._from_safe_wav(output) 
    File "C:\Python27\lib\site-packages\pydub\audio_segment.py", line 544, in _from_safe_wav 
return cls(data=file) 
    File "C:\Python27\lib\site-packages\pydub\audio_segment.py", line 146, in __init__ 
data = data if isinstance(data, (basestring, bytes)) else data.read() 
MemoryError 

这是图书馆的限制吗?我应该使用另一种方法来实现这一目标吗?


如果我添加下面的代码来检查运行时的内存状态。

import psutil 
print psutil.virtual_memory() 

此打印:

svmem(total=8476975104L, available=5342715904L, percent=37.0 used=3134259200L, free=5342715904L) 

这表明,我认为有足够的内存在操作的开始,但我很高兴被证明是错误的。

+0

感谢您的更新。对于其他人,'svmem'报告可用的虚拟内存。这显示大约5Gb可用,50x需要。 – Prune

回答

1

是的,最可能的原因是您已经耗尽可用内存。在执行该语句之前,你知道你有多少内存吗?考虑在失败语句之前插入一个系统调用(请参阅os包)。

+0

嗨,感谢您花时间提供一些帮助。当我在运行导致错误的代码行之前请求内存使用时,我已经添加了更多的问题以显示输出。这看起来是正确的吗? – CodeCupboard

+0

这就是我正在寻找的。物体是否有可能需要100Mb的*物理内存,而你没有那么多?我有这个问题几次。 – Prune