使用AWS Amplify Predictions转录MP3返回空值问题求助
解决AWS Amplify Predictions语音转文字返回空字符串的问题
问题核心:你传入的是MP3字节数据,但Amplify Predictions的语音转录功能仅支持PCM格式的音频数据,这就是返回空字符串的直接原因。
解决方案步骤:
- 将MP3解码为PCM格式
浏览器端可以用Web Audio API解码MP3音频,或者使用第三方库(如lamejs、ffmpeg.wasm)完成格式转换。 - 使用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
相关产品推荐
相关产品推荐

