什么时候/为什么split_on_silence()返回一个空列表

时间:2019-04-23 06:18:12

标签: python pydub

我正在尝试播放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
[]

1 个答案:

答案 0 :(得分:0)

感谢@ggrelet。我认为解决方案是,静音是由平均值 dbfs(或只是.dBFS)而不是 max DBFS来判断的。我相应地更改了代码(显示平均dBFS,将阈值降低到-40),并得到非空的返回值。