![读懂MOSS-Transcribe-Diarize输出:[时间戳][Sxx]紧凑格式与说话人标签完全解析](http://pic.xiahunao.cn/yaotu/读懂MOSS-Transcribe-Diarize输出:[时间戳][Sxx]紧凑格式与说话人标签完全解析)
读懂MOSS-Transcribe-Diarize输出[时间戳][Sxx]紧凑格式与说话人标签完全解析【免费下载链接】MOSS-Transcribe-DiarizeA 0.9B model for long-form transcription in 50 languages with speaker diarization, timestamps, and acoustic event awareness项目地址: https://gitcode.com/gh_mirrors/mo/MOSS-Transcribe-DiarizeMOSS-Transcribe-Diarize 是一个 0.9B 规模的开源音频理解模型支持 50 种语言一次推理即可同时完成长音频转写、说话人分离Diarization和时间戳对齐。但它输出的并不是常见的 JSON 或字幕文件而是一串形如[0.48][S01]Welcome everyone[1.66]...的紧凑文本。很多新手第一次看到这种输出会懵方括号里到底是什么说话人标签该怎么用本文带你逐字段拆解 MOSS-Transcribe-Diarize 的输出格式从[时间戳][Sxx]的含义到如何解析成结构化数据、再导出为 SRT/ASS 字幕一篇讲透 。一、为什么模型选择紧凑格式输出传统做法是把 ASR语音转写和说话人分离两个系统拼起来再用脚本对齐时间轴误差会层层累积。MOSS-Transcribe-Diarize 采用端到端方案模型直接生成时间 说话人 文本三者绑定的转写流因此输出天然对齐无需二次拼接。官方定义的规范格式canonical output format只有一行[start_time][Sxx]transcribed speech[end_time]四个要素首尾相接相邻片段直接拼接成一条连续序列中间没有换行、没有多余符号——这就是紧凑格式名字的由来。二、官方输出示例一图看懂 [时间戳][Sxx] 结构下图展示了模型的输入输出过程音频经 Audio Encoder 编码后由自回归 SpeechLLM 逐 token 生成转写文本每句话都带有起始/结束时间戳和说话人编号图中为 S01、S02、S03 三位说话人再看一个英文会议的完整输出摘自 README.md[0.48][S01]Welcome everyone[1.66][12.26][S02]The new transcription pipeline is ready for evaluation[13.81][14.36][S01]Great, include the diarization results in the report[18.76]它其实是由 3 个片段首尾相连组成的流#起始时间戳说话人标签语音文本结束时间戳1[0.48][S01]Welcome everyone[1.66]2[12.26][S02]The new transcription pipeline is ready for evaluation[13.81]3[14.36][S01]Great, include the diarization results in the report[18.76]三、逐字段拆解四个要素各是什么1. 起始时间戳[start_time]单位为秒支持小数如0.48表示 0.48 秒即 480 毫秒标记该句语音开始的位置是全片段的时间锚点2. 说话人标签[Sxx]固定格式字母S 一个或多个数字如[S01]、[S02]、[S03]同一说话人全程使用同一编号无论出现多少次编号不会变化——这正是说话人分离的体现编号按说话人首次出现顺序递增但不保证与实际身份姓名/角色对应需要人工或业务侧自行映射3. 语音文本transcribed speech两个方括号之间的内容即这段语音的转写结果支持 50 种语言中英文混说也能处理文本中若真的出现方括号数字如第[2024]年解析器会智能识别为正文而非时间戳4. 结束时间戳[end_time]标记该句语音结束的位置同样以秒为单位解析规则一个片段的结束时间要等下一个片段的起始时间戳出现或整段流结束后才被确认输出 小贴士结束时间戳不一定紧邻文本末尾而是借用了下一个片段的开头来闭环所以逐片段解析时要记住这一点。四、如何解析紧凑格式项目内置了流式解析器你完全不需要自己写正则。项目内置的 transcript_parser.py 提供了一套免正则的状态机流式解析器核心特性逐字符扫描支持任意切分的文本块chunk输入即使一个字一个字地喂给它也能正确解析实时产出模型边生成、你边拿到完整片段适合做实时字幕健壮性片段之间的空白、开头的杂音文本会被自动忽略[start][S01]...[end]结构不合法的假时间戳会退化为正文用法上只需要一个函数parse_transcript(text)即可把紧凑文本转换为结构化的TranscriptSegment列表每个片段包含 4 个字段start、end、speaker、text数据定义见 transcript_parser.py 的TranscriptSegment。解析行为的各种边界用例可以参考 test_transcript_parser.py例如输入: [0][S01]第[2024]年编号[001]继续[4] 输出: 1 个片段 → start0.0, end4.0, speakerS01, text第[2024]年编号[001]继续可见正文中的[2024]、[001]被完整保留没有误判为时间戳。五、从输出到字幕SRT/ASS 导出与说话人配色解析出分段后subtitle/ 模块会把它加工成可直接使用的字幕文件SRT 导出subtitle/export.py 会把秒级时间戳换算成标准的时:分:秒,毫秒格式并可加上说话人前缀1 00:00:00,480 -- 00:00:01,660 S01: Welcome everyone 2 00:00:12,260 -- 00:00:13,810 S02: The new transcription pipeline is ready for evaluation还支持speaker_names映射把[S01]直接替换成主持人嘉宾等真实姓名字幕立刻变得可读。ASS 导出多说话人分色 防重叠排版按说话人着色不同Sxx自动分配不同颜色调色板见 subtitle/export.py 的SPEAKER_COLORS一眼分辨谁在说话重叠分行多人抢话时subtitle/layout.py 会自动把重叠片段排到不同车道避免字幕互相遮挡片段规整subtitle/postprocess.py 会合并过短片段、切分超长片段默认单条 1~6 秒、不超过 24 字让字幕节奏更适合观看如果你不想写代码也可以直接用内置的字幕 Web 应用mtd-subtitle-web上传音视频 → 预览解析出的分段 → 一键下载 JSON/SRT/ASS甚至直接烧录进 MP4详见 README.md 的 Subtitle Web App 一节。六、新手常见问题 FAQQ1时间戳为什么是0.48这种小数而不是00:00:00,480模型层统一用秒浮点数便于程序计算SRT 等人类可读格式是在导出阶段转换的。Q2说话人编号 S01/S02 是随机的吗编号本身稳定且连续但对应的是声音特征而非真实身份需要业务侧根据上下文或声纹进一步确认映射。Q3长音频输出被截断了怎么办服务端推理时调大max_new_tokens如 65536即可让解码器生成完整的带说话人标签转写。Q4文本里出现方括号会被误解析吗不会。解析器只有在片段起始位置 合法数字 后接说话人标签的完整结构成立时才认为是时间戳否则按正文处理。七、小结格式要素含义示例[start_time]片段起始时间秒可带小数[0.48][Sxx]说话人标签S数字全程一致[S01]text该片段语音的转写文本Welcome everyone[end_time]片段结束时间秒[1.66]一句话记住 MOSS-Transcribe-Diarize 的输出时间戳定位置、Sxx 定身份、中间是内容、下一段的开头给上一段收尾。掌握了这条读法再配合内置解析器和字幕导出工具你就能把这个 0.9B 小模型的能力真正用起来了 。【免费下载链接】MOSS-Transcribe-DiarizeA 0.9B model for long-form transcription in 50 languages with speaker diarization, timestamps, and acoustic event awareness项目地址: https://gitcode.com/gh_mirrors/mo/MOSS-Transcribe-Diarize创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考