使用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左右合适。

  • 8
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
去除音频的人声,可以使用pydub的silence函数。具体步骤如下: 1. 导入pydub库 ```python from pydub import AudioSegment from pydub.silence import split_on_silence ``` 2. 读取音频文件 ```python audio = AudioSegment.from_wav("path/to/audio.wav") ``` 3. 将音频文件分割成无声部分和有声部分 ```python # 将音频文件按照无声部分和有声部分分割成多个片段,无声部分的长度超过1000毫秒(1秒)的才会被保留 chunks = split_on_silence(audio, min_silence_len=1000, silence_thresh=-30, keep_silence=1000) ``` 其,`min_silence_len`参数指定了无声部分的最小长度;`silence_thresh`参数指定了判断无声部分的阈值,即低于该分贝数的部分被认为是无声部分;`keep_silence`参数指定了每个片段之间保留的无声部分的长度。 4. 将无声部分组合成新的音频文件 ```python # 将无声部分组合成新的音频文件 new_audio = AudioSegment.silent(duration=1000) for chunk in chunks: new_audio += chunk + AudioSegment.silent(duration=1000) ``` 其,`duration`参数指定了新的音频文件每个片段之间保留的无声部分的长度。 5. 将新的音频文件保存 ```python new_audio.export("path/to/new_audio.wav", format="wav") ``` 完整代码如下: ```python from pydub import AudioSegment from pydub.silence import split_on_silence audio = AudioSegment.from_wav("path/to/audio.wav") chunks = split_on_silence(audio, min_silence_len=1000, silence_thresh=-30, keep_silence=1000) new_audio = AudioSegment.silent(duration=1000) for chunk in chunks: new_audio += chunk + AudioSegment.silent(duration=1000) new_audio.export("path/to/new_audio.wav", format="wav") ``` 请注意,该方法仅适用于去除单一人声的音频文件。如果音频文件有多个人说话或有背景噪音,效果可能不理想。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值