我正在尝试获取一个mp3,并简单地删除静默块。我使用的是pydub.split_on_silence()
,但它返回一个空列表。在我下面的代码中,音频块在前4秒似乎是静默的,有12秒的音频,然后是静默的其余部分。
from pydub import AudioSegment
from pydub.silence import split_on_silence
sound = AudioSegment.from_mp3("audio_files/xxxxxx.mp3")
clip = sound[21*1000:45*1000]
#"graph" the volume in 1 second increments
for x in range(0,int(len(clip)/1000)):
print(x,clip[x*1000:(x+1)*1000].max_dBFS)
chunks = split_on_silence(
clip,
min_silence_len=1000,
silence_thresh=-16,
keep_silence=100
)
print("number of chunks",len(chunks))
print (chunks)
输出:
0 -59.67942035834925
1 -59.67942035834925
2 -60.20599913279624
3 -59.18294868384861
4 -7.294483767470469
5 -9.54772815923718
6 -7.8863408992261785
7 -8.018780602216872
8 -8.086437972291877
9 -9.689721851628853
10 -12.146807891343315
11 -13.187719632532362
12 -14.065443216019279
13 -14.344275171835644
14 -14.668150366783275
15 -10.544064231686791
16 -59.67942035834925
17 -59.9387199016366
18 -58.94496421785445
19 -59.9387199016366
20 -59.42763781218885
21 -59.67942035834925
22 -60.20599913279624
23 -59.67942035834925
number of chunks 0
[]
发布于 2019-04-24 06:55:35
谢谢@ggrelet。我认为解决方案是用平均DBFS (或仅仅是.dBFS)来判断静默,而不是最大dbfs。我相应地更改了代码(显示平均dBFS,将阈值降低到-40),并得到了一个非空的返回。
https://stackoverflow.com/questions/55805350
复制相似问题