Google Text-to-Speech API能否生成同步字幕及实现方法问询
Google Text-to-Speech API 同步字幕生成方案
核心结论
Google Text-to-Speech API不直接提供SRT/VTT格式的同步字幕生成功能,但可以通过API返回的时间戳数据,自行转换生成符合要求的字幕文件,实现与音频的同步。
实现步骤
开启时间戳获取
调用API时,在请求参数中添加enable_time_pointing配置,指定获取词级(SYNTHESIS_WORD)或音素级(SYNTHESIS_PHONEME)的时间戳。示例请求参数(以REST API为例):{ "input": {"text": "需要转换的文本内容"}, "voice": {"languageCode": "zh-CN", "name": "zh-CN-Standard-A"}, "audioConfig": {"audioEncoding": "MP3"}, "enableTimePointing": ["SYNTHESIS_WORD"] }解析时间戳数据
API返回的响应中会包含timepoints数组,每个元素包含对应文本片段的startTime、endTime和markName(即对应的词或音素)。例如:"timepoints": [ {"startTime": "0s", "endTime": "0.3s", "markName": "需要"}, {"startTime": "0.3s", "endTime": "0.7s", "markName": "转换"}, ... ]转换为SRT/VTT格式
编写脚本将时间戳数据转换为目标格式。以下是简单的Python示例(生成SRT):def generate_srt(timepoints): srt_content = "" for idx, point in enumerate(timepoints, 1): # 转换时间格式为SRT要求的 HH:MM:SS,mmm start = format_time(point["startTime"]) end = format_time(point["endTime"]) srt_content += f"{idx}\n{start} --> {end}\n{point['markName']}\n\n" return srt_content def format_time(time_str): # 处理API返回的"Xs"格式,转换为SRT时间格式 seconds = float(time_str[:-1]) hours = int(seconds // 3600) minutes = int((seconds % 3600) // 60) secs = seconds % 60 return f"{hours:02d}:{minutes:02d}:{secs:06.3f}".replace(".", ",")
使用限制
- 语言支持范围:时间戳功能仅支持部分语言和语音模型,需确认目标语言是否在支持列表内
- 时间戳精度:词级时间戳适用于大部分字幕场景,音素级精度更高但处理更复杂
- 文本长度限制:API单请求的文本长度上限会影响时间戳的完整性,超长文本需拆分请求后再合并字幕
与AWS Polly的差异
AWS Polly直接内置了字幕生成功能,可直接输出SRT/VTT;而Google TTS需要自行处理时间戳转换,但优势在于可以自定义字幕的格式、分段规则等,灵活性更强。
内容的提问来源于stack exchange,提问作者Min Chen
相关产品推荐
相关产品推荐

