You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 02:33:18