如何通过Google Cloud Speech API获取每个转录单词的时间戳?
如何用Google Cloud Speech API获取转录单词的时间戳?
嘿,刚好做过类似的需求!你现在用的speech_recognition库确实简化了Google Cloud Speech API的调用,但默认调用只返回纯文本。要拿到每个单词的时间戳,只需要调整调用参数,解析API返回的完整响应就行,我给你整理好具体步骤和代码:
核心思路
speech_recognition库的recognize_google_cloud方法默认只提取转录后的文本,但通过添加show_all=True参数,可以获取Google Cloud Speech API返回的完整原始响应,里面就包含了每个单词的起始/结束时间戳信息。
修改后的完整代码
import os import sys import speech_recognition as sr # 加载Google Cloud服务账号凭证 with open("~/Documents/speech-to-text/speech2textgoogleapi.json") as f: GOOGLE_CLOUD_SPEECH_CREDENTIALS = f.read() # 获取命令行传入的wav文件路径 audio_file = sys.argv[1] r = sr.Recognizer() # 读取完整音频文件 with sr.AudioFile(audio_file) as source: audio = r.record(source) # 调用Google Cloud Speech API,获取完整响应数据 response = r.recognize_google_cloud( audio, credentials_json=GOOGLE_CLOUD_SPEECH_CREDENTIALS, show_all=True # 关键参数:返回API原始响应,而非仅文本 ) # 解析响应,提取单词和时间戳 if response.get("results"): for result in response["results"]: # 取置信度最高的转录结果(第一个alternative) top_alternative = result["alternatives"][0] print(f"完整转录文本: *{top_alternative['transcript']}*") print("\n单词时间戳详情:") # 检查是否包含单词级时间戳(API仅在满足条件时返回) if "words" in top_alternative: for word_item in top_alternative["words"]: word = word_item["word"] # 把带"s"后缀的时间字符串转成浮点数 start_time = float(word_item["start_time"].replace("s", "")) end_time = float(word_item["end_time"].replace("s", "")) print(f"- 单词: `{word}` | 开始时间: {start_time:.2f}s | 结束时间: {end_time:.2f}s") else: print("未能识别音频内容,请检查文件格式或凭证权限")
关键细节说明
show_all=True:这是开启时间戳功能的核心,没有这个参数,库只会返回纯文本字符串。- 时间戳解析:API返回的时间是带
s后缀的字符串(比如"1.230s"),需要去掉后缀转成浮点数,方便后续处理。 - 置信度选择:每个识别结果会返回多个
alternative(不同置信度的转录版本),我们默认取第一个(置信度最高的)。
注意事项
- 确保你的音频文件符合Google Cloud要求:推荐16kHz采样率、PCM编码(标准wav文件默认满足)、单声道,否则可能无法返回单词级时间戳。
- 确认你的Google Cloud账号已启用Speech-to-Text API,且凭证文件有正确的访问权限。
内容的提问来源于stack exchange,提问作者mowglis_diaper
相关产品推荐
相关产品推荐

