如何使用PyDub从Wave文件的开头和结尾消除静音?
我想我应该逐段访问并检查它是否保持沉默(但我无法执行此操作):/
例如,我有一个Wave文件,在文件的开头,结尾或两者处均保持静音(如下所示),并且我想在文件的开头和结尾处删除静音:
例如我要导入
sound = AudioSegment.from_wav(inputfile)
循环检查声音的每个样本,以检查是否静音,并标记自波浪开始以来的最后一个沉默样本(标记1),然后在波浪结束之前到达最后一个样本(标记2),我可以从这两个声音文件中导出新的声音文件标记
newsound = sound[marker1:marker2]
newsound.export(outputfile, format="wav")
我建议您以至少10 ms的块为单位进行循环,以使其更快一点(减少迭代),并且还因为单个样本实际上没有“响度”。
声音就是振动,因此至少要采样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]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句