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

NodeJS中如何将Buffer转换为可读流适配OpenAI Whisper

问题:如何直接将Buffer转为可读流传入OpenAI Whisper转录?

我通过输入获取了一个Buffer:

const fileData = Buffer.concat(chunks);

随后将其传入OpenAI的Whisper进行转录,但直接传入Buffer无法运行:

const resp = await openai.createTranscription( //@ts-ignore
   fileData,
   "whisper-1",
);

目前我只能先将Buffer写入磁盘:

fs.writeFileSync("input.wav", fileData);

再通过可读流读取后传入:

const resp = await openai.createTranscription( //@ts-ignore
   createReadStream("input.wav"),
   "whisper-1",
);

这种方式可行,但我不想每次都写入磁盘,请问能否直接将Buffer转换为NodeJS可读流或实现同等效果?


解决方案:直接将Buffer转为可读流

可以通过Node.js内置的stream.Readable模块,在内存中将Buffer转换为可读流,无需写入磁盘,具体有两种实现方式:

方法一:使用Readable.from()(推荐,Node.js v12.3.0+支持)

这是最简洁的实现方式,直接从Buffer生成可读流:

const { Readable } = require('stream');
// ES模块环境:import { Readable } from 'stream';

// 将Buffer转换为可读流
const fileStream = Readable.from(fileData);

// 直接传入Whisper转录接口
const resp = await openai.createTranscription( //@ts-ignore
   fileStream,
   "whisper-1",
);

方法二:手动实例化Readable(兼容低版本Node.js)

如果需要兼容v12.3.0以下的Node.js版本,可以手动构建可读流:

const { Readable } = require('stream');

const fileStream = new Readable();
// 推送Buffer数据到流中
fileStream.push(fileData);
// 推送null标记流结束
fileStream.push(null);

// 调用Whisper转录接口
const resp = await openai.createTranscription( //@ts-ignore
   fileStream,
   "whisper-1",
);

注意事项

  • 两种方法都完全在内存中处理,避免了磁盘IO的开销
  • OpenAI的createTranscription接口完全支持标准Node.js可读流作为输入
  • TypeScript环境下,若遇到类型不匹配的报错,可保留//@ts-ignore注释,或给流添加类型断言:fileStream as unknown as File

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 21:05:12