2017-08-11 25 views
1

私は大きなpodcast mp3ファイルをpythonとpydubライブラリを使って小さな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、必要なものの50倍を示しています。 – Prune

答えて

1

可能性が高い原因は、使用可能なメモリが不足している可能性が高いことです。あなたはその声明を実行する前に利用可能なメモリ量を知っていますか?障害のある文の直前にシステムコール(osパッケージを参照)を挿入することを検討してください。

+0

こんにちは、お手伝いをしていただきありがとうございます。エラーの原因となるコード行を実行する直前にメモリ使用量を要求したときに出力を示す質問を追加しました。これは正しいようですか? – CodeCupboard

+0

それは私が探していたものです。オブジェクトが100Mbの物理メモリを必要とする可能性はありますか?そんなことはありませんか?私はその問題を2,3回持っていました。 – Prune