最好⽤的python⾳频库之⼀:pydub的中⽂⽂档(含API)
pydub 中⽂⽂档(含API)
0x00 写在最前
Pydub lets you do stuff to audio in a way that isn’t stupid.
pydub 提供了简洁的⾼层接⼝,极⼤的扩展了python处理⾳频⽂件的能⼒,pydub可能不是最强⼤的Python⾳频处理库,但绝对是Python最简洁易⽤的⾳频库只要,⾮要说有什么弊端,⼤概只有⾼度依赖ffmpeg,Linux安装起来不太⽅便吧。其功能⾜以满⾜⼤多数情况下的⾳频处理需求,如果它真的满⾜不了你,那为什么不选择更强⼤的库来开发你的专业应⽤呢?
我是DK菌,pydubAPI的译者,最近因开发需要发现了强⼤的pydub,俗话说独乐乐不如众乐乐,特地翻译了API与⼤家分享,下⾯啊pydub的github地址,务必怀着对pydub贡献者们的感激使⽤:
GitHub链接:
本⽂可以任意转载,但请注明出处!
0x01 快速开始
打开⼀个⾳频⽂件
打开⼀个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或其他的什么:
ogg_version = AudioSegment.from_ogg("never_gonna_give_")
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
⾳频段是不可变的
⾳频段是不可变的
# ⾳频不可以被修改
backwards = verse()
交叉淡化
交叉淡化(再⼀次强调,beginning和end都是不可变的)
# 1.5秒的淡⼊淡出
with_style = beginning.append(end, crossfade=1500)
重复
# 将⽚段重复两遍
do_it_over = with_style *2
淡化
淡化(注意⼀下,你可以把许多运算符连成⼀串使⽤,因为运算符都会返回⼀个AudioSegment对象)
# 2秒淡⼊, 3秒淡出
学python看谁的视频比较好
awesome = do_it_over.fade_in(2000).fade_out(3000)
保存结果
保存编辑的结果(再说⼀下,⽀持所有ffmpeg⽀持的格式)
保存带有标签的结果(元数据)
你也可以通过指定任意ffmpeg⽀持的⽐特率来导出你的结果
更多其他的ffmpeg所⽀持的参数可以通过给’parameters’参数传递⼀个列表来实现,列表中第⼀个应该是选项,⽽第⼆个是对应的参数。
特别注意⼀下,这些参数没有得到确认,⽀持的参数可能会受限于你所使⽤的特定的 ffmpeg / avlib 构
# 使⽤预设MP3质量0(相当于lame -V0)
# ——lame是个MP3编码器,-V设置的是VBR压缩级别,品质从0到9依次递减(译者注)
# 混合到双声道并设置输出⾳量百分⽐(放⼤为原来的150%)
0x02 Debugging
⼈们在运⾏时遇到到⼤多数问题都与使⽤ffmpeg/avlib转换格式有关,pydub提供了⼀个logger输出⼦进程的调⽤来帮助你追踪问题>>>import logging
>>> l = Logger("verter")
>>> l.setLevel(logging.DEBUG)
>>> l.addHandler(logging.StreamHandler())
>>> AudioSegment.from_file("./test/data/test1.mp3")
subprocess.call(['ffmpeg','-y','-i','/var/folders/71/42k8g72x4pq09tfp920d033r0000gn/T/tmpeZTgMy','-vn','-f','wav','/var/folders/71/42k8g72x4pq09tfp920 d033r0000gn/T/tmpK5aLcZ'])
<pydub.audio_segment.AudioSegment object at 0x101b43e10>
不⽤担⼼转换中产⽣的临时⽂件,它们会被⾃动地清除。
0x03 Bugs和其他问题
你可以把bugs提交到我们的,还可以在StackOverflow上⽤pydub标签询问任何技术问题。我们始终对这两者保持关注。
0x04 安装
安装pydub很容易,但不要忘记安装ffmpeg/avlib(下⼀部分也在此⽂档中)
pip install pydub
或者可以从github安装最新的开发中版本(dev version),也可以⽤像是取代@master……
pip install git+github/jiaaro/pydub.git@master
-或者-
git clone github/jiaaro/pydub.git
-或者-
把pydub⽬录复制到你的python路径下
.Zip⽂件:
0x05 依赖
你可以仅使⽤纯Python打开或保存WAV⽂件。为了打开或保存⾮WAV⽂件——⽐如MP3——你需要或是。
回放
当你安装了这些的其中之⼀后,你就可以播放⾳频了(强烈推荐simpleaudio,哪怕你已经安装了ffmpeg/libav)
ffplay (通常随ffmpeg安装,参见下⼀部分)
avplay ((通常随libav安装,参见下⼀部分)
from pydub import AudioSegment
from pydub.playback import play
sound = AudioSegment.from_file("mysound.wav",format="wav")
play(sound)
0x06 安装ffmpeg
你可以安装libav或是ffmpeg。
Mac (使⽤):
# libav
brew install libav --with-libvorbis --with-sdl --with-theora
####    OR    >
# ffmpeg
brew install ffmpeg --with-libvorbis --with-sdl2 --with-theora
Linux (使⽤aptitude):
# libav
apt-get install libav-tools libavcodec-extra
####    OR    >
# ffmpeg
apt-get install ffmpeg libavcodec-extra
Windows:
1. 从下载并提取libav;
2. 添加libav /bin ⽂件夹到你的环境变量(PATH);
3. pip install pydub;
0x07 注意事项
AudioSegment对象是不可变的
Ogg导出和默认编码器
Ogg的没有指出该怎样使⽤编码器,这些选择被抛给了⽤户。Vorbis和Theora是⼀⼤堆可⽤的编码器中的⼀部分 (参见RFC第三页),可以被⽤于封装的数据。
⽅便起见,当没有指定输出为ogg格式的编码器时,会默认使⽤vorbis进⾏输出,像这样:
from pydub import AudioSegment
song = AudioSegment.from_mp3("test/data/test1.mp3")
# Is the same as:
0x08 使⽤范例
假设你有⼀个放满了mp4和flv视频的⽂件夹,并且你想要把它们转换为mp3,以便于⽤你的MP3播放器来听这些视频的声⾳。
import os
import glob
from pydub import AudioSegment
video_dir ='/home/johndoe/downloaded_videos/'# 你保存有视频的⽂件夹路径
extension_list =('*.mp4','*.flv')
os.chdir(video_dir)
for extension in extension_list:
for video in glob.glob(extension):
mp3_filename = os.path.splitext(os.path.basename(video))[0]+'.mp3'
AudioSegment.from_file(video).export(mp3_filename,format='mp3')
再举个例⼦如何?
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)
# 让我们只包含第⼀⾸歌的前30秒 (切⽚以毫秒为单位)
beginning_of_song = first_song[:30*1000]
playlist = beginning_of_song
for song in playlist_songs:
# 我们不想让结尾听起来像是突然停⽌,所以我们给它加上10秒的淡化
playlist = playlist.append(song, crossfade=(10*1000))
# 让我们给最后⼀⾸歌的结尾加上淡出
playlist = playlist.fade_out(30)
# 唔……我还想知道它有多长( len(audio_segment)返回值同样是以毫秒计的)
playlist_length =len(playlist)/(1000*60)
# 现在保存下来!
out_f =open("%s_minute_playlist.mp3"% playlist_length,'wb')
License ()
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and ass
ociated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
本段涉及许可证和版权信息,不予翻译,相关内容以英⽂原⽂为准。
pydub API⽂档
这个⽂档编写⼯作尚未结束。
(原⽂如有更新请提醒我同步更新它的新中⽂版本——译者)
如果你正在寻⼀些特殊的功能,去看⼀看或许是个好主意。核⼼功能⼤部分都在pydub/audio_segment.py中 – ⼀部分AudioSegment⽅法在pydub/effects.py模块中,同时通过注册效果处理(register_pydub_effect() 装饰器函数)来添加到AudioSegment中。
尚未正式编⼊⽂档的部分:
Playback 回放功能 (pydub.playback)
Signal Processing 信号处理 (压缩, EQ, 标准化, 变速 - pydub.effects, pydub.scipy_effects)
Signal generators 信号⽣成器 (正弦波, ⽅波, 锯齿波, ⽩噪声, 等等 - ators)
Effect registration system 效果注册系统 (基本上是 ister_pydub_effect 装饰器)
Silence utilities 静⾳效果 (静⾳探测, 分别静⾳, 等等 - pydub.silence)
AudioSegment()

发表评论