Python音频处理——pydub

这篇具有很好参考价值的文章主要介绍了Python音频处理——pydub。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Pydub是Python音频处理库,可以对音频进行切割、合并、转换、调整音量等操作。以下是对pydub各个知识点的介绍和案例。

Pydub

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")

以上就是pydub的主要知识点和一个完整的实例。通过pydub,我们可以方便地对音频进行处理和转换,让我们的音频处理更加高效和便捷。
另外,下面还列举了一些pydub的其他应用案例。

应用案例

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_lensilence_threshkeep_silence分别表示最小静音长度、静音阈值和保留静音长度。其中,静音阈值越小,分割出的小段越多,但可能会出现误分割的情况;反之,静音阈值越大,分割出的小段越少,但可能会出现漏分割的情况。

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

最后,我们使用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. 重采样

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的优点和缺点。

优点:

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

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

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

缺点:

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

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

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

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

总结

博客介绍了如何使用Python的pydub库将音频文件分割成多个小段。我们首先读取音频文件,然后设置分割参数,并计算分割数量。最后,通过循环来不断调整静音阈值,直到分割出的小段数量符合预期为止。这种方法可以用于对音频进行处理和分析,例如语音识别、音乐推荐等。
需要注意的是,音频分割的效果受到分割参数的影响,需要根据具体情况进行调整。另外,分割出的小段可能存在误分割和漏分割的情况,需要进行后续的检查和处理。文章来源地址https://www.toymoban.com/news/detail-410626.html

到了这里,关于Python音频处理——pydub的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用python对音频做去噪 处理

    要使用Python对音频进行去噪处理,您可以使用许多库和算法。以下是使用librosa和scipy库实现的基本去噪算法: 首先,您需要安装所需的库。您可以使用以下命令安装它们: 接下来,您需要导入所需的库:   加载音频文件并提取音频数据: 定义去噪函数。该函数使用Wiener滤波

    2024年02月06日
    浏览(37)
  • Speech | 语音处理,分割一段音频(python)

    本文主要是关于语音数据在处理过程中的一些脚本文件以及实例,所有代码只需要更改所需处理的文件路径,输出路径等,全部可运行。 目录 所需环境 方法1:将一整段音频按时间批量切成一个一个音频 方法2:将一整段音频按语句停顿批量切成一个一个音频 方法3:将一个

    2024年02月08日
    浏览(36)
  • Python实时变声教程:用代码实现自定义音频处理效果

    如何使用Python编写实时变声程序 随着人们对音频处理技术的需求越来越高,音频处理技术在各个领域的应用也越来越广泛。其中,实时变声技术是一种比较有趣的音频处理技术。本文将介绍如何使用Python编写实时变声程序。 实时变声技术是一种将音频信号进行实时加工,从

    2023年04月26日
    浏览(48)
  • 【python】《多媒体技术与应用》实验报告「数字音频处理」

     《多媒体技术与应用》 实验报告 实验名称 数字视频处理 实验时间 2022/4/25 姓名 班级 计非201 学号 成绩 一.  实验目的 1. 掌握数字音频的读取与打开; 2. 掌握数字音频信号的频谱分析; 3. 验证 PCM 编码算法。 二.实验原理 声音是由物体振动而产生的,声波的三要素是频率

    2023年04月16日
    浏览(57)
  • chatgpt赋能python:Python音频降噪处理:使用Python减少噪音并提升声音质量

    在日常生活中,使用音频通信是非常普遍的。但是,由于各种原因,我们可能会遇到许多噪音干扰,从而降低语音质量并影响通信的效果。为了解决这个问题,我们可以使用Python来降噪音。 我们每天听到的声音都是由许多不同频率的声音波形组成的。噪音是指在声音中添加了

    2024年02月03日
    浏览(43)
  • Python | 语音处理 | 用 librosa / AudioSegment / soundfile 读取音频文件的对比

    本文对比用 Python 读取音频文件 (.wav, .mp3) 的三种方式: soundfile.read librosa.load pydub.AudioSegment.from_file 使用总结如下: soundfile.read : 只能读 .wav ,不能读 .mp3; 默认 dtype = \\\'float64\\\' ,输出为 (-1, 1) 之间的数据 (做了 32768 归一化);修改为 dtype = \\\'int16\\\' ,输出为 (-2**15, 2**15-1) 之间;

    2024年02月14日
    浏览(53)
  • Java 音频处理,音频流转音频文件,获取音频播放时长

    最近对接了一款智能手表,手环,可以应用与老人与儿童监控,环卫工人监控,农场畜牧业监控,宠物监控等,其中用到了音频传输,通过平台下发语音包,发送远程命令录制当前设备音频并将音频分包传输到服务器上生成音频文件等。其中关于音频的一些简单操作封装成了

    2024年02月03日
    浏览(38)
  • 音频特效SDK,满足内容生产的音频处理需求

    美摄科技,作为音频处理技术的佼佼者,推出的音频特效SDK,旨在满足企业内容生产中的音频处理需求。这款SDK内置多种常见音频处理功能,如音频变声、均衡器、淡入淡出、音频变调等,帮助企业轻松应对各种音频处理挑战。 一、核心功能与优势 1、音频变声: 通过调整音

    2024年01月25日
    浏览(44)
  • 语音信号处理 —— 笔记(一)音频信号处理

      声音的产生 :能量通过声带使其振动产生一股基声音,这个基声音通过声道 ,与声道发生相互作用产生共振声音,基声音与共振声音一起传播出去。 传感器以 某种频率 探测声音的振幅强度以及振动方向,所得到的一系列随时间变化的点。 传感器的探测频率,即为采样

    2023年04月09日
    浏览(56)
  • FPGA 音频信号处理

    第八届集创赛杯赛题目——紫光同创杯 - 全国大学生集成电路创新创业大赛 题目任务要求:采集信号、降噪、识别、视频展示。 硬件:麦克风、扬声器、FPGA(盘古50)、HDMI显示器 软件:紫光同创PDS(用于部署)、anaconda、jupyter(用于部署训练网络) 1.麦克风采集好数据经过

    2024年03月14日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包