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链接:pydub-github

本文可以任意转载,但请注明出处!

0x01 快速开始

打开一个音频文件

打开一个WAV文件:

from pydub import AudioSegmentsong = 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 * 1000first_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 = song.reverse()

交叉淡化

交叉淡化(再一次强调,beginning和end都是不可变的)

# 1.5秒的淡入淡出
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支持的比特率来导出你的结果

awesome.export("mashup.mp3", format="mp3", bitrate="192k")

更多其他的ffmpeg所支持的参数可以通过给’parameters’参数传递一个列表来实现,列表中第一个应该是选项,而第二个是对应的参数。
特别注意一下,这些参数没有得到确认,支持的参数可能会受限于你所使用的特定的 ffmpeg / avlib 构建

# 使用预设MP3质量0(相当于lame -V0)
# ——lame是个MP3编码器,-V设置的是VBR压缩级别,品质从0到9依次递减(译者注)
awesome.export("mashup.mp3", format="mp3", parameters=["-q:a", "0"])# 混合到双声道并设置输出音量百分比(放大为原来的150%)
awesome.export("mashup.mp3", format="mp3", parameters=["-ac", "2", "-vol", "150"])

0x02 Debugging

人们在运行时遇到到大多数问题都与使用ffmpeg/avlib转换格式有关,pydub提供了一个logger输出子进程的调用来帮助你追踪问题

>>> import logging>>> l = logging.getLogger("pydub.converter")
>>> 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/42k8g72x4pq09tfp920d033r0000gn/T/tmpK5aLcZ'])
<pydub.audio_segment.AudioSegment object at 0x101b43e10>

不用担心转换中产生的临时文件,它们会被自动地清除。

0x03 Bugs和其他问题

你可以把bugs提交到我们的github issues tracker,还可以在StackOverflow上用pydub标签询问任何技术问题。我们始终对这两者保持关注。

0x04 安装

安装pydub很容易,但不要忘记安装ffmpeg/avlib(下一部分也在此文档中)

pip install pydub

或者可以从github安装最新的开发中版本(dev version),也可以用像是@v0.12.0这样的发布版本取代@master……

pip install git+https://github.com/jiaaro/pydub.git@master

-或者-

git clone https://github.com/jiaaro/pydub.git

-或者-
把pydub目录复制到你的python路径下
.Zip文件:点击这里

0x05 依赖

你可以仅使用纯Python打开或保存WAV文件。为了打开或保存非WAV文件——比如MP3——你需要ffmepg或是libav。

回放

当你安装了这些的其中之一后,你就可以播放音频了(强烈推荐simpleaudio,哪怕你已经安装了ffmpeg/libav)

  • simpleaudio
  • pyaudio
  • ffplay (通常随ffmpeg安装,参见下一部分)
  • avplay ((通常随libav安装,参见下一部分)
from pydub import AudioSegment
from pydub.playback import playsound = AudioSegment.from_file("mysound.wav", format="wav")
play(sound)

0x06 安装ffmpeg

你可以安装libav或是ffmpeg。

Mac (使用homebrew):

# 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. 从Windows binaries provided here下载并提取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")
song.export("out.ogg", format="ogg")
# Is the same as:
song.export("out.ogg", format="ogg", codec="libvorbis")

0x08 使用范例

假设你有一个放满了mp4和flv视频的文件夹,并且你想要把它们转换为mp3,以便于用你的MP3播放器来听这些视频的声音。

import os
import glob
from pydub import AudioSegmentvideo_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 AudioSegmentplaylist_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')playlist.export(out_f, format='mp3')

License (MIT License)

Copyright © 2011 James Robert, http://jiaaro.com

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated 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 信号生成器 (正弦波, 方波, 锯齿波, 白噪声, 等等 - pydub.generators)
  • Effect registration system 效果注册系统 (基本上是 pydub.utils.register_pydub_effect 装饰器)
  • Silence utilities 静音效果 (静音探测, 分别静音, 等等 - pydub.silence)

AudioSegment()

AudioSegment对象是不可变的,同时支持很多运算符。

from pydub import AudioSegment
sound1 = AudioSegment.from_file("/path/to/sound.wav", format="wav")
sound2 = AudioSegment.from_file("/path/to/another_sound.wav", format="wav")# sound1 增益 6 dB, 然后衰减 3.5 dB
louder = sound1 + 6
quieter = sound1 - 3.5# 将sound2添加到sound1
combined = sound1 + sound2# sound1重复三次
repeated = sound1 * 3# 持续时间
duration_in_milliseconds = len(sound1)# sound1的前五秒
beginning = sound1[:5000]# sound1的后五秒
end = sound1[-5000:]# 将sound1前5秒分割开来
slices = sound1[::5000]# 高级操作,如果你有原始音频数据:
sound = AudioSegment(# 原始音频数据 (bytes类型)data=b'…',# 2 byte (16 bit)采样sample_width=2,# 44.1 kHz 帧速率frame_rate=44100,# 立体声channels=2
)

任何连接了多个AudioSegment对象的操作,都确保这些对象有相同的声道数、帧速率、采样率、位深、等等。当这些属性不匹配时,较低质量的声音会被提升为和用较高质量的对象相同的声音质量,以免于降低音质:单声道将被转换为双声道,并且低采样率/帧速率的将被提升为需要的质量。如果你不想让这些行为进行,那你可能需要通过合适的类方法,明确地减少声道数、比特数、等等。

AudioSegment(…).from_file()

将一个音频文件打开为一个AudioSegment实例,并返回这个实例。方便起见,这里还提供了其他的一些包装,但你应该仅仅直接地使用他们。

from pydub import AudioSegment# wave和raw不需要使用ffmpeg
wav_audio = AudioSegment.from_file("/path/to/sound.wav", format="wav")
raw_audio = AudioSegment.from_file("/path/to/sound.raw", format="raw",frame_rate=44100, channels=2, sample_width=2)# 其他的所有格式都需要使用ffmpeg
mp3_audio = AudioSegment.from_file("/path/to/sound.mp3", format="mp3")# 使用一个你已经打开了的文件 (advanced …ish)
with open("/path/to/sound.wav", "rb") as wav_file:audio_segment = AudioSegment.from_file(wav_file, format="wav")# 同时,对应python 3.6以上版本支持os.PathLike方案
from pathlib import Path
wav_path = Path("path/to/sound.wav")
wav_audio = AudioSegment.from_file(wav_path)

第一个参数是文件的读取路径(以字符串string形式传递)或一个用来读取的文件句柄。

支持的关键字参数:

  • format | 示例: "aif" | 默认: "mp3" 输出文件的格式。 原生支持 "wav""raw",需要 ffmpeg 以支持其他的所有格式. "raw" 文件需要三个额外的关键字参数, sample_width, frame_rate, 和 channels, 用以下表述: raw only。这些额外信息之所以需要,是因为原始音频文件不像WAV文件那样拥有一个自身信息的文件头。
  • sample_width | 示例: 2 raw only — 用 1 表示 8-bit 音频, 2 表示 16-bit (CD品质) and 4 表示 32-bit。这是每种取样的字节数。
  • channels | 示例: 1 raw only1 表示单声道, 2 表示双声道。
  • frame_rate | 示例: 2 raw only — 也称为采样率, 其值一般为 44100 (44.1kHz - CD音频), 或是 48000 (48kHz - DVD音频)

AudioSegment(…).export()

AudioSegment对象写入文件 – 返回一个输出文件的文件句柄 (不过,你不必为此做任何事)。

from pydub import AudioSegment
sound = AudioSegment.from_file("/path/to/sound.wav", format="wav")# 简单导出
file_handle = sound.export("/path/to/output.mp3", format="mp3")# 更复杂的导出
file_handle = sound.export("/path/to/output.mp3",format="mp3",bitrate="192k",tags={"album": "The Bends", "artist": "Radiohead"},cover="/path/to/albumcovers/radioheadthebends.jpg")# 将声音分割为5秒的片段并导出
for i, chunk in enumerate(sound[::5000]):with open("sound-%s.mp3" % i, "wb") as f:chunk.export(f, format="mp3")

第一个参数是用于输出的位置(以string类型), 或一个用于输出的文件句柄。如果你没有给出输出文件或文件句柄,将会创建一个临时文件。

支持的关键字参数:

  • format | 示例: "aif" | 默认: "mp3" 格式的输出文件。原生支持"wav""raw" ,需要ffmpeg以支持其他格式。
  • codec | 示例: "libvorbis" 对于可能包含用不同编解码器编码的内容,你可以指定你编码时想要使用的编解码器。举个例子, "ogg"格式通常使用"libvorbis"编码器. (需要ffmpeg)
  • bitrate | 示例: "128k" 对于使用压缩的格式,你可以设置编码时所使用的编码器 (需要 ffmpeg). 每一种编码器接受不同的比特率参数,详情参见ffmpeg文档 (比特率参数通常写作 -b, -ba-a:b).
  • tags | 示例: {"album": "1989", "artist": "Taylor Swift"} 允许你给编码器提供媒体信息标签 (需要ffmpeg). 不是所有格式都可以使用标签 (mp3 可以).
  • parameters | 示例: ["-ac", "2"] 输入额外的 命令行参数 来调用ffmepg. 这些参数可以被添加到调用的末尾 (在输出文件部分).
  • id3v2_version | 示例: "3" | 默认: "4" 设置ffmpeg使用的 ID3v2 版本来添加标签到输出文件. 如果你想让windows文件管理器显示标签, 在这使用 "3" (source).
  • cover | 示例: "/path/to/imgfile.png" 使你可以给音频文件添加封面 (到封面图片的路径). 目前, 只有MP3可以使用这个关键字参数. 封面必须是jpeg, png, bmp,或 tiff格式的文件.

AudioSegment.empty()

创建一个持续时间为零的AudioSegment对象.

from pydub import AudioSegment
empty = AudioSegment.empty()len(empty) == 0

这是一个很有用的、用于将许多音频集合在一起的循环:

from pydub import AudioSegmentsounds = [AudioSegment.from_wav("sound1.wav"),AudioSegment.from_wav("sound2.wav"),AudioSegment.from_wav("sound3.wav"),
]playlist = AudioSegment.empty()
for sound in sounds:playlist += sound

AudioSegment.silent()

创建一个静音的音频段, 可以被用作占位符, 保存间隔,或用做一个用于放置其他声音在其上的画布.

from pydub import AudioSegmentten_second_silence = AudioSegment.silent(duration=10000)

支持的关键字参数:

  • duration | 示例: 3000 | 默认: 1000 (1 秒) 静音AudioSegment对象的长度,以毫秒为单位。
  • frame_rate | 示例 44100 | 默认: 11025 (11.025 kHz) 静音AudioSegment对象的帧速率 (即采样率) 以Hz为单位

AudioSegment.from_mono_audiosegments()

用多个单声道音频段创建多声道音频段(两个或更多). 每个单声道音频段都应该有相同的时长以及帧速率.

from pydub import AudioSegmentleft_channel = AudioSegment.from_wav("sound1.wav")
right_channel = AudioSegment.from_wav("sound1.wav")stereo_sound = AudioSegment.from_mono_audiosegments(left_channel, right_channel)

AudioSegment(…).dBFS

以dBFS (相当于可能的最大db数的响度)为单位返回AudioSegment对象的响度.一段方波的最大振幅会被简单地定为 0 dBFS (最大响度), 然而一段正弦波的最大振幅会被定为 -3 dBFS.

from pydub import AudioSegment
sound = AudioSegment.from_file("sound1.wav")loudness = sound.dBFS

AudioSegment(…).channels

该音频段的声道数 (1 表示单声道, 2 表示双声道)

from pydub import AudioSegment
sound = AudioSegment.from_file("sound1.wav")channel_count = sound.channels

AudioSegment(…).sample_width

Number of bytes in each sample (1 means 8 bit, 2 means 16 bit, etc). CD Audio is 16 bit, (sample width of 2 bytes).

from pydub import AudioSegment
sound = AudioSegment.from_file("sound1.wav")bytes_per_sample = sound.sample_width

AudioSegment(…).frame_rate

CD音频的采样率为44.1kHz,这意味着帧速率会是 44100 (与采样率相同, 参见 frame_width). 一般值为 44100 (CD), 48000 (DVD), 22050, 24000, 1200011025.

from pydub import AudioSegment
sound = AudioSegment.from_file("sound1.wav")frames_per_second = sound.frame_rate

AudioSegment(…).frame_width

每个"frame(帧)"的字节数. 每帧包含每个声道的一次采样 (所以对于双声道而言,每帧被播放时都有两次采样). frame_widthchannels * sample_width 相同. 对于CD音频这个值将会是 4 (2 双声道,每次采样为 2 字节).

from pydub import AudioSegment
sound = AudioSegment.from_file("sound1.wav")bytes_per_frame = sound.frame_width

AudioSegment(…).rms

响度的度量. 用于计算 dBFS, 一种你应该在大多数情况下使用的单位. 响度是以对数计的 (rms 不是), 这使得 dB 成为一种更自然的响度衡量方式.

from pydub import AudioSegment
sound = AudioSegment.from_file("sound1.wav")loudness = sound.rms

AudioSegment(…).max

AudioSegment中每次采样的最大振幅. 对于像音量标准化这样的操作很有用 (在pydub.effects.normalize中提供).

from pydub import AudioSegment
sound = AudioSegment.from_file("sound1.wav")peak_amplitude = sound.max

AudioSegment(…).max_dBFS

AudioSegment任何一帧的最大振幅, 以dBFS (相对于可能的最大振幅的值)为单位. 对于像音量标准化这样的操作很有用 (在 pydub.effects.normalize 中提供).

from pydub import AudioSegment
sound = AudioSegment.from_file("sound1.wav")normalized_sound = sound.apply_gain(-sound.max_dBFS)

AudioSegment(…).duration_seconds

以秒为单位返回AudioSegment的持续时间 (len(sound) 返回毫秒). 这个方法是为了方便提供的; 它在内部调用了 len() .

from pydub import AudioSegment
sound = AudioSegment.from_file("sound1.wav")assert sound.duration_seconds == (len(sound) / 1000.0)

AudioSegment(…).raw_data

音频段的原始音频数据. 对于与其他音频库协作或是使用什么需要字节流格式的音频数据的奇奇怪怪的API时很有用. 当想要实现效果器或是其他什么直接数字信号处理器(DPS)时也很有用.

You probably don’t need this, but if you do… you’ll know.

from pydub import AudioSegment
sound = AudioSegment.from_file("sound1.wav")raw_audio_data = sound.raw_data

AudioSegment(…).frame_count()

返回一个AudioSegment的帧数目. 你可以通过在音频AudioSegment中的毫秒数用一个关键字参数 ms 取得帧的数目 (用于切片, 等等).

from pydub import AudioSegment
sound = AudioSegment.from_file("sound1.wav")number_of_frames_in_sound = sound.frame_count()number_of_frames_in_200ms_of_sound = sound.frame_count(ms=200)

支持的关键字参数:

  • ms | 示例: 3000 | 默认: None (输入AudioSegment的持续时间) 指定该参数后, 该方法会返回AudioSegment在 X 毫秒中的帧的数目

AudioSegment(…).append()

通过添加另一个 AudioSegment对象,返回一个新的 AudioSegment对象。 对于被添加的这一个对象 (即添加到末尾的这一个), 可以任意使用淡化. 当使用+添加AudioSegment对象时.AudioSegment(…).append()会被在内部使用。

默认为 100ms (0.1 秒) 的淡化会被用于消除劈啪声和爆裂的声音.

from pydub import AudioSegment
sound1 = AudioSegment.from_file("sound1.wav")
sound2 = AudioSegment.from_file("sound2.wav")# 默认 100 ms 淡化
combined = sound1.append(sound2)# 5000 ms 淡化
combined_with_5_sec_crossfade = sound1.append(sound2, crossfade=5000)# 不进行淡化
no_crossfade1 = sound1.append(sound2, crossfade=0)# 不进行淡化
no_crossfade2 = sound1 + sound2

支持的关键字参数:

  • crossfade | 示例: 3000 | 默认: 100 (输入AudioSegment的持续时间) 当这个参数被指定后, 该方法返回AudioSegment在X毫秒内的帧数目

AudioSegment(…).overlay()

覆盖一个 AudioSegment在其上. 结果得到的 AudioSegment they 会被同步播放. 如果被覆盖的 AudioSegment 比这一个长, 结果会被截断(所以被覆盖的声音的结果会被切断). 结果总会和这个 AudioSegment相同,甚至当使用looptimes 关键字参数时.

尽管 AudioSegment 对象是不可变的, 绕过这个限制覆盖一段短的声音到长的上, 或通过创建一个拥有合适时长的 AudioSegment 对象,然后两个声音到这一个上.

from pydub import AudioSegment
sound1 = AudioSegment.from_file("sound1.wav")
sound2 = AudioSegment.from_file("sound2.wav")played_togther = sound1.overlay(sound2)sound2_starts_after_delay = sound1.overlay(sound2, position=5000)volume_of_sound1_reduced_during_overlay = sound1.overlay(sound2, gain_during_overlay=-8)sound2_repeats_until_sound1_ends = sound1.overlay(sound2, loop=true)sound2_plays_twice = sound1.overlay(sound2, times=2)# 假设 sound1 长30秒,并且 sound2 长5秒:
sound2_plays_a_lot = sound1.overlay(sound2, times=10000)
len(sound1) == len(sound2_plays_a_lot)

支持的关键字参数:

  • position | 示例: 3000 | 默认: 0 (该AudioSegment的开头) 覆盖 AudioSegment会在X毫秒后被覆盖
  • loop | 示例: True | 默认: False (输入 AudioSegment的长度)覆盖AudioSegment会被重复 (在 position 处开始) 直到该AudioSegment结束
  • times | 示例: 4 | 默认: 1 (输入 AudioSegment 的持续时间) 覆盖AudioSegment会被重复X次 (在position处开始) 但仍然会受限于该 AudioSegment 的长度被截断
  • gain_during_overlay | 示例: -6.0 | 默认: 0 (在覆盖中不会改变音量) 再覆盖过程中,以该dB数改变原始音频的音量(增加或减少). 该参数可用于在覆盖音频播放过程中降低原始音频的音量.

AudioSegment(…).apply_gain(gain)

改变AudioSegment的振幅 (总体上的响度).增益以dB为单位指定. 这个方法被用在 + 运算符的内部.

from pydub import AudioSegment
sound1 = AudioSegment.from_file("sound1.wav")# 给 sound1 增益 3.5 dB
louder_via_method = sound1.apply_gain(+3.5)
louder_via_operator = sound1 + 3.5# 给 sound1 衰减 5.7 dB
quieter_via_method = sound1.apply_gain(-5.7)
quieter_via_operator = sound1 - 5.7

AudioSegment(…).fade()

一个更一般的 (更灵活的) 淡化方法. 你可以指定 startend, 或指定两者之一和持续时间 (例如, startduration).

from pydub import AudioSegment
sound1 = AudioSegment.from_file("sound1.wav")fade_louder_for_3_seconds_in_middle = sound1.fade(to_gain=+6.0, start=7500, duration=3000)fade_quieter_beteen_2_and_3_seconds = sound1.fade(to_gain=-3.5, start=2000, end=3000)# 更简单易用的方式是使用 .fade_in() 方法. 注意: -120dB 基本是静音.
fade_in_the_hard_way = sound1.fade(from_gain=-120.0, start=0, duration=5000)
fade_out_the_hard_way = sound1.fade(to_gain=-120.0, end=0, duration=5000)

支持的关键字参数

  • to_gain | 示例: -3.0 | 默认: 0 (0dB, 不做任何改变) 结果会改变淡化的末端. -6.0 意味着淡化会从 0dB (不做任何改变) 到 -6dB, 并且在淡化后面的音频响度都会衰减6dB.
  • from_gain | 示例: -3.0 | 默认: 0 (0dB, 不做任何改变) 改变淡化的开端. -6.0 意味着淡化 (以及所有在淡化之前的音频) 都会被衰减-6dB 然后淡化到 0dB – 在淡化后面的剩余部分都会进行0dB的增益 (即不改变).
  • start | 示例: 7500 | 没有默认!没有淡化开始的默认位置! (以毫秒为单位). 5500 意味着淡化会在5.5秒后开始.
  • end | 示例: 4 | 没有默认!覆盖AudioSegment会被重复 X 次 (从 position 开始) 但仍然会受限于AudioSegment而被截断
  • duration | 示例: 4 | 没有默认! 你可以和 startend 一同使用持续时间(duration), 用于替代同时指定这两者 - 这功能是为方便而提供的.

AudioSegment(…).fade_out()

AudioSegment的末尾淡出到静音. 其内部使用了 .fade() .

支持的关键字参数

  • duration | 示例: 5000 | 没有默认值 淡化的时长(以毫秒为单位). 在内部直接传递给了 .fade()

AudioSegment(…).fade_in()

AudioSegment 的开头从静音淡入.其内部使用了 .fade() .

支持的关键字参数

  • duration | 示例: 5000 | 没有默认值 淡化的时长(以毫秒为单位). 在内部直接传递给了 .fade()

AudioSegment(…).reverse()

产生一个AudioSegment对象反向播放的副本. 用于 Pink Floyd, screwing around, 和一些音频处理算法.

AudioSegment(…).set_sample_width()

通过指定采样宽度(以字节为单位)来创建一个与该AudioSegment等效的版本。增大这个值通常不会导致质量的下降,但降低这个值一定会导致质量的下降。更高的采样宽度意味着更宽的动态范围。

AudioSegment(…).set_frame_rate()

通过指帧速率(以赫兹为单位)来创建一个与该AudioSegment等效的版本。增大这个值通常不会导致质量的下降,但降低这个值一定会导致质量的下降。更高的帧速率意味着更大的频响特征(即可以表示更高的频率)

AudioSegment(…).set_channels()

通过指声道数(1表示单声道,2表示双声道)来创建一个与该AudioSegment等效的版本。从单声道转换至双声道不会有任何听得出来的改变,但从双声道转换为单声道可能会导致质量损失(但仅当左右声道有不同时)

AudioSegment(…).split_to_mono()

把一个双声道 AudioSegment 对象分为两个,每个都是其中的一个声道(左或右). 返回一个含有新AudioSegment对象的列表其中左声道索引为0,右声道索引为1.

AudioSegment(…).apply_gain_stereo()

from pydub import AudioSegment
sound1 = AudioSegment.from_file("sound1.wav")# 将左声道衰减6dB,并将右声道提升2dB
stereo_balance_adjusted = sound1.apply_gain_stereo(-6, +2)

对一个双声道AudioSegment的左右声道分别应用增益.如果这个AudioSegment是单声道的,它在应用增益前会被转换为双声道.

两个增益参数都以dB为单位指出.

AudioSegment(…).pan()

from pydub import AudioSegment
sound1 = AudioSegment.from_file("sound1.wav")# pan the sound 15% to the right
panned_right = sound1.pan(+0.15)# pan the sound 50% to the left
panned_left = sound1.pan(-0.50)

接受一个应该在-1.0 (100% left)到+1.0 (100% right)之间的位置参数,pan amount
pan_amount == 0.0 时左右平衡(即声像位置)不会改变.

改变声像不会影响感知音量的大小,但由于改变后一边的音量会减小,另一边的音量需要增大以补偿.当声像左移得很厉害时, 左声道会被提升3dB并且右声道会被静音(反之亦然).

AudioSegment(…).get_array_of_samples()

以采样数组的形式返回原始音频数据。注意:如果音频有多个声道,每个声道的采样会被连起来存放 – 举个例子,双声道音频会像这样: [sample_1_L, sample_1_R, sample_2_L, sample_2_R, …].

这个方法主要用于使用效果和其他进行其他处理。

from pydub import AudioSegment
sound = AudioSegment.from_file(“sound1.wav”)samples = sound.get_array_of_samples()# 然后修改采样...new_sound = sound._spawn(samples)

注意一下,当使用numpyscipy时,在生成前需要把他们转换回数组

import array
import numpy as np
from pydub import AudioSegmentsound = AudioSegment.from_file(“sound1.wav”)
samples = sound.get_array_of_samples()# 对音频数据的示例操作
shifted_samples = np.right_shift(samples, 1)# 现在需要把它们转换成一个 array.array
shifted_samples_array = array.array(sound.array_type, shifted_samples)new_sound = sound._spawn(shifted_samples_array)

AudioSegment(…).get_dc_offset()

返回一个在-1.0到1.0的值表示该声道在直流偏移(DC offset)。该方法使用audioop.avg()统计b并通过采样最大值标准化结果。

支持的关键字参数

  • channel | 示例: 2 | 默认: 1 选择左声道(1) 或右声道(2)来统计直流偏移(DC offset). 如果该段为单声道,这个值将被忽略.

AudioSegment(…).remove_dc_offset()

从声道移除直流偏移(DC offset)。这个方法通过使用audioop.bias()实现,所以要小心溢出。

支持的关键字参数

  • channel | 示例: 2 | 默认值: None 选择左声道(1)或右声道(2)移除直流偏移(DC offset)。如果值为None, 从所有可用的声道中移除。如果该段为单声道,这个值将被忽略.
  • offset | 示例: -0.1 | 默认值: None 将从声道移除的偏移的值。如果这个值为None,将自动计算偏移. 偏移值必须在-1.0到1.0之间.

效果

通过AudioSegment对象生效的DSP效果的集合

AudioSegment(…).invert_phase()

创建该AudioSegment的一个副本并反转信号的相位。可以生成噪音的反相位波以抑制或消除噪音。

github上的API文档只更新到了这里,现已完成全文翻译,如果github上有更新可以评论或给我发邮件,我会第一时间更新中文版。

因为我并没有学过声学相关知识,可能有很多术语翻译错误,如果发现哪处术语翻译错误望不吝赐教,有什么疑问也可以在下面的评论区发出来共同讨论,可以的话我会尽快回复。

最好用的python音频库之一:pydub的中文文档(含API)相关推荐

  1. Python 深度学习库 Keras 发布官方中文文档,这里有你需要了解的一切

    今年1月,Keras作者.谷歌AI研究员François Chollet在推特上发出召唤:讲中文的Keras用户们,是否有人愿意帮忙一起搞个Keras文档的中文版? 一个多月后,官方中文文档来了. K ...

  2. Python爱好者周知:Scikit-Learn中文文档正式发布

    整理 | 费棋 出品 | AI科技大本营(公众号ID:rgznai100) 近日,Scikit-Learn 中文文档已由开源组织 ApacheCN 完成校对.该中文文档依然包含了 Scikit-Lea ...

  3. python中文语法提示_Python官方中文文档上线了:各种教程已汉化,不用再苦等野生翻译...

    终于,Python有官方中文文档了. 从今往后,不论是版本新变化,入门教程,语法讲解,Python模块安装指南--各种各样的手册,都可以直接看中文了. △ 不是谷歌翻译哟 你看,比起英文原版,中文的语 ...

  4. python模块介绍-Tornado:Tornado中文文档-概述

    2019独角兽企业重金招聘Python工程师标准>>> 快速链接 tornado-4.1.tar.gz, tornado最新版本 tornado源码@github 邮件列表:讨论.最 ...

  5. python keras安装配置_Keras官方中文文档:Keras安装和配置指南(Linux)

    关于计算机的硬件配置说明 推荐配置 如果您是高校学生或者高级研究人员,并且实验室或者个人资金充沛,建议您采用如下配置: 主板:X299型号或Z270型号 CPU: i7-6950X或i7-7700K ...

  6. python 停止工作 scapy_常见问题 - Scapy 中文文档_教程_Python开发社区

    常见问题 我的 TCP 连接被 Scapy 或者是我的内核重置了 内核不知道 Scapy 在他背后做什么. 如果 Scapy 发送 SYN,目标回复 SYN-ACK,并且你的内核看到它,它将回复 RS ...

  7. 单元测试断言库:chai.js中文文档

    原文档地址:https://www.chaijs.com/api/bdd/ BDD风格包含expect和should.它们以相同的链式结构进行断言,它们的不同之处在于初始的断言构造.可以查看风格指南来 ...

  8. python playsound安装_ python音频库:Windows下pydub安装配置、过程出现的问题及常用API ...

    < python音频库:Windows下pydub安装配置.过程出现的问题及常用API > 背景 刚从B站上看过倒放挑战之后也想体验下,心血来潮一个晚上完成了基本的实现.其中倒放与播放部分 ...

  9. python pandas库读取excel/csv中指定行或列数据详解

    通过阅读表格,可以发现Pandas中提供了非常丰富的数据读写方法,下面这篇文章主要给大家介绍了关于python利用pandas库读取excel/csv中指定行或列数据的相关资料,需要的朋友可以参考下 ...

最新文章

  1. python爬虫图片-python爬虫(爬取图片)
  2. ReentrantLock源码
  3. 浏览器打不开网页,但是还可以聊qq?
  4. 天地图专题七:行政区域标记,热力图(以广西为例)
  5. 《土豆荣耀》重构笔记(七)控制角色移动并添加音效
  6. VB.net小技巧——ClickOnce应用程序版本号自动递增
  7. 使用Python开发游戏运行脚本(三)图片查找
  8. android 电源管理 和 Doze 模式
  9. android兼容低版本方法,Android 应用程序向低版本兼容的问题
  10. vue3和vue2中mian.js的区别,在其中配置路由为例
  11. matplotlib如何绘制网格线
  12. 适用于高速公路的查询软件,数据稳定、免维护,可查询高速路况、路线规划、未来天气等信息
  13. vba 读取图片尺寸
  14. 数据结构学习问题集结
  15. 网络安全架构:如何理解P2DR模型
  16. AI软件视频生成工具 抖音蓝V运营小助手
  17. ms08_067,ms10_046漏洞复现与利用
  18. oracle中备份表的创建,ORACLE DB创建步骤-运用冷备份和RMAN
  19. 别把自己变成了“二等公民”
  20. TranslateAnimation动画

热门文章

  1. 手写模拟器-将文档文字改成拟人手写字
  2. 尝试“ 网红营销 ”却狠狠摔了一跤,问题出在了哪?
  3. (4)事件处理——(12)事件的缩写(Shorthand events)
  4. Linux目录树与文件系统(挂载)
  5. IS-IS协议分析与配置
  6. vue3 函数式组件调试报警 Non-function value encountered for default slot
  7. LocalDateTime获取当日00:00、结束时间23.59与当月第一天00.00,月末最后一天23.59
  8. linux中的cal 查看日历、用户管理命令、useradd 添加新用户
  9. blr不是已知的css属性名,css笔记
  10. centos jdk tomcat mysql_centos 下安装jdk+tomcat+mysql