You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python将PyAudio获取的音频字节数组转为Opus编码?

将PCM音频字节数组编码为Opus格式的Python方案

当然有现成的Python库可以实现这个需求,下面是两个经过验证的常用方案,适配你用PyAudio获取的Stereo Mixer音频流场景:

1. opuslib

这是一个轻量级的Opus编码绑定库,适合手动控制编码流程:

  • 安装命令:pip install opuslib
  • 代码示例(适配PyAudio的PCM字节流):
import opuslib
import pyaudio

# 配置PyAudio参数(必须与Opus编码器兼容,推荐用48kHz采样率、16位深度)
FORMAT = pyaudio.paInt16
CHANNELS = 2  # Stereo Mixer是双声道
RATE = 48000
CHUNK = 1024  # 对应Opus推荐的帧时长(~21ms)

# 初始化Opus编码器
encoder = opuslib.Encoder(RATE, CHANNELS, opuslib.APPLICATION_AUDIO)

# 假设audio_bytes是从PyAudio流中读取的单chunk字节数组
pcm_data = audio_bytes
# 编码为Opus帧
opus_frame = encoder.encode(pcm_data, CHUNK)

# 追加写入到Opus文件
with open("recording.opus", "ab") as f:
    f.write(opus_frame)
  • 关键说明:
    • 确保PyAudio输出的是16位整数格式的交错PCM(paInt16对应),这是Opus唯一支持的输入格式。
    • 每次编码的PCM采样数要符合Opus规范,48kHz下1024采样是安全的帧大小。

2. pyogg

这个库对Opus的封装更友好,自带文件写入功能,适合持续录制的流式场景:

  • 安装命令:pip install pyogg
  • 代码示例(直接对接PyAudio监听流):
import pyogg
import pyaudio

# 匹配Stereo Mixer的音频参数
FORMAT = pyaudio.paInt16
CHANNELS = 2
RATE = 48000
CHUNK = 1024

# 创建Opus文件写入器,自动处理编码和封装
opus_writer = pyogg.OpusFileWriter("stream_recording.opus", RATE, CHANNELS)
# 可自定义比特率,比如128kbps(平衡音质和体积)
opus_writer.set_bitrate(128000)

# 初始化PyAudio监听流
p = pyaudio.PyAudio()
# 替换为你的Stereo Mixer设备索引,可通过p.get_device_info_by_index()查找
stream = p.open(
    format=FORMAT,
    channels=CHANNELS,
    rate=RATE,
    input=True,
    input_device_index=1,
    frames_per_buffer=CHUNK
)

try:
    print("开始录制,按Ctrl+C停止")
    while True:
        audio_bytes = stream.read(CHUNK)
        # 直接写入,内部自动完成编码
        opus_writer.write(audio_bytes)
except KeyboardInterrupt:
    print("录制停止")

# 资源清理
stream.stop_stream()
stream.close()
p.terminate()
opus_writer.close()
  • 关键说明:
    • pyogg的OpusFileWriter会自动处理Opus的Ogg封装,不需要手动拼接帧,输出的是标准的.opus文件。
    • 若需要处理已有的字节数组,直接调用write()传入PCM字节即可。

通用注意事项

  • 采样率优先选48kHz,这是Opus的原生最优采样率,其他采样率(如44.1kHz)也支持,但会有额外的转换开销。
  • 双声道PCM必须是交错格式(左声道采样后紧跟右声道采样),PyAudio的paInt16格式默认就是这种,无需额外处理。
  • Opus是有损编码,比特率越高音质越好,一般场景下双声道128-192kbps足够,语音场景可低至64kbps。

内容的提问来源于stack exchange,提问作者ProcgerXacker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 12:39:57