0

0

Python音频处理库pydub如何使用

WBOY

WBOY

发布时间:2023-05-06 11:58:06

|

2566人浏览过

|

来源于亿速云

转载

    1. 安装

    使用pip安装即可(还需安装ffmpeg依赖,建议使用conda命令安装,则不需要配置环境):

    pip install pydub

    2. 导入和读取音频文件

    from pydub import AudioSegment
    audio = AudioSegment.from_file("path/to/file")

    3. 播放音频

    from pydub.playback import play
    play(audio)

    4. 音频时长

    duration = audio.duration_seconds # 单位为秒

    5. 音频切割

    # 前10秒
    audio = audio[:10000]
    
    # 后10秒
    audio = audio[-10000:]
    
    # 从第10秒开始到第20秒结束
    audio = audio[10000:20000]
    
    # 从第10秒开始到结尾
    audio = audio[10000:]
    
    # 从开始到第10秒audio = audio[:10000]

    6. 音频合并

    audio1 = AudioSegment.from_file("path/to/file1")
    audio2 = AudioSegment.from_file("path/to/file2")
    audio_combined = audio1 + audio2

    7. 音频转换

    audio.export("path/to/new/file", format="mp3")

    8. 调整音量

    # 增加10分贝
    louder_audio = audio + 10
    
    # 减小10分贝
    quieter_audio = audio - 10

    9. 等分分割音频

    # 等分分割,按大概每三分钟进行分割
    for i in range(1, 1000):
        if 3.3 >= (audio.duration_seconds / (60 * i)) >= 2.8:
            number = i
            break
    chunks = audio[::int(audio.duration_seconds / number * 1000 + 1)]  # 切割
    
    # 保存分割后的音频
    for i, chunk in enumerate(chunks):
        chunk.export("path/to/new/file{}.wav".format(title,i), format="wav")

    10. 完整代码

    下面是一段完整的代码,用于对音频进行前后切割,并将音频分割成合适长度的小段进行保存。

    from pydub import AudioSegment
    
    # 读取音频文件
    audio = AudioSegment.from_file("path/to/file")
    
    # 输出视频时长
    print('视频时长:', audio.duration_seconds / 60)
    
    # 前后切割
    start = int(input('前切割n秒,不切割输入0'))*1000
    end = int(input('后切割n秒,不切割输入0'))*1000
    if start:
        audio = audio[start:-end]
    
    # 计算合适的分割长度
    for i in range(1, 1000):
        if 3.3 >= (audio.duration_seconds / (60 * i)) >= 2.8:
            number = i
            break
    chunks = audio[::int(audio.duration_seconds / number * 1000 + 1)] 
    # 保存分割后的音频
    for i, chunk in enumerate(chunks):
        print('分割后的时长:', chunk.duration_seconds / 60)
        chunk.export("path/to/new/file{}.wav".format(i), format="wav")

    应用案例

    1. 将音频文件转换为指定格式

    from pydub import AudioSegment
    
    # 读取音频文件
    audio = AudioSegment.from_file("path/to/file")
    
    # 转换为mp3格式并保存
    audio.export("path/to/new/file.mp3", format="mp3")

    2. 将多个音频文件合并为一个文件

    from pydub import AudioSegment
    
    # 读取音频文件
    audio1 = AudioSegment.from_file("path/to/file1")
    audio2 = AudioSegment.from_file("path/to/file2")
    
    # 合并音频文件并保存
    combined_audio = audio1 + audio2
    combined_audio.export("path/to/new/file", format="wav")

    3. 制作铃声

    from pydub import AudioSegment
    
    # 读取音频文件
    audio = AudioSegment.from_file("path/to/file")
    
    # 切割并保存
    start = 10000
    end = 15000
    ringtone = audio[start:end]
    ringtone.export("path/to/new/file", format="mp3")

    4. 调整音频音量

    from pydub import AudioSegment
    
    # 读取音频文件
    audio = AudioSegment.from_file("path/to/file")
    
    # 增加10分贝
    louder_audio = audio + 10
    
    # 减小10分贝
    quieter_audio = audio - 10
    
    # 保存调整后的音频
    louder_audio.export("path/to/new/file", format="wav")
    quieter_audio.export("path/to/new/file", format="wav")

    案例:通过识别空白音,分割音频中的歌曲

    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.from_file()方法读取音频文件,并设置分割参数min_silence_len、silence_thresh和keep_silence分别表示最小静音长度、静音阈值和保留静音长度。其中,静音阈值越小,分割出的小段越多,但可能会出现误分割的情况;反之,静音阈值越大,分割出的小段越少,但可能会出现漏分割的情况。

    然后,我们计算分割数量num_segments,即将音频文件分割成多少段。这里我们假设每首歌曲大概三分钟,计算出总共需要分割成多少段。

    立即学习Python免费学习笔记(深入)”;

    最后,我们使用split_on_silence()方法对音频文件进行分割,设置分割参数,并通过循环来不断调整静音阈值,直到分割出的小段数量符合预期为止。如果分割成功,则跳出循环;否则,继续尝试。

    总而言之,pydub是一个非常实用的音频处理库,可以方便地进行音频处理、转换、合并等操作。同时,pydub还有丰富的应用场景,如制作铃声、调整音量等。值得注意的是,在使用pydub的过程中,需要注意音频格式的兼容性问题。

    此外,还可以通过pydub对音频进行编解码、混音、重采样等操作。下面是一些常见的操作示例。

    编解码、混音、重采样

    1. 编解码

    from pydub import AudioSegment
    
    # 读取音频文件
    audio = AudioSegment.from_file("path/to/file")
    
    # 编码
    encoded_audio = audio.set_frame_rate(16000).set_sample_width(2).set_channels(1)
    
    # 解码
    decoded_audio = encoded_audio.set_frame_rate(44100).set_sample_width(4).set_channels(2)

    2. 混音

    from pydub import AudioSegment
    
    # 读取音频文件
    audio1 = AudioSegment.from_file("path/to/file1")
    audio2 = AudioSegment.from_file("path/to/file2")
    
    # 混音
    mixed_audio = audio1.overlay(audio2)
    
    # 保存混音后的音频
    mixed_audio.export("path/to/new/file", format="wav")

    3. 重采样

    Magic AI Avatars
    Magic AI Avatars

    神奇的AI头像,获得200多个由AI制作的自定义头像。

    下载
    from pydub import AudioSegment
    
    # 读取音频文件
    audio =AudioSegment.from_file("path/to/file")
    
    # 重采样为44100Hz
    resampled_audio = audio.set_frame_rate(44100)
    
    # 保存重采样后的音频
    resampled_audio.export("path/to/new/file", format="wav")

    通过pydub,我们可以方便地进行音频编解码、混音、重采样等操作,进一步扩展了pydub的应用场景。需要注意的是,在进行音频混音操作时,需要保证两个音频文件的采样率、采样位数和声道数相同。

    最后,总结一下pydub的优点和缺点。

    优点:

    轻量级:pydub是一个轻量级的音频处理库,安装方便,使用简单。

    功能丰富:pydub提供了丰富的音频处理功能,包括切割、合并、转换、调整音量、编解码、混音、重采样等。

    应用广泛:pydub的应用场景非常广泛,包括音频处理、铃声制作、音频格式转换、语音识别等等。

    缺点:

    对格式的兼容性有限:pydub对音频格式的兼容性有限,不支持所有的音频格式,需要先将音频转换为支持的格式后才能进行处理。

    性能一般:pydub在处理大文件时,性能可能会比较一般,需要耗费一定的时间和计算资源。

    不支持流式处理:pydub不支持流式处理,需要将整个音频文件读取到内存中,导致内存占用较大。

    综上所述,pydub是一个功能丰富、应用广泛的音频处理库。在使用pydub时,需要注意音频格式的兼容性问题,并注意处理大文件时的性能和内存占用。如果需要处理更复杂的音频任务,可以考虑使用其他更专业的音频处理库。

    热门AI工具

    更多
    DeepSeek
    DeepSeek

    幻方量化公司旗下的开源大模型平台

    豆包大模型
    豆包大模型

    字节跳动自主研发的一系列大型语言模型

    WorkBuddy
    WorkBuddy

    腾讯云推出的AI原生桌面智能体工作台

    腾讯元宝
    腾讯元宝

    腾讯混元平台推出的AI助手

    文心一言
    文心一言

    文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

    讯飞写作
    讯飞写作

    基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

    即梦AI
    即梦AI

    一站式AI创作平台,免费AI图片和视频生成。

    ChatGPT
    ChatGPT

    最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

    相关专题

    更多
    C# ASP.NET Core微服务架构与API网关实践
    C# ASP.NET Core微服务架构与API网关实践

    本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

    76

    2026.03.11

    Go高并发任务调度与Goroutine池化实践
    Go高并发任务调度与Goroutine池化实践

    本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

    38

    2026.03.10

    Kotlin Android模块化架构与组件化开发实践
    Kotlin Android模块化架构与组件化开发实践

    本专题围绕 Kotlin 在 Android 应用开发中的架构实践展开,重点讲解模块化设计与组件化开发的实现思路。内容包括项目模块拆分策略、公共组件封装、依赖管理优化、路由通信机制以及大型项目的工程化管理方法。通过真实项目案例分析,帮助开发者构建结构清晰、易扩展且维护成本低的 Android 应用架构体系,提升团队协作效率与项目迭代速度。

    83

    2026.03.09

    JavaScript浏览器渲染机制与前端性能优化实践
    JavaScript浏览器渲染机制与前端性能优化实践

    本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

    97

    2026.03.06

    Rust内存安全机制与所有权模型深度实践
    Rust内存安全机制与所有权模型深度实践

    本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

    223

    2026.03.05

    PHP高性能API设计与Laravel服务架构实践
    PHP高性能API设计与Laravel服务架构实践

    本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

    458

    2026.03.04

    AI安装教程大全
    AI安装教程大全

    2026最全AI工具安装教程专题:包含各版本AI绘图、AI视频、智能办公软件的本地化部署手册。全篇零基础友好,附带最新模型下载地址、一键安装脚本及常见报错修复方案。每日更新,收藏这一篇就够了,让AI安装不再报错!

    169

    2026.03.04

    Swift iOS架构设计与MVVM模式实战
    Swift iOS架构设计与MVVM模式实战

    本专题聚焦 Swift 在 iOS 应用架构设计中的实践,系统讲解 MVVM 模式的核心思想、数据绑定机制、模块拆分策略以及组件化开发方法。内容涵盖网络层封装、状态管理、依赖注入与性能优化技巧。通过完整项目案例,帮助开发者构建结构清晰、可维护性强的 iOS 应用架构体系。

    246

    2026.03.03

    C++高性能网络编程与Reactor模型实践
    C++高性能网络编程与Reactor模型实践

    本专题围绕 C++ 在高性能网络服务开发中的应用展开,深入讲解 Socket 编程、多路复用机制、Reactor 模型设计原理以及线程池协作策略。内容涵盖 epoll 实现机制、内存管理优化、连接管理策略与高并发场景下的性能调优方法。通过构建高并发网络服务器实战案例,帮助开发者掌握 C++ 在底层系统与网络通信领域的核心技术。

    34

    2026.03.03

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    最新Python教程 从入门到精通
    最新Python教程 从入门到精通

    共4课时 | 22.5万人学习

    Django 教程
    Django 教程

    共28课时 | 5万人学习

    SciPy 教程
    SciPy 教程

    共10课时 | 1.9万人学习

    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号 技术交流群
    PHP中文网订阅号
    每天精选资源文章推送

    Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号