Python pydub音频处理

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.

安装

pip install pydub
image.png
安装依赖软件

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

# ffmpeg
sudo apt-get install ffmpeg libavcodec-extra

验证是否安装成功:

image.png

API函数使用

打开接口

Open a WAV file

from pydub import AudioSegment

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

Open a mp3 file

song = AudioSegment.from_mp3("never_gonna_give_you_up.mp3")

Open a other file

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")
音频操作

切割音频

# pydub does things in milliseconds
ten_seconds = 10 * 1000

first_10_seconds = song[:ten_seconds]

last_5_seconds = song[-5000:]

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

# 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分贝燃放烟花爆竹的声音

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

without_the_middle = beginning + end

音频长度

without_the_middle.duration_seconds == 15.0

淡入淡出

# 1.5 second crossfade
with_style = beginning.append(end, crossfade=1500)

重复音频

# repeat the clip twice
do_it_over = with_style * 2

再次淡入淡出

# 2 sec fade in, 3 sec fade out
awesome = do_it_over.fade_in(2000).fade_out(3000)
保存音频

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

awesome.export("mashup.mp3", format="mp3")

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

awesome.export("mashup.mp3", format="mp3", tags={'artist': 'Various artists', 'album': 'Best of 2011', 'comments': 'This album is awesome!'})

实例:

# -*- 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文件:

# -*- 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_李小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值