FunASR Paraformer 时间戳:5分钟拿到每个字的毫秒级位置
【免费下载链接】FunASROpen-source speech recognition toolkit for training, inference, streaming ASR, VAD, punctuation, speaker diarization pipelines, and OpenAI-compatible/MCP serving.项目地址: https://gitcode.com/GitHub_Trending/fun/FunASR
FunASR 的 Paraformer 时间戳功能让语音识别结果自带逐字毫秒级位置。看完这篇,你能用不到 10 行代码把音频里每个字钉在时间轴上,直接喂给字幕生成或关键词定位。
字幕生成时,你得知道"这个字在第几秒"
做字幕、会议转录、语音搜索,都绕不开同一个问题:识别出"今天天气真好"只是第一步,你还得知道"今天"出现在 0.12s、"真好"出现在 0.92s。几十分钟的录音手动标时间?根本干不完。Paraformer 时间戳功能就是解决这个的——每个字对应一对[start_ms, end_ms],直接给。
先看看输出长什么样
跑通之后,generate()返回的结果大致如下:
text: "今天天气真好" timestamp: [[120, 380], [380, 650], [650, 920], [920, 1180]]四个时间对,对应四个汉字。单位是毫秒。如果同时开了句子级时间戳,还会多一个sentence_info字段,按句切分并附带每句的起止时间。
三行代码跑通 Paraformer 时间戳
初始化 Paraformer 模型并调用generate(),关键参数在注释里标了"为什么需要它":
from funasr import AutoModel model = AutoModel(model="paraformer-zh", vad_model="fsmn-vad", punc_model="ct-punc") result = model.generate( input="audio.wav", output_timestamp=True, # 没有它,timestamp 字段不会出现 sentence_timestamp=True, # 输出句子级时间戳,写入 sentence_info return_time_stamps=True, # 启用时间戳后处理与对齐 ) print(result[0]["text"]) print(result[0]["timestamp"])paraformer-zh是 ModelScope 上的短名,等价于speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-pytorch。fsmn-vad负责长音频切段,ct-punc负责标点恢复,三者配合就是生产级中文 ASR 链路。
返回字段逐个拆解
| 字段 | 含义 | 示例 |
|---|---|---|
text | 识别文本(含标点) | "今天天气真好。" |
timestamp | 逐字时间戳,单位 ms | [[120,380],[380,650]] |
sentence_info | 句子级切分(需sentence_timestamp=True) | [{text, start, end, timestamp}] |
raw_text | 未加标点的原始文本(需return_raw_text=True) | "今天天气真好" |
踩过的坑,一个个说
结果里没有timestamp字段?原因:output_timestamp是generate()的运行参数,不是AutoModel的初始化参数。解法:每次调用generate()时显式传output_timestamp=True。
时间戳和文字对不上、错位?原因:Paraformer 按 16kHz 单声道设计,44.1kHz 的 MP3 直接塞进去,时间轴会漂。解法:先ffmpeg -i in.mp3 -ar 16000 -ac 1 out.wav转格式再喂给模型。
长音频后段的时间戳乱了?原因:VAD 切段后每段的时间戳是段内相对值。解法:fsmn-vad会自动做偏移补偿;如果你自己切段,记得手动加上段起始偏移。
想要句子级而不是字级时间戳?原因:默认timestamp是逐字的,字幕场景通常按句。解法:加sentence_timestamp=True,然后读sentence_info字段,每句自带start、end和该句所有字的时间戳。
下一步
- 接字幕生成:仓库里有现成脚本 generate_subtitle.py,把
timestamp直接转成 SRT / VTT 格式,支持说话人标注。 - 长音频调优:
vad_kwargs={"max_single_segment_time": 30000}控制 VAD 最大分段时长(毫秒),避免单段过长导致时间戳累积漂移。模型源码在 funasr/models/paraformer/,时间戳对齐逻辑在model.py里可以看到。
【免费下载链接】FunASROpen-source speech recognition toolkit for training, inference, streaming ASR, VAD, punctuation, speaker diarization pipelines, and OpenAI-compatible/MCP serving.项目地址: https://gitcode.com/GitHub_Trending/fun/FunASR
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考