gpt4 book ai didi

python - 使用 PyDub 在波形文件的开头和结尾删除静音

转载 作者:行者123 更新时间:2023-12-04 04:54:56 70 4
gpt4 key购买 nike

如何使用 PyDub 从波形文件的开头和结尾删除静音?

我想我应该逐段访问并检查它是否静音(但我无法做到):/

例如我有一个在开头、结尾或两者都有静音的波形文件(如下所示),我想删除文件开头和结尾的静音:

wave file with silence

例如我想导入

sound = AudioSegment.from_wav(inputfile)

为每个声音样本循环以检查它是否无声并标记自波浪开始以来的最后一个无声样本(marker1),
然后在波形结束之前到达最后一个样本(marker2),我可以从两个标记导出新的声音文件
newsound = sound[marker1:marker2]

newsound.export(outputfile, format="wav")

最佳答案

我建议您以至少 10 毫秒的时间段循环,以便更快地完成它(更少的迭代),并且因为单个样本并没有真正的“响度”。

声音是振动,所以至少需要 2 个样本来检测是否真的有任何声音,(但这只会告诉你高频)。

无论如何......这样的事情可以工作:

from pydub import AudioSegment

def detect_leading_silence(sound, silence_threshold=-50.0, chunk_size=10):
'''
sound is a pydub.AudioSegment
silence_threshold in dB
chunk_size in ms

iterate over chunks until you find the first one with sound
'''
trim_ms = 0 # ms

assert chunk_size > 0 # to avoid infinite loop
while sound[trim_ms:trim_ms+chunk_size].dBFS < silence_threshold and trim_ms < len(sound):
trim_ms += chunk_size

return trim_ms

sound = AudioSegment.from_file("/path/to/file.wav", format="wav")

start_trim = detect_leading_silence(sound)
end_trim = detect_leading_silence(sound.reverse())

duration = len(sound)
trimmed_sound = sound[start_trim:duration-end_trim]

关于python - 使用 PyDub 在波形文件的开头和结尾删除静音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29547218/

70 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com