whisper-timestamped字幕生成:自动创建SRT、VTT等格式的完整教程
whisper-timestamped字幕生成:自动创建SRT、VTT等格式的完整教程
想要为视频自动生成精准的时间轴字幕吗?🤔 whisper-timestamped 是一个强大的开源工具,能够为 OpenAI Whisper 语音识别结果添加词级时间戳,并自动创建 SRT、VTT、CSV 等多种字幕格式。本教程将带你从零开始,快速掌握这个高效的 Whisper 时间戳扩展 工具,轻松实现 音频转字幕 的自动化流程。
📋 什么是 whisper-timestamped?
whisper-timestamped 是基于 OpenAI Whisper 的多语言自动语音识别扩展库,专门解决原始 Whisper 模型只能预测近似时间戳(通常只有 1 秒精度)的局限性。它通过动态时间规整(DTW)算法分析交叉注意力权重,为每个单词提供精确到毫秒级的时间戳,并计算置信度分数。
上图展示了 whisper-timestamped 的单词对齐可视化效果,红色虚线标记了每个单词的精确时间边界
🚀 快速安装指南
基础安装
使用 pip 一键安装 whisper-timestamped:
pip3 install whisper-timestamped
或者从源码安装:
git clone https://gitcode.com/gh_mirrors/wh/whisper-timestamped
cd whisper-timestamped/
python3 setup.py install
可选依赖安装
如需可视化单词对齐效果,安装 matplotlib:
pip3 install matplotlib
如需使用语音活动检测(VAD)功能,安装额外依赖:
pip3 install onnxruntime torchaudio
CPU 专用轻量安装
如果没有 GPU,先安装轻量版 PyTorch:
pip3 install \
torch==1.13.1+cpu \
torchaudio==0.13.1+cpu \
-f https://download.pytorch.org/whl/torch_stable.html
🎯 核心功能与优势
1. 词级时间戳精度
whisper-timestamped 最大的优势在于提供 精确的词级时间戳,而不仅仅是段级时间戳。这对于创建专业字幕至关重要,因为每个单词的精确出现时间都能被准确标记。
2. 多格式字幕输出
支持生成多种字幕格式:
- SRT (SubRip Subtitle) - 最广泛使用的字幕格式
- VTT (WebVTT) - HTML5 视频标准字幕格式
- CSV/TSV - 便于数据分析和处理
- TXT - 纯文本转录
- JSON - 包含完整元数据的结构化格式
3. 语音活动检测(VAD)
whisper-timestamped 集成了多种 VAD 方法,可以在 Whisper 处理前去除静音段,避免模型在静音部分产生"幻觉"文本。
4. 置信度评分
为每个单词和每个段落提供置信度分数,帮助你评估转录结果的可靠性。
🔧 三种使用方法
方法一:Python API 调用
import whisper_timestamped as whisper
# 加载音频
audio = whisper.load_audio("AUDIO.wav")
# 加载模型(支持多种模型大小)
model = whisper.load_model("tiny", device="cpu")
# 转录并获取时间戳
result = whisper.transcribe(model, audio, language="zh")
# 保存为SRT字幕
with open("output.srt", "w", encoding="utf-8") as f:
whisper.write_srt(result["segments"], f)
方法二:命令行工具
# 基础用法
whisper_timestamped audio.mp4 --model tiny --language zh --output_dir .
# 生成带词级时间戳的SRT
whisper_timestamped audio.mp4 --model medium --output_dir . --verbose True
# 使用VAD提高准确性
whisper_timestamped audio.mp4 --model small --vad True --output_dir .
方法三:使用 HuggingFace 微调模型
import whisper_timestamped as whisper
# 加载 HuggingFace 上的微调模型
model = whisper.load_model("NbAiLab/whisper-large-v2-nob", device="cpu")
# 后续使用方式相同
result = whisper.transcribe(model, audio, language="no")
📊 输出格式详解
JSON 格式输出示例
whisper-timestamped 的 JSON 输出包含完整的词级时间戳信息:
{
"text": "你好!今天天气怎么样?",
"segments": [
{
"id": 0,
"start": 0.5,
"end": 1.2,
"text": "你好!",
"words": [
{
"text": "你好!",
"start": 0.5,
"end": 1.2,
"confidence": 0.95
}
]
},
{
"id": 1,
"start": 1.5,
"end": 3.0,
"text": "今天天气怎么样?",
"words": [
{
"text": "今天",
"start": 1.5,
"end": 1.8,
"confidence": 0.98
},
{
"text": "天气",
"start": 1.8,
"end": 2.1,
"confidence": 0.97
},
{
"text": "怎么样?",
"start": 2.1,
"end": 3.0,
"confidence": 0.96
}
]
}
],
"language": "zh"
}
SRT 字幕格式
自动生成的 SRT 文件示例:
1
00:00:00,500 --> 00:00:01,200
你好!
2
00:00:01,500 --> 00:00:03,000
今天天气怎么样?
⚙️ 高级配置技巧
1. 提高转录准确性
使用精准模式(启用束搜索和温度采样):
# Python
result = whisper.transcribe(
model,
audio,
beam_size=5,
best_of=5,
temperature=(0.0, 0.2, 0.4, 0.6, 0.8, 1.0)
)
# 命令行
whisper_timestamped --accurate audio.mp4
2. 语音活动检测配置
# 使用不同VAD方法
result = whisper.transcribe(model, audio, vad="silero") # 默认
result = whisper.transcribe(model, audio, vad="silero:v3.1") # 旧版
result = whisper.transcribe(model, audio, vad="auditok") # 替代方案
3. 检测口语不流利现象
启用不流利检测,标记填充词、犹豫等:
result = whisper.transcribe(model, audio, detect_disfluencies=True)
🎨 可视化与调试
单词对齐可视化
# 生成对齐可视化图表
result = whisper.transcribe(
model,
audio,
plot_word_alignment=True # 或指定保存路径
)
可视化图表显示:
- 上半部分:交叉注意力权重的 DTW 对齐结果
- 下半部分:音频的 MFCC 特征
- 红色虚线:检测到的单词边界
参数调优建议
- 短音频处理:对于短音频(<30秒),使用
tiny或base模型即可获得良好效果 - 长音频处理:对于长音频,启用 VAD 可以显著减少内存使用
- 多语言支持:支持 99 种语言,自动检测或手动指定
- 置信度阈值:根据
confidence分数过滤低质量转录
📁 项目文件结构
了解项目结构有助于深度定制:
- 核心模块:whisper_timestamped/transcribe.py - 主要转录函数
- 字幕生成:whisper_timestamped/make_subtitles.py - 字幕文件生成
- 测试数据:tests/data/ - 包含多种语言的测试音频
- 预期输出:tests/expected/ - 各种配置下的预期输出
🚫 常见问题解决
问题1:内存不足
解决方案:使用更小的模型(如 tiny 或 base),或启用 VAD 减少处理数据量。
问题2:时间戳不准确
解决方案:尝试不同的 VAD 方法,或调整 refine_whisper_precision 参数。
问题3:转录速度慢
解决方案:使用 GPU 加速,或关闭束搜索(设置 beam_size=1)。
问题4:特殊字符处理
解决方案:确保输出文件使用 UTF-8 编码,特别是处理中文等非拉丁文字时。
🔍 性能优化建议
-
模型选择策略:
- 实时应用:使用
tiny或base模型 - 高质量转录:使用
medium或large模型 - 多语言需求:使用
large-v3模型
- 实时应用:使用
-
硬件加速:
- GPU 用户:确保安装 CUDA 版本的 PyTorch
- CPU 用户:使用轻量安装并考虑 batch 处理
-
批量处理:
# 批量处理多个文件 audio_files = ["audio1.wav", "audio2.mp3", "audio3.flac"] for audio_file in audio_files: audio = whisper.load_audio(audio_file) result = whisper.transcribe(model, audio) # 保存结果...
📈 应用场景示例
场景1:视频字幕制作
# 为视频文件生成SRT字幕
whisper_timestamped video.mp4 --model medium --language zh --output_dir subtitles/
场景2:会议录音转录
# 处理长时间会议录音,启用VAD去除静音
result = whisper.transcribe(
model,
meeting_audio,
vad=True,
language="en",
compute_word_confidence=True
)
场景3:多语言内容处理
# 自动检测语言并转录
result = whisper.transcribe(model, multilingual_audio)
print(f"检测到的语言: {result['language']}")
print(f"语言概率: {result['language_probs']}")
🎉 开始使用吧!
whisper-timestamped 为 Whisper 语音识别添加了强大的时间戳功能,使得自动生成精准字幕变得简单易行。无论你是内容创作者、研究人员还是开发者,这个工具都能显著提升你的音频处理效率。
记住,精确的时间戳 和 多格式输出 是 whisper-timestamped 的核心优势,结合 语音活动检测 和 置信度评分,你可以获得专业级的转录结果。
现在就开始你的自动字幕生成之旅吧!🚀
更多推荐




所有评论(0)