语音识别带时间戳(字级 timestamps)Python 实战:每个字精确到毫秒
很多场景不只要"识别出说了什么",还要知道每个字是在什么时间说的——做卡拉OK 逐字高亮、点击文字跳转音频、字幕对齐、视频剪辑定位。Whisper 的 word timestamps 是后加的(需要 DTW、精度一般)。FunASR 的 Paraformer 原生输出字级时间戳:每个字带 [起始毫秒, 结束毫秒],一次调用就有。下面是真实实测输出。
带时间戳识别(实测输出)
pip install funasr from funasr import AutoModel model = AutoModel(model="paraformer-zh", vad_model="fsmn-vad", disable_update=True) res = model.generate(input="audio.wav") text = res[0]["text"] # 欢 迎 大 家 来 体 验 ... timestamp = res[0]["timestamp"] # [[880, 1120], [1120, 1360], ...] 每个字的起止毫秒
timestamp 是一个 [start_ms, end_ms] 列表,和文本里的字一一对应。
把字和时间戳配对(实测)
chars = text.split() # Paraformer 中文输出是空格分隔的字
for ch, (start, end) in zip(chars, timestamp):
print(f"{ch} {start}-{end}ms")
真实输出:
| 字 | 起止(毫秒) |
|---|---|
| 欢 | 880 – 1120 |
| 迎 | 1120 – 1360 |
| 大 | 1380 – 1540 |
| 家 | 1540 – 1780 |
| 来 | 1780 – 2020 |
| 体 | 2020 – 2180 |
| 验 | 2180 – 2420 |
整句"欢迎大家来体验达摩院推出的语音识别模型"的 19 个字,每个都有精确到毫秒的起止时间。
能用来做什么
- 逐字高亮 / 卡拉OK:音频播放到某毫秒时,高亮对应的字。
- 点击文字跳转音频:点某个字,用它的
start_msseek 到音频对应位置。 - 字幕精确对齐:按时间戳切句、生成逐字时间轴的字幕。完整做字幕见 生成 SRT/VTT 字幕。
- 视频剪辑定位:按关键词找到它在音频里的精确时间点。
为什么用 Paraformer 拿时间戳
| FunASR Paraformer | Whisper | |
|---|---|---|
| 字/词级时间戳 | ✅ 原生,一次调用 | 后加(--word_timestamps,靠 DTW) |
| 精度 | 非自回归 + CIF 对齐,稳定 | 视实现而定 |
| 中文 | 字级、CER 10.18% | ~20% |
| 许可证 | 开源,可商用 | 开源 |
要更高精度的中文识别,默认用旗舰 Fun-ASR-Nano;完整中文实战见 中文语音识别;长音频分段见 VAD。
FunASR 全家桶开源(MIT)——字级时间戳、ASR、VAD、标点、说话人、LLM-ASR(旗舰 Fun-ASR-Nano),拿来即用。觉得有用就点个 Star 👇
也欢迎 Star:SenseVoice · Fun-ASR · FunClip
相关文章
- FunASR vs Whisper 实测对比
- SenseVoice 部署指南
- Fun-ASR-Nano 使用指南
- 说话人分离:谁在何时说话
- 情感与语种检测
- 实时流式语音识别
- 转写超长音频(1小时一次搞定)
- 命令行转写(文本/JSON/SRT)
- 自托管 OpenAI Whisper API 替代
- 自动生成字幕(SRT / VTT)
- Python 语音转文字教程
- FunASR 跑进 llama.cpp(whisper.cpp 替代)
- FunASR vs faster-whisper(中文/粤语)
- 轻量语音识别(CPU 250MB)
- 自托管替代 Deepgram/AssemblyAI
- 选哪个 FunASR 模型
- 粤语语音识别(SenseVoice 原生粤语)
- 日语语音识别(SenseVoice 转写+标点+情感)
- Python 语音活动检测(VAD)
- 自托管替代 Google/AWS/Azure 云语音 API
- 中文语音识别(普通话)实战
- 标点恢复 Python 实战