2017-08-11 90 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