1

Python と pydub ライブラリを使用して、大きなポッドキャスト mp3 ファイルを小さな 5 分のチャンクに分割しようとしています。これは私のコードです:

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

from pydub import AudioSegment

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

これは小さなファイルでは問題なく機能しますが、大きなポッドキャストの場合は 100 MB 以上に関心があります。これにより、次のエラーが返されます。

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)

これは、操作の開始時に十分なメモリがあることを示唆していますが、間違っていることが証明されてうれしいです.

4

1 に答える 1

2

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

于 2017-08-11T22:30:41.867 に答える