如何使用pydub在静音结束时拆分音频文件而不删除静音?

Posted

技术标签:

【中文标题】如何使用pydub在静音结束时拆分音频文件而不删除静音?【英文标题】:How do I split an audio file at the end of a silence, without deleting silence, using pydub? 【发布时间】:2016-05-16 20:57:19 【问题描述】:

Python 初学者寻求帮助。

我正在使用 pydub 的 silence 模块来拆分和导出音频文件的块。我正在使用对这个问题的顶部回复中找到的方法:

Using pyDub to chop up a long audio file

chunks = split_on_silence(sound, 
    # length of silence in ms
    min_silence_len=325,

    # consider it silent if quieter than -60 dBFS
    silence_thresh=-60
)

for i, chunk in enumerate(chunks):
    chunk.export(os.path.join(full_path, transcript_filename + "0.wav".format("%02d" % i)), format="wav")

不过,现在,沉默不包含在区块中。我希望他们留在最后。我假设我必须对 pydub.silence 函数进行修改,但我不知道需要进行哪些更改。现在是 split_on_silence:

def split_on_silence(audio_segment, min_silence_len=1000, silence_thresh=-16, keep_silence=100):

    """
    audio_segment - original pydub.Audiosegment() object
    min_silence_len - (in ms) minimum length of a silence to be used for a split. default: 1000ms
    silence_thresh - (in dBFS) anything quieter than this will be considered silence. default: -16dBFS
    keep_silence - (in ms) amount of silence to leave at the beginning and end of the chunks. Keeps the sound from sounding like it is abruptly cut off. (default: 100ms)
    """

    not_silence_ranges = detect_nonsilent(audio_segment, min_silence_len, silence_thresh)

    chunks = []
    for start_i, end_i in not_silence_ranges:
        start_i = max(0, start_i - keep_silence)
        end_i += keep_silence

        chunks.append(audio_segment[start_i:end_i])

感谢您的帮助。

~埃里克。

【问题讨论】:

【参考方案1】:

您可能会发现pydub.silence.detect_silence() function 很有用。它返回检测到静音的范围列表(它在静音功能拆分中使用)

还有 pydub.silence.detect_nonsilent() 以防万一

【讨论】:

以上是关于如何使用pydub在静音结束时拆分音频文件而不删除静音?的主要内容,如果未能解决你的问题,请参考以下文章

在字级边界处分割音频信号

如何在有静音的地方批量拆分音频文件?

由 PyDub AudioSegment.split_on_silence() 产生的 .WAV 音频在使用 wave.open 读取时没有 RIFF ID

Python,pydub分割音频文件

如何使用 libsndfile 在音频文件中打印静音?

pydub AudioSegment.export 正在锁定 smb 共享上的文件。无法删除该文件