使用python中pydub批量去除mp3中的静音段

给儿子听的英文音频中有大量的静音段,效率很低。刚开始找个剪辑软件goldwave一个一个剪,后来发现太费劲,就想用程序实现。python的优势是有大量的开源库可用,于是用了两三天时间,了解了一下音频处理库,利用了成熟的库pydub中的函数,基本实现了想要的功能。

1.环境准备

主要需要一个函数库pydub,这个比较好安装,用代码:

pip install pydub

就可以安装。

另一个是需要安装ffmpeg,具体如下链接。

ffmpeg的安装

安装完成后需要配置ffmpeg的环境变量,上面的链接也有提到。安装完ffmpeg后,就不用管了,他负责打开MP3文件。

2.代码

import os
from pydub import AudioSegment
from pydub.silence import split_on_silence
def remove_silence(path1,path2):
    for root, dirs, files in os.walk(path1):
        for name in files:
            xx(os.path.join(root, name),name,path2)    

def xx(file1,name,path2):
    sound = AudioSegment.from_mp3(file1)       
    chunks = split_on_silence(sound,
        # must be silent for at least half a second,沉默半秒
        min_silence_len=600,     
        # consider it silent if quieter than -16 dBFS        
        silence_thresh=-60,
        keep_silence=400     
    )
    sum=sound[:1]    
    for i, chunk in enumerate(chunks):        
        sum=sum+chunk        
    sum.export(os.path.join(path2, name), format="mp3")
    print(name+"  已完成。") 
    
remove_silence("C:\\MyFiles\\test\\3\\","C:\\MyFiles\\test\\2\\")

3.关于split_on_silence函数

上面代码段主要到的函数就是split_on_silence函数,下面把它的主要参数解释如下:

split_on_silence(sound,       
        min_silence_len=600,                  
        silence_thresh=-60,
        keep_silence=400     
    )

sound为声音文件。

min_silence_len=600,大于600毫秒的静音段则被认为是静音段,这个值如果设置过小,剪出来的声音会有卡顿感,设置在500秒左右是比较合适的。

silence_thresh=-60,这个值是声音多小才被认为是静音段。由于我的音频静音段声音几乎没有,所以我设置的比较小也不会出错,如果你们需要减除的静音段还是有一点声音的,那需要好好考虑设置多少合适。

keep_silence=400  这个值是剪切静音段保留多少静音段在有声音的音频段上,我设置的是400毫秒,如果太小,也会听着很变扭。如果设置太长,会有较长的静音段没剪掉。一般来说500左右合适。

猜你喜欢

转载自blog.csdn.net/qq_22329695/article/details/124107878