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

如何使用Transformers.js pipeline转录本地音频File/Blob?(JSON.parse错误)

如何使用Transformers.js pipeline转录本地音频File/Blob?(JSON.parse错误)

我太懂你现在的困扰了——用Transformers.js的Whisper模型处理用户上传的本地WAV文件时,明明远程URL的例子跑得好好的,换成本地File对象就掉链子对吧?其实问题出在本地File/Blob对象不能直接传给transcriber函数,内部会误把它当成可解析的JSON或者字符串去处理,自然就报JSON.parse相关的错误了。

我之前踩过这个坑,给你两个亲测有效的解决方案:

方案一:将File/Blob转换为Object URL

这是最贴近你原有代码的改法,利用浏览器的URL.createObjectURL()把File对象转换成一个临时的本地URL,用法和你之前用的远程URL完全一致:

import { pipeline } from '@xenova/transformers';

async function transcribe(file) {
  if (!file) return;
  console.log(file.name);

  // 1. 把File对象转成浏览器可识别的临时URL
  const audioUrl = URL.createObjectURL(file);

  try {
    const transcriber = await pipeline(
      'automatic-speech-recognition',
      'Xenova/whisper-tiny.en'
    );
    const result = await transcriber(audioUrl);
    console.log('转录结果:', result.text);
  } catch (err) {
    console.error('转录出错:', err);
  } finally {
    // 2. 用完记得释放临时URL,避免内存泄漏
    URL.revokeObjectURL(audioUrl);
  }
}

这个方法的好处是几乎不用改你原来的逻辑,只是多了URL的创建和释放步骤,非常省心。

方案二:直接读取File为ArrayBuffer

如果你不想创建临时URL,也可以直接把File读成ArrayBuffer传给transcriber,模型同样能处理这种格式:

import { pipeline } from '@xenova/transformers';

async function transcribe(file) {
  if (!file) return;
  console.log(file.name);

  // 1. 把File读成ArrayBuffer
  const arrayBuffer = await file.arrayBuffer();

  try {
    const transcriber = await pipeline(
      'automatic-speech-recognition',
      'Xenova/whisper-tiny.en'
    );
    // 2. 直接传入ArrayBuffer
    const result = await transcriber(arrayBuffer);
    console.log('转录结果:', result.text);
  } catch (err) {
    console.error('转录出错:', err);
  }
}

为啥原来的远程URL能行?

因为远程URL是标准的HTTP/HTTPS地址,transcriber内部会自动用fetch去拉取音频数据;但本地File对象是浏览器的专属实例,直接传进去的话,内部的处理逻辑会混乱,就会触发JSON.parse的错误——这可不是你的问题,是API对输入类型的兼容细节没注意到而已。

你之前验证的点(导入正确、模型名拼写对、在线状态)都是对的,只要把File对象转成上面两种格式之一,就能正常转录了!

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 03:09:52