前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python pydub音频处理

Python pydub音频处理

作者头像
李小白是一只喵
发布2020-04-23 15:02:22
2.2K0
发布2020-04-23 15:02:22
举报
文章被收录于专栏:算法微时光算法微时光

image.png

pydub

Pydub可以让你用简单的方式处理音频。

Pydub提供了简洁的高层接口,极大的扩展了python处理音频文件的能力。

GitHub链接:pydub-github

GitHub:

You can open and save WAV files with pure python. For opening and saving non-wav files – like mp3 – you'll need ffmpeg or libav.

安装

代码语言:javascript
复制
pip install pydub

image.png

安装依赖软件

pydub的使用必须安装对应的依赖软件ffmpegavconv

代码语言:javascript
复制
# ffmpeg
sudo apt-get install ffmpeg libavcodec-extra

验证是否安装成功:

image.png

API函数使用

打开接口

Open a WAV file

代码语言:javascript
复制
from pydub import AudioSegment

song = AudioSegment.from_wav("never_gonna_give_you_up.wav")

Open a mp3 file

代码语言:javascript
复制
song = AudioSegment.from_mp3("never_gonna_give_you_up.mp3")

Open a other file

代码语言:javascript
复制
ogg_version = AudioSegment.from_ogg("never_gonna_give_you_up.ogg")
flv_version = AudioSegment.from_flv("never_gonna_give_you_up.flv")

mp4_version = AudioSegment.from_file("never_gonna_give_you_up.mp4", "mp4")
wma_version = AudioSegment.from_file("never_gonna_give_you_up.wma", "wma")
aac_version = AudioSegment.from_file("never_gonna_give_you_up.aiff", "aac")
音频操作

切割音频

代码语言:javascript
复制
# pydub does things in milliseconds
ten_seconds = 10 * 1000

first_10_seconds = song[:ten_seconds]

last_5_seconds = song[-5000:]

分贝操作 分贝(decibel)是量度两个相同单位之数量比例的计量单位,主要用于度量声音强度,常用dB表示。

代码语言:javascript
复制
# boost volume by 6dB
beginning = first_10_seconds + 6

# reduce volume by 3dB
end = last_5_seconds - 3

分贝

说明

1分贝

刚能听到的声音

15 分贝以下

感觉安静

30 分贝

耳语的音量大小

40 分贝

冰箱的嗡嗡声

60分贝

正常交谈的声音

70分贝

相当于走在闹市区

85分贝

汽车穿梭的马路上

95分贝

摩托车启动声音

100分贝

装修电钻的声音

110分贝

卡拉OK、大声播放MP3 的声音

120分贝

飞机起飞时的声音

150分贝

燃放烟花爆竹的声音

音频链接 将一个文件添加到另一个文件的末尾

代码语言:javascript
复制
without_the_middle = beginning + end

音频长度

代码语言:javascript
复制
without_the_middle.duration_seconds == 15.0

淡入淡出

代码语言:javascript
复制
# 1.5 second crossfade
with_style = beginning.append(end, crossfade=1500)

重复音频

代码语言:javascript
复制
# repeat the clip twice
do_it_over = with_style * 2

再次淡入淡出

代码语言:javascript
复制
# 2 sec fade in, 3 sec fade out
awesome = do_it_over.fade_in(2000).fade_out(3000)
保存音频

直接保存 所有ffmpeg支持的都支持

代码语言:javascript
复制
awesome.export("mashup.mp3", format="mp3")

用标签保存结果(元数据)

代码语言:javascript
复制
awesome.export("mashup.mp3", format="mp3", tags={'artist': 'Various artists', 'album': 'Best of 2011', 'comments': 'This album is awesome!'})

实例:

代码语言:javascript
复制
# -*- coding: utf-8 -*-
from glob import glob
from pydub import AudioSegment

playlist_songs = [AudioSegment.from_mp3(mp3_file) for mp3_file in glob("*.mp3")]

first_song = playlist_songs.pop(0)

# let's just include the first 30 seconds of the first song (slicing
# is done by milliseconds)
beginning_of_song = first_song[:30*1000]

playlist = beginning_of_song
for song in playlist_songs:

    # We don't want an abrupt stop at the end, so let's do a 10 second crossfades
    playlist = playlist.append(song, crossfade=(10 * 1000))

# let's fade out the end of the last song
playlist = playlist.fade_out(30)

# hmm I wonder how long it is... ( len(audio_segment) returns milliseconds )
playlist_length = len(playlist) / (1000*60)

# lets save it!
out_f = open("%s_minute_playlist.mp3" % playlist_length, 'wb')

playlist.export(out_f, format='mp3')

实战

将mp3文件转换成wav文件:

代码语言:javascript
复制
# -*- coding: utf-8 -*-
from pydub import AudioSegment
 
def trans_mp3_to_wav(filepath):
    song = AudioSegment.from_mp3(filepath)
    song.export("out.wav", format="wav")

if __name__ == "__main__":
    trans_mp3_to_wav("一剪梅.mp3")

参考

Python音频处理库 pydub

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • pydub
  • 安装
    • 安装依赖软件
    • API函数使用
      • 打开接口
        • 音频操作
          • 保存音频
          • 实战
          • 参考
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档