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

如何将音频Buffer转为可读流直接调用Whisper API(无需本地存文件)

直接用Buffer转可读流调用Whisper API的可行方案

完全可行,你不需要把Buffer存到本地再读取,直接将Buffer转为可读流就能成功调用Whisper API。你之前的代码无效,问题不在于Readable.from()生成的流类型,而是请求时没有正确配置表单数据的格式——Whisper API要求用multipart/form-data格式上传音频,必须指定文件名和对应的MIME类型。

正确实现代码示例

下面是用axios和原生Readable流的完整调用示例:

const { Readable } = require('stream');
const axios = require('axios');
const FormData = require('form-data');

// 假设你已经有了audioBuffer(webm格式)
const audioStream = Readable.from(audioBuffer);

// 构建multipart/form-data表单
const formData = new FormData();
// 关键:指定文件名和MIME类型,Whisper需要识别音频格式
formData.append('file', audioStream, {
  filename: 'audio.webm',
  contentType: 'audio/webm'
});
formData.append('model', 'whisper-1'); // 必须指定模型

// 发送请求
axios.post('https://api.openai.com/v1/audio/transcriptions', formData, {
  headers: {
    ...formData.getHeaders(),
    'Authorization': `Bearer ${process.env.OPENAI_API_KEY}`
  },
  responseType: 'json'
})
.then(response => {
  console.log('转录结果:', response.data.text);
})
.catch(error => {
  console.error('请求失败:', error.response?.data || error.message);
});

关键注意点

  • 表单配置:必须用formData.append时传入文件名和Content-Type,否则Whisper API无法识别音频格式。
  • 流的兼容性:Readable.from()生成的可读流和fs.createReadStream()本质上都是符合Node.js Stream规范的,API完全兼容,不存在“不是ReadStream就不能用”的问题。
  • 音频格式:确保你的audioBuffer是Whisper支持的格式(webm、mp3等),如果格式不对也会导致请求失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 00:52:43