失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 最好用的python音频库之一:pydub的中文文档(含API)

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

时间:2022-01-16 20:09:03

相关推荐

最好用的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链接: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:]

让开头更响和让结束更弱

使开头十秒的声音变得更响并使结束的五秒声音变弱:

# 声音增益6dBbeginning = first_10_seconds + 6# 声音减弱3dBend = 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 ', '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+/jiaaro/pydub.git@master

-或者-

git clone /jiaaro/pydub.git

-或者-

把pydub目录复制到你的python路径下

.Zip文件:点击这里

0x05 依赖

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

回放

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

simpleaudiopyaudioffplay (通常随ffmpeg安装,参见下一部分)avplay ((通常随libav安装,参见下一部分)

from pydub import AudioSegmentfrom pydub.playback import playsound = AudioSegment.from_file("mysound.wav", format="wav")play(sound)

0x06 安装ffmpeg

你可以安装libav或是ffmpeg。

Mac (使用homebrew):

# libavbrew install libav --with-libvorbis --with-sdl --with-theora#### OR ###### ffmpegbrew install ffmpeg --with-libvorbis --with-sdl2 --with-theora

Linux (使用aptitude):

# libavapt-get install libav-tools libavcodec-extra#### OR ###### ffmpegapt-get install ffmpeg libavcodec-extra

Windows:

从Windows binaries provided here下载并提取libav;添加libav/bin文件夹到你的环境变量(PATH);pip install pydub

0x07 注意事项

AudioSegment对象是不可变的

Ogg导出和默认编码器

Ogg的官方说明没有指出该怎样使用编码器,这些选择被抛给了用户。Vorbis和Theora是一大堆可用的编码器中的一部分 (参见RFC第三页),可以被用于封装的数据。

方便起见,当没有指定输出为ogg格式的编码器时,会默认使用vorbis进行输出,像这样:

from pydub import AudioSegmentsong = 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 osimport globfrom 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 globfrom 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_songfor 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 © James Robert,

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 AudioSegmentsound1 = 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 dBlouder = sound1 + 6quieter = sound1 - 3.5# 将sound2添加到sound1combined = 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不需要使用ffmpegwav_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)# 其他的所有格式都需要使用ffmpegmp3_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 Pathwav_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, 用以下表述:rawonly。这些额外信息之所以需要,是因为原始音频文件不像WAV文件那样拥有一个自身信息的文件头。sample_width| 示例:2rawonly— 用1表示 8-bit 音频,2表示 16-bit (CD品质) and4表示 32-bit。这是每种取样的字节数。channels| 示例:1rawonly1表示单声道,2表示双声道。frame_rate| 示例:2rawonly— 也称为采样率, 其值一般为44100(44.1kHz - CD音频), 或是48000(48kHz - DVD音频)

AudioSegment(…).export()

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

from pydub import AudioSegmentsound = 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 AudioSegmentempty = 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 AudioSegmentsound = AudioSegment.from_file("sound1.wav")loudness = sound.dBFS

AudioSegment(…).channels

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

from pydub import AudioSegmentsound = 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 AudioSegmentsound = 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 AudioSegmentsound = 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 AudioSegmentsound = AudioSegment.from_file("sound1.wav")bytes_per_frame = sound.frame_width

AudioSegment(…).rms

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

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

AudioSegment(…).max

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

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

AudioSegment(…).max_dBFS

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

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

AudioSegment(…).duration_seconds

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

from pydub import AudioSegmentsound = 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 AudioSegmentsound = AudioSegment.from_file("sound1.wav")raw_audio_data = sound.raw_data

AudioSegment(…).frame_count()

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

from pydub import AudioSegmentsound = 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 AudioSegmentsound1 = 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在其上. 结果得到的AudioSegmentthey 会被同步播放. 如果被覆盖的AudioSegment比这一个长, 结果会被截断(所以被覆盖的声音的结果会被切断). 结果总会和这个AudioSegment相同,甚至当使用looptimes关键字参数时.

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

from pydub import AudioSegmentsound1 = 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 AudioSegmentsound1 = AudioSegment.from_file("sound1.wav")# 给 sound1 增益 3.5 dBlouder_via_method = sound1.apply_gain(+3.5)louder_via_operator = sound1 + 3.5# 给 sound1 衰减 5.7 dBquieter_via_method = sound1.apply_gain(-5.7)quieter_via_operator = sound1 - 5.7

AudioSegment(…).fade()

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

from pydub import AudioSegmentsound1 = 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 AudioSegmentsound1 = AudioSegment.from_file("sound1.wav")# 将左声道衰减6dB,并将右声道提升2dBstereo_balance_adjusted = sound1.apply_gain_stereo(-6, +2)

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

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

AudioSegment(…).pan()

from pydub import AudioSegmentsound1 = AudioSegment.from_file("sound1.wav")# pan the sound 15% to the rightpanned_right = sound1.pan(+0.15)# pan the sound 50% to the leftpanned_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 AudioSegmentsound = AudioSegment.from_file(“sound1.wav”)samples = sound.get_array_of_samples()# 然后修改采样...new_sound = sound._spawn(samples)

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

import arrayimport numpy as npfrom pydub import AudioSegmentsound = AudioSegment.from_file(“sound1.wav”)samples = sound.get_array_of_samples()# 对音频数据的示例操作shifted_samples = np.right_shift(samples, 1)# 现在需要把它们转换成一个 array.arrayshifted_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)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。