在Python3中剪切音频文件时出现内存错误

2024-10-01 02:33:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用pydub模块从一些有声读物的章节中删去一些介绍/输出音频。所有文件的大小都在9-19MB之间。 它管理一些文件,然后返回MemoryError。我有8BG的内存,所以我想我一定是做了一些非常糟糕的事情才导致了这个。你知道吗

我在其他程序都关闭的情况下运行过,没什么区别。我试着在任务管理器中观察我的内存使用情况。通常在350MB左右,有时峰值在900-1000MB之间,尤其是在每个文件的末尾。你知道吗

from pydub import AudioSegment
import os, eyed3

os.chdir(r'C:\Users\User\Music\audiobooks podcasts\Narnia\Edit Testing')

NarniaList = os.listdir()

for i in NarniaList[:10]:
    print('Ammending ' + i + '...')
    track = AudioSegment.from_mp3(i)
    newcut = track[75000:-59000]
    newtitle = 'New'+i
    newcut.export(newtitle,format="mp3")
    audiofile = eyed3.load(i)
    newfile = eyed3.load(newtitle)
    newfile.tag.artist = audiofile.tag.artist 
    newfile.tag.album = audiofile.tag.album
    newfile.tag.title = audiofile.tag.title
    newfile.tag.save()

它每次至少管理2个文件,最好的是5个。 据我所知,我不会留下以前的文件完成后打开,但我是一个完全的新手,所以我不太确定。非常感谢您的建议。你知道吗


Tags: 文件内存fromimportostag情况track
1条回答
网友
1楼 · 发布于 2024-10-01 02:33:08

代码泄漏内存的一个地方是:

newcut.export(newtitle,format="mp3")

export返回文件句柄。现在,文档中说将AudioSegment对象写入文件–返回输出文件的文件句柄(不过,您不必对它做任何操作)。,这是不正确的,如this bug report中所述。必须关闭文件句柄。你知道吗

目前,在我看来,所有来自export的字节都在泄漏。既然你正在加载mp3,那就太多了-而且你会出现内存错误。你知道吗

如果这不起作用,请执行以下操作:

import tracemalloc
from pydub import AudioSegment
import os, eyed3

tracemalloc.start()

os.chdir(r'C:\Users\User\Music\audiobooks podcasts\Narnia\Edit Testing')

NarniaList = os.listdir()

for i in NarniaList[:2]:
    print('Ammending ' + i + '...')
    track = AudioSegment.from_mp3(i)
    newcut = track[75000:-59000]
    newtitle = 'New'+i
    newcut.export(newtitle,format="mp3")
    audiofile = eyed3.load(i)
    newfile = eyed3.load(newtitle)
    newfile.tag.artist = audiofile.tag.artist 
    newfile.tag.album = audiofile.tag.album
    newfile.tag.title = audiofile.tag.title
    newfile.tag.save()

snapshot = tracemalloc.take_snapshot()
top_stats = snapshot.statistics('lineno')

print("[ Top 10 ]")
for stat in top_stats[:10]:
    print(stat)

这将使您在处理两个音频文件后获得前10名内存消耗者。你知道吗

相关问题 更多 >