AudioSegment类
pydub 是一个简单易用的 Python 音频处理库,专注于提供高层次的音频操作接口,而 AudioSegment 是它的核心类,用于表示音频片段(如 MP3、WAV、OGG 等格式)。通过 AudioSegment,你可以轻松实现音频文件的加载、切割、合并、格式转换、音量调整等操作。
核心功能
-
多格式支持
支持常见音频格式(如 MP3、WAV、AAC、OGG、FLAC 等),依赖 FFmpeg 或 libav 进行底层编解码。 -
简洁的API
提供类似列表和字典的操作方式(如切片、拼接、覆盖)。 -
跨平台
兼容 Windows、macOS、Linux。
安装与依赖
基本用法
加载音频文件
from pydub import AudioSegment
# 加载音频文件(自动检测格式)
audio = AudioSegment.from_file("input.mp3")
# 指定格式加载
audio = AudioSegment.from_wav("input.wav")
audio = AudioSegment.from_mp3("input.mp3")
导出音频文件
audio.export("output.wav", format="wav")
audio.export("output.mp3", format="mp3", bitrate="192k")
音频基础操作
# 获取音频属性
duration = len(audio) # 时长(毫秒)
channels = audio.channels # 声道数
sample_width = audio.sample_width # 采样位深(字节)
frame_rate = audio.frame_rate # 采样率(Hz)
# 切割音频(从第10秒到第20秒)
segment = audio[10_000:20_000]
# 调整音量(增加6分贝)
louder = audio + 6
# 拼接音频
combined = audio1 + audio2
# 重复播放
looped = audio * 3
# 淡入淡出
faded = audio.fade_in(2000).fade_out(3000) # 2秒淡入,3秒淡出
对帧处理
# 获取原始PCM数据(16位小端)
raw_data = audio.raw_data
opus_datas = []
# 按帧处理所有音频数据(包括最后一帧可能补零)
for i in range(0, len(raw_data), frame_size * 2): # 16bit=2bytes/sample
# 获取当前帧的二进制数据
chunk = raw_data[i:i + frame_size * 2]
# 如果最后一帧不足,补零
if len(chunk) < frame_size * 2:
chunk += b'\x00' * (frame_size * 2 - len(chunk))
# 转换为numpy数组处理
np_frame = np.frombuffer(chunk, dtype=np.int16)
# 编码Opus数据
opus_data = encoder.encode(np_frame.tobytes(), frame_size)
opus_datas.append(opus_data)