Python利用Pydub实现自动分割音频
作者:黄昏中起飞的猫头鹰 发布时间:2022-10-08 22:02:48
随着短视频应用的普及,越来越多人开始了解并尝试制作自己的短视频作品。而在制作短视频时,背景音乐的选择和使用也是非常重要的一步。很多人喜欢选择一首长音乐,再通过剪辑软件将其剪成多段来使用,这种做法虽然可行,但效率较低。
在这种情况下,我们可以使用音频分割技术来快速剪辑出需要的音频段,以便于在短视频中使用。在 Python 中,我们可以使用 Pydub 库来进行音频分割。
I. 简介
pydub是Python的一个音频处理库,可以处理各种音频格式,如mp3、wav、flv等等。它是一个轻量级、快速且易于使用的库。silence库是pydub的一个扩展库,可以在音频文件中根据静默部分进行分割,非常方便。
II. 安装
使用pip安装pydub库:
pip install pydub
III. 使用
下面是一个使用pydub=分割音频文件的示例代码:
from pydub import AudioSegment
from pydub.silence import split_on_silence
# 读取音频文件
audio = AudioSegment.from_file("audio.mp3", format="mp3")
# 设置分割参数
min_silence_len = 700 # 最小静音长度
silence_thresh =-10 # 静音阈值,越小越严格
keep_silence = 600 # 保留静音长度
# 识别计算分割歌曲数量
num_segments = int(audio.duration_seconds/60/3) # 每首歌曲大概三分钟,计算歌曲数量
# 分割音频文件
for i in range(-10, 0):
segments = split_on_silence(audio, min_silence_len=min_silence_len, silence_thresh=i, keep_silence=keep_silence)
if len(segments) <= num_segments:
print(f"分割成功,共分割出 {len(segments)} 段")
break
else:
print(f"当前阈值为 {i},分割出 {len(segments)} 段,继续尝试")
上面的代码首先使用AudioSegment类从audio.mp3文件中读取音频数据,然后设置了分割参数min_silence_len、silence_thresh和keep_silence。min_silence_len是最小静音长度,silence_thresh是静音阈值,keep_silence是保留静音长度。这些参数的具体含义可以根据实际情况进行调整。最后,根据分割参数使用split_on_silence函数对音频文件进行分割。
分割成功后,我们可以输出分割后的音频文件,验证是否达到了我们预期的效果。至此,我们就完成了音频文件的自动分割,可以将分割后的文件用于其他需要使用的场景了。
补充
除了利用Pydub实现自动分割音频,本文还为大家整理了其他Python实现音频分割的方法,希望对大家有所帮助
方法一:
from pydub import AudioSegment
from pydub.utils import make_chunks
import os, re
# # 循环目录下所有文件
for each in os.listdir("D:/PycharmProjects/拾音器/"): # 循环目录
filename = re.findall(r"(.*?)\.mp3", each) # 取出.mp3后缀的文件名
print(each)
if each:
mp3 = AudioSegment.from_file('D:/PycharmProjects/拾音器//{}'.format(each), "mp3") # 打开mp3文件
# # # mp3[17*1000+500:].export(filename[0], format="mp3") # 切割前17.5秒并覆盖保存,与以下代码不可同时使用
size = 10000 # 切割的毫秒数 10s=10000
chunks = make_chunks(mp3, size) # 将文件切割为10s一块
for i, chunk in enumerate(chunks):
chunk_name = "{}-{}.mp3".format(each.split(".")[0], i) # 也可以自定义名字
print(chunk_name)
chunk.export('D:/PycharmProjects/拾音器2/{}'.format(chunk_name), format="mp3") # 新建的保存文件夹
方法二:
"""
把原音频,按csv中的标注结果分割成几个音频,如text是无,忽略。否则从sDate到eDate 进行分割。
"""
import os
import pandas as pd
import json
from pydub import AudioSegment
csv_url = "D:\csv\\"
wav_url = "D:\标注音频与示例\\"
save_wav = "D:\wav\\new_wav\\"
for path in os.listdir(csv_url):
data_frame = pd.read_csv(csv_url + path, encoding='utf-8')
name_list = data_frame["storeFileName"]
result_list = data_frame["finalResult"]
for nl, rl in zip(name_list, result_list):
new_wav_url = save_wav + nl.split(".")[0] + "\\"
if not os.path.exists(new_wav_url):
os.makedirs(new_wav_url)
result = json.loads(rl)
txt_url = new_wav_url + nl.split(".")[0]+".txt"
with open(txt_url, "w", encoding='utf-8') as fn:
fn.write(nl+"\n")
fn.write(rl)
fn.close()
audio = AudioSegment.from_wav(wav_url + nl)
for text in result['text']:
if text['defData']['text'] != '无':
sTime = text['defData']['sTime'] * 1000
dTime = text['defData']['dTime'] * 1000
eTime = sTime + dTime
# 音频切割按开始时间到结束时间切割
audio_chunk = audio[sTime:eTime]
audio_chunk.export(new_wav_url + nl.split(".")[0] + "-" + str(text['id']) + ".wav", format="wav")
来源:https://blog.csdn.net/qq_20163065/article/details/130457661


猜你喜欢
- java 中JDBC连接数据库代码和步骤详解JDBC连接数据库 •创建一个以JDBC连接数据库的程序,包含7个步骤:
- 打包pyinstaller 02.py --noconsole --hidden-import PySide2.QtXml报错0:The &
- Python os.remove() 方法os.remove() 方法用于删除指定路径的文件。如果指定的路径是一个目录,将抛出OSError
- 折线图是数据分析中非常常用的图形。其中,折线图主要是以折线的上升或下降来表示统计数量的增减变化的统计图。用于分析自变量和因变量之间的趋势关系
- 本文实例为大家分享了Python代码实现双链表的具体代码,供大家参考,具体内容如下双链表的每个节点有两个指针: 一个指向后一个节点,另一个指
- 前言:多态的实现必须满足两个前提条件1.继承:多态一定是发生在子类和父类之间2.重写:多态子类重写了父类的方法记住这两点再结合代码示例有助于
- 很多人不明白,学习这些冷门的函数基本上都用不到,或者说是什么多大用处,事实上,有是有很多用处的,比如今天给大家介绍的uuid模块,就能够生成
- 本文实例讲述了python使用mailbox打印电子邮件的方法。分享给大家供大家参考。具体如下:该范例在linux下使用import mai
- 简介Python免费调用百度AI实现图片上面的文字识别步骤安装百度AI库!pip install baidu-aip注册百度AI开放平台先注
- 在ubuntu论坛上看到一个抓取网页里的图片数据的帖子,于是就想着用GO语言来试下。那么先安装一个运行环境吧。以下安装方式在32位和64位的
- 本文主要讲述:自定义树形控件<el-tree>需求说明:Element UI 官网提供的树形控件包含基础的、可选择的、自定义节点
- 1.Js天数相加获取新日期function timestampToTime(timestamp) {  
- wheel文件Wheel和Egg都是python的打包格式,目的是支持不需要编译或制作的安装过程,实际上也是一种压缩文件,将.whl的后缀改
- 基本概念数字图像定义对于一幅图像,我们可以将其放入坐标系中,这里取图像左上定点为坐标原点,x 轴向右,和笛卡尔坐标系x轴相同;y 轴向下,和
- 用Flask处理图片非常容易,这一篇学习一下图片的上传、下载及展示。还是以实例代码演示为主。首先,实现一个简单的上传(过程中未做任何处理,只
- pthon更换文档中某元素:with open('E:\\桌面\\train.txt', 'r') as f
- 前言在编程过程中,我们经常会用到与时间和日期相关的各种需求,下面来介绍 Go 语言中有关时间的一些基本用法。时间类型time.Time 类型
- 一、前言在写业务代码时候,有许多场景需要重试某块业务逻辑,例如网络请求、购物下单等,希望发生异常的时候多重试几次。本文分享如何利用Pytho
- 本文实例讲述了python实现查找两个字符串中相同字符并输出的方法。分享给大家供大家参考。具体实现方法如下:seq1 = "spa
- 本文实例讲述了js实现鼠标悬浮给图片加边框的方法。分享给大家供大家参考。具体实现方法如下:html代码:<div class=&quo