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

如何将Wav音频字符串直接转换为Ogg文件(无需磁盘IO)

无需磁盘IO直接将audioString转换为Ogg格式的实现方案

可以完全在内存中完成格式转换,避免磁盘IO操作,以下是两种可靠的实现方式:

方案一:使用Pydub处理内存音频流

Pydub基于FFmpeg,支持从字节流加载音频,直接在内存中转码为Ogg格式。

依赖安装

sudo apt-get install ffmpeg
pip install pydub

代码实现

import base64
from pydub import AudioSegment
from io import BytesIO

# 获取API返回的audioString并解码
audioString = response.json()['audio'][0]['audioContent']
wav_bytes = base64.b64decode(audioString)

# 将WAV字节数据加载到内存流
wav_io = BytesIO(wav_bytes)
audio_segment = AudioSegment.from_file(wav_io, format="wav")

# 直接将音频导出为Ogg格式到内存流
ogg_io = BytesIO()
audio_segment.export(ogg_io, format="ogg", codec="libvorbis")

# 获取最终的Ogg字节数据,可直接传入消息系统
ogg_audio = ogg_io.getvalue()

方案二:使用ffmpeg-python直接操作内存流

如果需要更底层的控制,可通过ffmpeg-python的管道功能完成内存中转码。

依赖安装

sudo apt-get install ffmpeg
pip install ffmpeg-python

代码实现

import base64
import ffmpeg
from io import BytesIO

# 解码得到WAV字节数据
audioString = response.json()['audio'][0]['audioContent']
wav_bytes = base64.b64decode(audioString)

# 通过ffmpeg管道完成格式转换
stdout, stderr = (
    ffmpeg
    .input('pipe:', format='wav')
    .output('pipe:', format='ogg', codec='libvorbis')
    .run(input=wav_bytes, capture_stdout=True, capture_stderr=True)
)

# stdout即为Ogg格式的音频字节数据
ogg_audio = stdout

关于Torchaudio的修复方案

你之前尝试Torchaudio失败,可能是未正确使用流式加载,以下是可行的内存转码方式:

import base64
import torchaudio
from io import BytesIO

# 解码WAV字节数据
wav_bytes = base64.b64decode(audioString)

# 从内存流加载音频
stream_reader = torchaudio.io.StreamReader(BytesIO(wav_bytes))
stream_reader.add_basic_audio_stream()
waveform, sample_rate = stream_reader.pop_stream()

# 将音频保存为Ogg到内存流
ogg_io = BytesIO()
torchaudio.save(ogg_io, waveform, sample_rate, format='ogg')
ogg_audio = ogg_io.getvalue()

注意:需确保Torchaudio版本≥0.12.0,且系统FFmpeg支持Ogg编码。

内容的提问来源于stack exchange,提问作者Saurabh Kumar Karn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 05:45:25