给儿子听的英文音频中有大量的静音段,效率很低。刚开始找个剪辑软件goldwave一个一个剪,后来发现太费劲,就想用程序实现。python的优势是有大量的开源库可用,于是用了两三天时间,了解了一下音频处理库,利用了成熟的库pydub中的函数,基本实现了想要的功能。
1.环境准备
主要需要一个函数库pydub,这个比较好安装,用代码:
pip install pydub
就可以安装。
另一个是需要安装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,这个值是声音多小才被认为是静音段。由于我的音频静音段声音几乎没有,所以我设置的比较小也不会出错,如果你们需要减除的静音段还是有一点声音的,那需要好好考虑设置多少合适。
扫描二维码关注公众号,回复:
14639658 查看本文章
keep_silence=400 这个值是剪切静音段保留多少静音段在有声音的音频段上,我设置的是400毫秒,如果太小,也会听着很变扭。如果设置太长,会有较长的静音段没剪掉。一般来说500左右合适。