remove silence at the beginning and at the end of wave files with PyDub

人走茶凉 提交于 2019-12-31 10:03:19

问题


How can I remove the silence from the beginning and the end of wave files with PyDub?

I guess I should access segment by segment and check whether it's silent or not (but I'm not able to do it) :/

e.g. I have a wave file with silence at the beginning, end, or both (like below) and I want to remove the silence at the beginning and at the end of the file:

e.g. I want to import it

sound = AudioSegment.from_wav(inputfile)

cycle for every sample of sound to check whether it's silent and mark the last silent sample since when the waves starts (marker1), then get to the last sample before the wave ends (marker2) and I can export the new sound file from the two markers

newsound = sound[marker1:marker2]

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

回答1:


I would advise that you cycle in chunks of at least 10 ms in order to do it a little more quickly (less iterations) and also because individual samples don't really have a "loudness".

Sound is vibration, so at a minimum it would take 2 samples to detect whether there was actually any sound, (but that would only tell you about high frequency).

Anyway… something like this could work:

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]


来源:https://stackoverflow.com/questions/29547218/remove-silence-at-the-beginning-and-at-the-end-of-wave-files-with-pydub

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!