Python利用Pydub实现自动分割音频

目录
  • I. 简介
  • II. 安装
  • III. 使用
  • 补充

随着短视频应用的普及,越来越多人开始了解并尝试制作自己的短视频作品。而在制作短视频时,背景音乐的选择和使用也是非常重要的一步。很多人喜欢选择一首长音乐,再通过剪辑软件将其剪成多段来使用,这种做法虽然可行,但效率较低。

在这种情况下,我们可以使用音频分割技术来快速剪辑出需要的音频段,以便于在短视频中使用。在 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")

到此这篇关于Python利用Pydub实现自动分割音频的文章就介绍到这了,更多相关Python Pydub分割音频内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python使用pydub库对mp3与wav格式进行互转的方法

    我们需要用到一个叫pydub的类库, pydub是python的高级一个音频处理库,可以让你以一种不那么蠢的方法处理音频.---开发者原话 https://github.com/jiaaro/pydub 附上开发者的github地址 安装: pip install pydub 如果在pycharm中也可以这样安装: setting----Project Interpreter----右边绿色+号 点一下install package 依赖安装: 作者在github 上说,依赖可以安装libav

  • Python中音频处理库pydub的使用教程

    前言 pydub是Python中用户处理音频文件的一个库.本文主要介绍了关于Python音频处理库pydub使用的相关内容,分享出来供大家参考学习,下面来看看详细的介绍: 安装: 1.安装pip工具:sudo apt-get install python-pip 2.安装pydub:sudo pip install pydub 3.pydub依赖于ffmpeg,所以还需要安装ffmpeg,由于Ubunbtu14.04官方源移除了ffmpeg,因此通过ppa源安装: sudo apt-add-re

  • Python 利用pydub库操作音频文件的方法

    最近使用Python调用百度的REST API实现语音识别,但是百度要求音频文件的压缩方式只能是pcm(不压缩).wav.opus.speex.amr,这里面也就wav还常见一点,但是一般设备录音得到的文件都是mp3,这就要把mp3转换为wav,由于python的效率并不高,很多实现都是使用C++或者Java,不过GitHub上有一个项目pydub(https://github.com/jiaaro/pydub/tree/master/pydub)可以暂时解决问题. 安装pydub 直接执行以下

  • Python使用pydub模块转换音频格式以及对音频进行剪辑

    前言 近端时间看了一个短视频,觉得视频的背景音乐片段很不错,想把这个背景音乐得到,虽然小编运用Python爬虫肯定能得到这首音乐,但是这个音乐片段肯定是得不到的,于是网上看一下相关官方文档,没想到python真的有模块可以满足要求,这又让我想起自己CSDN界面的那段话了,"在Python面前,只有你想不到的,没有Python做不到的". 1.需要下载的Python模块和ffmpeg多媒体处理工具 需要的Python模块是标题上提到的那个,pydub,这个模块可以实现对音频文件的剪辑.转

  • python 利用toapi库自动生成api

    在学习做接口测试自动化的时候,我们往往会自己动手写一些简单的API,比如写一个简单的TODO API之类. 不过自己写API的时候经常需要造一些假数据,以及处理分页逻辑,开始的时候还觉得比较有意思,但久而久之就显得比较乏味了. 这时候你可能会想,有没有什么工具可以自动将一个线上的网站转化成简单的API呢? 这样的工具确实是存在的,而且不少,其中python语言中比较受欢迎的实现是https://github.com/gaojiuli/toapi项目,项目名称是toapi. 我们来简单体验一下这个

  • Python利用Selenium实现自动观看学习通视频

    目录 一.登录 二.进行一个页面的视频观看 三.所有视频的观看 四.总代码 其他 一.登录 以信号与系统课程为例,直接输入网址则出现登录界面: 由于学号登录需要验证码,因此选择电话登录: 直接在开发者工具中找到手机号输入框.密码输入框和登录按钮,并进行输入和点击: import time from selenium.webdriver import Chrome web = Chrome() web.get('https://mooc2-ans.chaoxing.com/mycourse/stu

  • Python利用PyAutoGUI实现自动点赞

    目录 前言 思路 实现 总结 前言 在上篇文章<Python自动操作 GUI 神器——PyAutoGUI>中,我跟大家讲解了一下 pyautogui 的一些基础知识和操作,大家反馈很好,给了我好多赞,在此先跟大家说声三克油! 在得到大家正反馈的同时,我受到了很大鼓舞,感觉如果只是介绍一下基础操作,有点不过瘾,所以今天晚上加班回来,虽然很不想打开电脑,但是还是忍着疲惫给大家奉献一个小实例. 为此,我跑去洗手间用凉水洗了一把脸,顿时清醒多了,下面进入正题. 作为一个 GUI 操作的神器,我们看到了

  • Python利用pywin32实现自动操作电脑

    目录 1. 简介 2. 示例代码 3. 效果图 4. 代码解释 5. 常见问题 1. 简介 在windows系统上,重复性的操作可以用Python脚本来完成,其中常用的模块是win32gui.win32con.win32api,要使用这三个模块需要先安装pywin32.在cmd中输入如下命令,即可安装pywin32: pip install pywin32 这三个模块作用如下: win32gui:模块定义了Windows下关于图形操作的API,如查找窗口句柄的函数FindWindow和FindW

  • python利用opencv如何实现答题卡自动判卷

    目录 1.设定答题卡模板 2.读取答题卡图像并对图像进行灰度化处理 3.高斯模糊图像去噪点 4.使用大津法二值分割图像 5.使用开运算去噪点 6.使用canny边缘检测算法 7.筛选答题区域轮廓,透视变换矫正目标区域 使用摄像头实时判卷部分 总结 1.设定答题卡模板 该图像为答题卡的答题区域,黑色边框是为了能够在各种环境中轻易的检测,左部分和上部分的黑色矩形,是为能够定位到答题选项的坐标而设置,同时题目数量为20×3共60道选择题,在进行批改试卷之前,需要手动输入该次考试的正确答案作为模板来对识

  • python中利用zfill方法自动给数字前面补0

    python中有一个zfill方法用来给字符串前面补0,非常有用 view sourceprint? n = "123" s = n.zfill(5) assert s == "00123" zfill()也可以给负数补0 n = "-123" s = n.zfill(5) assert s == "-0123" 对于纯数字,我们也可以通过格式化的方式来补0 n = 123 s = "%05d" % n a

  • Python利用sqlacodegen自动生成ORM实体类示例

    本文实例讲述了Python利用sqlacodegen自动生成ORM实体类.分享给大家供大家参考,具体如下: 在前面一篇<Python流行ORM框架sqlalchemy安装与使用>我们是手动创建了一个名叫Infos.py的文件,然后定义了一个News类,把这个类作为和我们news数据表的映射. from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() from sqlalchemy impo

  • Python中logging日志记录到文件及自动分割的操作代码

    日志作为项目开发和运行中必备组件,python提供了内置的logging模块来完成这个工作:借助 TimedRotatingFileHandler 可以按日期自动分割日志,自动保留日志文件数量等,下面是对日志的一个简单封装和测试. import logging import os from logging import handlers class Logger(object): # 日志级别关系映射 level_relations = { 'debug': logging.DEBUG, 'in

  • python爬虫利用selenium实现自动翻页爬取某鱼数据的思路详解

    基本思路: 首先用开发者工具找到需要提取数据的标签列 利用xpath定位需要提取数据的列表 然后再逐个提取相应的数据: 保存数据到csv: 利用开发者工具找到下一页按钮所在标签: 利用xpath提取此标签对象并返回: 调用点击事件,并循环上述过程: 最终效果图: 代码: from selenium import webdriver import time import re class Douyu(object): def __init__(self): # 开始时的url self.start

随机推荐

其他