关于OpenAI Speech to Text API生成VTT文件时间戳异常及单词时间戳的问询
解决方案:OpenAI Speech to Text API VTT时间戳与单词级时间戳问题
一、修复VTT时间戳未跳过静音的问题
OpenAI Speech to Text API生成的默认VTT格式,是基于模型的文本分句逻辑生成分段,而非依据语音中的静音间隔。要解决这个问题,你可以通过以下步骤手动生成符合静音分段的VTT文件:
调用API时指定
verbose_json格式
发起请求时将response_format参数设为verbose_json,这样API会返回包含每个语音片段实际起止时间的原始数据,而非直接生成VTT。从返回数据中提取有效分段
响应的segments数组里,每个对象的start和end字段对应该语音片段的实际开始/结束时间(跳过静音时段),text字段是对应内容。手动转换为VTT格式
按照VTT规范拼接内容:- 开头添加
WEBVTT标识 - 每个分段格式为:
[开始时间] --> [结束时间],时间需转为HH:MM:SS.mmm格式 - 后续跟上对应文本内容
示例伪代码逻辑:
def format_timestamp(seconds): hours = int(seconds // 3600) minutes = int((seconds % 3600) // 60) secs = seconds % 60 return f"{hours:02d}:{minutes:02d}:{secs:06.3f}" # 假设api_response是返回的verbose_json解析后的数据 vtt_content = "WEBVTT\n\n" for seg in api_response['segments']: start = format_timestamp(seg['start']) end = format_timestamp(seg['end']) vtt_content += f"{start} --> {end}\n{seg['text'].strip()}\n\n"- 开头添加
二、单词级时间戳支持情况
OpenAI Speech to Text API支持单词级时间戳,只需在调用API时添加word_timestamps=True参数,同时将response_format设为verbose_json。
此时返回的segments数组中,每个segment会包含words字段,该数组内的每个对象包含单个单词的start(开始时间)、end(结束时间)和word(单词内容),可以基于此生成带单词级时间戳的字幕或做其他处理。
内容的提问来源于stack exchange,提问作者QCoder
相关产品推荐
相关产品推荐

