Python中如何将AudioSegment音频对象直接转换为base64编码?
rtrt,找不到导出数据的地方,难道要存成文件再转换成 base64 嘛?
Python中如何将AudioSegment音频对象直接转换为base64编码?
2 回复
from pydub import AudioSegment
import base64
import io
# 1. 加载音频文件
audio = AudioSegment.from_file("input.mp3", format="mp3")
# 2. 将AudioSegment转为原始字节数据
# 方法一:通过临时文件(推荐,兼容性好)
with io.BytesIO() as buffer:
audio.export(buffer, format="wav") # 可替换为"mp3"等格式
audio_bytes = buffer.getvalue()
# 方法二:直接使用export()到字节流(更简洁)
audio_bytes = audio.export(format="wav").read()
# 3. 转换为base64编码
base64_str = base64.b64encode(audio_bytes).decode('utf-8')
print(f"Base64编码长度: {len(base64_str)} 字符")
print(f"前100字符示例: {base64_str[:100]}...")
# 4. 解码验证(可选)
decoded_bytes = base64.b64decode(base64_str)
with open("decoded_audio.wav", "wb") as f:
f.write(decoded_bytes)
关键点说明:
- 格式选择:
export()需指定输出格式(如wav/mp3),这会影响base64数据的内容和大小 - 字节转换:必须通过
export()将AudioSegment转为字节数据,不能直接操作原始音频数组 - 编码处理:
b64encode()返回bytes类型,通常需要.decode('utf-8')转为字符串
常见格式对比:
- WAV:无损,base64数据量大,适合高质量传输
- MP3:有损压缩,base64数据量小,适合网络传输
- FLAC:无损压缩,平衡文件大小和音质
一句话总结:用export()转字节流再b64encode。
https://github.com/jiaaro/pydub/blob/master/API.markdown =>AudioSegment(…).raw_data
RTFM

