Google Cloud Speech-to-Text 返回 OGG OPUS Base64 音频的空转录

Ric*_*ick 1 ogg webm opus google-cloud-speech

我正在尝试使用 Node.js 中的 Google Cloud Speech-to-Text API 转录 OGG OPUS Base64 编码的音频字符串。音频的采样率为 48000 赫兹。当我运行代码时,API 返回一个空转录。这只是有时发生。其他时候,它可以很好地转录音频。稍后再回到项目,发现错误是随机返回的。当我将 Base64 转换为缓冲区并保存文件时,音频在 VLC 播放器中播放正常,并且 ffprobe 显示结果文件的正确信息。

我已经尝试过检查音频质量、编码、采样率等,但这些解决方案都没有帮助。这是我的代码:

import { SpeechClient } from "@google-cloud/speech";

// `base64Audio` looks like this:
//   "data:audio/ogg; codecs=opus;base64,T2dnUwACAAAAAAAA..."
export async function transcribeB64(base64Audio: string): Promise<string> {
  const client = new SpeechClient();
  return new Promise(async (resolve) => {
    const content = base64Audio.split(",")[1];
    const x = await client.recognize({
      config: {
        encoding: "OGG_OPUS",
        sampleRateHertz: 48000,
        languageCode: "en-US",
      },
      audio: {
        content,
      },
    });
    resolve(JSON.stringify(x, null, 2));
  });
}
Run Code Online (Sandbox Code Playgroud)

API 响应如下所示:

[
  {
    "results": [],
    "totalBilledTime": {
      "seconds": "0",
      "nanos": 0
    },
    "speechAdaptationInfo": null,
    "requestId": "000000"
  },
  null,
  null
]
Run Code Online (Sandbox Code Playgroud)

这是 ffprobe 的输出:

Input #0, ogg, from 'input.ogg':
  Duration: 00:00:05.74, start: 0.000000, bitrate: 129 kb/s
  Stream #0:0: Audio: opus, 48000 Hz, mono, fltp
    Metadata:
      ENCODER         : Mozilla111.0.1
Run Code Online (Sandbox Code Playgroud)

为什么我的音频没有被转录?

Ric*_*ick 5

我无法找出根本原因,但到目前为止,将编解码器从“OGG_OPUS”更改为“WEBM_OPUS”似乎解决了问题。我很想听到关于为什么会发生这种情况的可能解释,但目前我没有。