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

使用AWS Amplify Predictions转录MP3返回空值问题求助

解决AWS Amplify Predictions语音转文字返回空字符串的问题

问题核心:你传入的是MP3字节数据,但Amplify Predictions的语音转录功能仅支持PCM格式的音频数据,这就是返回空字符串的直接原因。

解决方案步骤:

  1. 将MP3解码为PCM格式
    浏览器端可以用Web Audio API解码MP3音频,或者使用第三方库(如lamejs、ffmpeg.wasm)完成格式转换。
  2. 使用PCM数据调用Amplify Predictions
    将转换后的PCM字节缓冲区传入API,同时可指定音频参数确保匹配。

完整示例代码(Web Audio API实现)

async function transcribeMP3(file) {
  // 读取MP3文件并解码为音频缓冲区
  const arrayBuffer = await file.arrayBuffer();
  const audioContext = new (window.AudioContext || window.webkitAudioContext)();
  const audioBuffer = await audioContext.decodeAudioData(arrayBuffer);

  // 将音频缓冲区转换为16位整数PCM(Amplify支持的格式)
  const channelData = audioBuffer.getChannelData(0); // 提取单声道数据
  const pcmData = new Int16Array(channelData.length);
  
  for (let i = 0; i < channelData.length; i++) {
    // 将Float32样本转换为16位整数
    const sample = Math.max(-1, Math.min(1, channelData[i]));
    pcmData[i] = sample < 0 ? sample * 0x8000 : sample * 0x7FFF;
  }

  // 将Int16Array转为ArrayBuffer
  const pcmBuffer = pcmData.buffer;

  // 调用Amplify Predictions转录
  const result = await Predictions.convert({
    transcription: {
      source: {
        bytes: pcmBuffer,
        // 指定音频参数,确保和转换后的PCM一致
        format: {
          sampleRate: audioBuffer.sampleRate,
          channels: audioBuffer.numberOfChannels,
          bitDepth: 16
        }
      }
    }
  });

  console.log("转录结果:", result.transcription.fullText);
  return result.transcription.fullText;
}

注意事项

  • 现代主流浏览器均支持Web Audio API,若需兼容旧浏览器,可考虑使用第三方解码库
  • 处理大文件时建议分块处理,避免占用过多内存
  • 也可在服务端完成MP3转PCM(如Node.js使用fluent-ffmpeg),再将PCM数据传给Amplify

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 19:54:26