Whisper Python脚本设置word_timestamps实现逐词字幕问题
解决Whisper生成逐词级WEBVTT字幕的问题
要实现逐词级的WEBVTT转录,你需要在model.transcribe()中开启word_timestamps参数,同时确保正确配置解码选项和字幕写入器。你的现有代码存在几个关键问题:没有启用词时间戳、未正确传递解码选项、使用了SRT写入器而非WEBVTT。
以下是修改后的完整代码:
import whisper from whisper.utils import get_writer # 加载模型 model = whisper.load_model('base.en') # 配置解码选项(可直接在transcribe中指定,也可单独创建) decoding_options = whisper.DecodingOptions(language='en', fp16=False) audio_path = 'final_video.mp4' # 核心:开启word_timestamps参数,获取逐词时间戳 result = model.transcribe(audio_path, decoding_options=decoding_options, word_timestamps=True) output_dir = "./" # 配置字幕排版选项,配合word_timestamps生效 vtt_options = { "highlight_words": True, "max_line_count": 1, # 设置为1实现逐词单行显示,可按需调整 "max_line_width": 10 # 限制每行宽度,确保字幕按单词拆分 } # 使用WEBVTT写入器而非SRT vtt_writer = get_writer("vtt", output_dir) vtt_writer(result, audio_path, vtt_options)
关键修改说明:
- 开启词时间戳:在
model.transcribe()中添加word_timestamps=True,这是生成逐词字幕的核心——开启后Whisper会在结果中包含每个单词的起始/结束时间戳。 - 传递解码选项:将创建的
DecodingOptions通过decoding_options参数传入transcribe,确保语言、FP16等配置生效(注意fp16要传布尔值False而非字符串'false')。 - 切换到WEBVTT写入器:将
get_writer("srt", ...)改为get_writer("vtt", ...),匹配你需要的字幕格式。 - 调整排版参数:
max_line_count设为1可以让每个单词单独占一行,实现逐词级显示;max_line_width配合限制每行长度,确保字幕按单词拆分。
你参考的代码片段提示highlight_words等选项依赖word_timestamps=True,所以必须先开启词时间戳,这些排版选项才能生效。
内容的提问来源于stack exchange,提问作者maximeb
相关产品推荐
相关产品推荐

