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
本文可以任意转载,但请注明出处!
打开一个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
音频段是不可变的
# 音频不可以被修改
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"])
人们在运行时遇到到大多数问题都与使用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'])
不用担心转换中产生的临时文件,它们会被自动地清除。
你可以把bugs提交到我们的github issues tracker,还可以在StackOverflow上用pydub标签询问任何技术问题。我们始终对这两者保持关注。
安装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文件:点击这里
你可以仅使用纯Python打开或保存WAV文件。为了打开或保存非WAV文件——比如MP3——你需要ffmepg或是libav。
当你安装了这些的其中之一后,你就可以播放音频了(强烈推荐simpleaudio,哪怕你已经安装了ffmpeg/libav)
from pydub import AudioSegment
from pydub.playback import play
sound = AudioSegment.from_file("mysound.wav", format="wav")
play(sound)
你可以安装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:
/bin
文件夹到你的环境变量(PATH);pip install pydub
;AudioSegment
对象是不可变的
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")
假设你有一个放满了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')
playlist.export(out_f, format='mp3')
这个文档编写工作尚未结束。
(原文如有更新请提醒我同步更新它的新中文版本——译者)
如果你正在寻找一些特殊的功能,去看一看源代码或许是个好主意。核心功能大部分都在pydub/audio_segment.py
中 – 一部分AudioSegment
方法在 pydub/effects.py
模块中,同时通过注册效果处理(register_pydub_effect()
装饰器函数)来添加到AudioSegment
中。
尚未正式编入文档的部分:
pydub.playback
)pydub.effects
, pydub.scipy_effects
)pydub.generators
)pydub.utils.register_pydub_effect
装饰器)pydub.silence
)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 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
only — 1
表示单声道, 2
表示双声道。frame_rate
| 示例: 2
raw
only — 也称为采样率, 其值一般为 44100
(44.1kHz - CD音频), 或是 48000
(48kHz - DVD音频)将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
对象.
from pydub import AudioSegment
empty = AudioSegment.empty()
len(empty) == 0
这是一个很有用的、用于将许多音频集合在一起的循环:
from pydub import AudioSegment
sounds = [
AudioSegment.from_wav("sound1.wav"),
AudioSegment.from_wav("sound2.wav"),
AudioSegment.from_wav("sound3.wav"),
]
playlist = AudioSegment.empty()
for sound in sounds:
playlist += sound
创建一个静音的音频段, 可以被用作占位符, 保存间隔,或用做一个用于放置其他声音在其上的画布.
from pydub import AudioSegment
ten_second_silence = AudioSegment.silent(duration=10000)
支持的关键字参数:
duration
| 示例: 3000
| 默认: 1000
(1 秒) 静音AudioSegment
对象的长度,以毫秒为单位。frame_rate
| 示例 44100
| 默认: 11025
(11.025 kHz) 静音AudioSegment
对象的帧速率 (即采样率) 以Hz为单位用多个单声道音频段创建多声道音频段(两个或更多). 每个单声道音频段都应该有相同的时长以及帧速率.
from pydub import AudioSegment
left_channel = AudioSegment.from_wav("sound1.wav")
right_channel = AudioSegment.from_wav("sound1.wav")
stereo_sound = AudioSegment.from_mono_audiosegments(left_channel, right_channel)
以dBFS (相当于可能的最大db数的响度)为单位返回AudioSegment
对象的响度.一段方波的最大振幅会被简单地定为 0 dBFS (最大响度), 然而一段正弦波的最大振幅会被定为 -3 dBFS.
from pydub import AudioSegment
sound = AudioSegment.from_file("sound1.wav")
loudness = sound.dBFS
该音频段的声道数 (1 表示单声道, 2 表示双声道)
from pydub import AudioSegment
sound = AudioSegment.from_file("sound1.wav")
channel_count = sound.channels
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
CD音频的采样率为44.1kHz,这意味着帧速率
会是 44100
(与采样率相同, 参见 frame_width
). 一般值为 44100
(CD), 48000
(DVD), 22050
, 24000
, 12000
和 11025
.
from pydub import AudioSegment
sound = AudioSegment.from_file("sound1.wav")
frames_per_second = sound.frame_rate
每个"frame(帧)"的字节数. 每帧包含每个声道的一次采样 (所以对于双声道而言,每帧被播放时都有两次采样). frame_width
与 channels * sample_width
相同. 对于CD音频这个值将会是 4 (2 双声道,每次采样为 2 字节).
from pydub import AudioSegment
sound = AudioSegment.from_file("sound1.wav")
bytes_per_frame = sound.frame_width
响度的度量. 用于计算 dBFS, 一种你应该在大多数情况下使用的单位. 响度是以对数计的 (rms 不是), 这使得 dB 成为一种更自然的响度衡量方式.
from pydub import AudioSegment
sound = AudioSegment.from_file("sound1.wav")
loudness = sound.rms
在AudioSegment
中每次采样的最大振幅. 对于像音量标准化这样的操作很有用 (在pydub.effects.normalize
中提供).
from pydub import AudioSegment
sound = AudioSegment.from_file("sound1.wav")
peak_amplitude = sound.max
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
对象,返回一个新的 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
在其上. 结果得到的 AudioSegment
they 会被同步播放. 如果被覆盖的 AudioSegment
比这一个长, 结果会被截断(所以被覆盖的声音的结果会被切断). 结果总会和这个 AudioSegment
相同,甚至当使用loop
和 times
关键字参数时.
尽管 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
的振幅 (总体上的响度).增益以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()
一个更一般的 (更灵活的) 淡化方法. 你可以指定 start
和 end
, 或指定两者之一和持续时间 (例如, start
和 duration
).
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
| 没有默认! 你可以和 start
或 end
一同使用持续时间(duration), 用于替代同时指定这两者 - 这功能是为方便而提供的.在AudioSegment
的末尾淡出到静音. 其内部使用了 .fade()
.
支持的关键字参数
duration
| 示例: 5000
| 没有默认值 淡化的时长(以毫秒为单位). 在内部直接传递给了 .fade()
在 AudioSegment
的开头从静音淡入.其内部使用了 .fade()
.
支持的关键字参数
duration
| 示例: 5000
| 没有默认值 淡化的时长(以毫秒为单位). 在内部直接传递给了 .fade()
产生一个AudioSegment
对象反向播放的副本. 用于 Pink Floyd, screwing around, 和一些音频处理算法.
通过指定采样宽度(以字节为单位)来创建一个与该AudioSegment
等效的版本。增大这个值通常不会导致质量的下降,但降低这个值一定会导致质量的下降。更高的采样宽度意味着更宽的动态范围。
通过指帧速率(以赫兹为单位)来创建一个与该AudioSegment
等效的版本。增大这个值通常不会导致质量的下降,但降低这个值一定会导致质量的下降。更高的帧速率意味着更大的频响特征(即可以表示更高的频率)
通过指声道数(1
表示单声道,2
表示双声道)来创建一个与该AudioSegment
等效的版本。从单声道转换至双声道不会有任何听得出来的改变,但从双声道转换为单声道可能会导致质量损失(但仅当左右声道有不同时)
把一个双声道 AudioSegment
对象分为两个,每个都是其中的一个声道(左或右). 返回一个含有新AudioSegment
对象的列表其中左声道索引为0,右声道索引为1.
from pydub import AudioSegment
sound1 = AudioSegment.from_file("sound1.wav")
# 将左声道衰减6dB,并将右声道提升2dB
stereo_balance_adjusted = sound1.apply_gain_stereo(-6, +2)
对一个双声道AudioSegment
的左右声道分别应用增益.如果这个AudioSegment
是单声道的,它在应用增益前会被转换为双声道.
两个增益参数都以dB为单位指出.
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并且右声道会被静音(反之亦然).
以采样数组的形式返回原始音频数据。注意:如果音频有多个声道,每个声道的采样会被连起来存放 – 举个例子,双声道音频会像这样: [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)
注意一下,当使用numpy
或scipy
时,在生成前需要把他们转换回数组
import array
import numpy as np
from pydub import AudioSegment
sound = 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)
返回一个在-1.0到1.0的值表示该声道在直流偏移(DC offset)。该方法使用audioop.avg()
统计b并通过采样最大值标准化结果。
支持的关键字参数
channel
| 示例: 2
| 默认: 1
选择左声道(1) 或右声道(2)来统计直流偏移(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
的一个副本并反转信号的相位。可以生成噪音的反相位波以抑制或消除噪音。