pydub是python的高级一个音频处理库,可以让你以一种不那么蠢的方法处理音频。(开发者自己是这么说的,不过个人感觉有时候仍然很蠢。。。。)
安装
pip install pydub
注意: pydub直接支持wav格式音频读取,如果需要处理其它格式音频(如MP3,ogg等)需要安装ffmpeg。 ffmpeg的安装在各平台上略有不同,具体方法自行google
快速开始
打开WAV文件
from pydub import AudioSegment
song = AudioSegment.from_wav("never_gonna_give_you_up.wav")
…或mp3
song = AudioSegment.from_mp3("never_gonna_give_you_up.mp3")
…或ogg,flv或ffmpeg支持的任何其他东西
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以毫秒为单位工作
ten_seconds = 10 * 1000
first_10_seconds = song[:ten_seconds]
last_5_seconds = song[-5000:]
放大开头音量,减小结尾音量
# 放大6dB音量
beginning = first_10_seconds + 6
# 衰减3dB音量
end = last_5_seconds - 3
连接音频(将一个文件添加到另一个文件的末尾)
without_the_middle = beginning + end
音频时长?
without_the_middle.duration_seconds == 15.0
注意:AudioSegments是不可变的
backwards = song.reverse()
交叉淡化(开头和结束不修改)
with_style = beginning.append(end, crossfade = 1500)
重复
#重复剪辑两次
do_it_over = with_style * 2
淡出(注意,你可以链接操作,因为一切返回一个AudioSegment)
# 2秒的淡入,3秒的淡出
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!'})
可以使用ffmpeg支持的任何语法将可选的bitrate参数传递给export。(这句想不到一个通顺的翻译了)
awesome.export(“ mashup.mp3 ”,format = “ mp3 ”,bitrate = “ 192k ”)
ffmpeg支持的任何进一步的参数可以作为’参数’参数中的列表进行传递,其中第一个为开关,第二个为参数。注意,不对这些参数进行验证,并且您可能受到您的特定构建的ffmpeg / avlib支持的限制。
#使用预设的mp3品质0(相当于lame V0)
awesome.export( “ mashup.mp3 ”, format = “ mp3 ”, parameters = [ “ -q:a ”, “ 0 ” ])
#混合下来两个通道并设置硬输出音量
awesome.export( “ mashup.mp3 ”, format = “ mp3 ”, parameters = [ “ -ac ”, “ 2 ”, “- vol ”, “ 150 ” ])
API文档
AudioSegment 对象是不可变的,并且支持多个运算符。
from pydub import AudioSegment
sound1 = AudioSegment.from_file("/path/to/sound.wav", format="