状态: 开发中(2026-08 用户需求批次;三连体验 + 信息面板 + 合集联动 + 断句自适应已完成,说话人分离弱化版实施中) 目标: 采集过程中右侧信息透明化(平台/时长/合集/字幕)· 说话人切换可见 · 合集识别与档案检测联动 · 断句随说话人语速停顿习惯自适应 关联: 档案检测准确度头脑风暴([ ] 已归档) · 视频数据提取清单 · 需求池(REQ-148~154)
- 体验三连(已完成):最近画面按时间顺序排列;ASR 未沉淀行多行展示(识别中按句读拆行 + 已定稿并存);档案新增「未知」选项
- 采集信息面板(REQ-151):采集过程右侧空白区显示播放平台、视频时长、是否合集及第几集、字幕情况(有无/内嵌/外部文件)
- 合集检测与联动(REQ-152):标题系列名/序号提取 → 档案检测系列名投票 + 记忆系列键 + 课程分组扩展
- 说话人分离弱化版(REQ-153):SpeakerEmbeddingExtractor 引擎接线 + VAD 段馈入 + 讲者切换事件;课堂助手使用说明提醒
- 语速停顿自适应(REQ-154):动态合并阈值 + 语速骤变事件
| REQ | 内容 | 验收要点 | 规划状态 |
|---|---|---|---|
| REQ-148 | 最近画面按时间先后排列(用户需求) | 缩略图条旧→新,新图追加末尾 | 已实现 |
| REQ-149 | ASR 未沉淀行多行展示 + 识别中按句拆行(用户需求) | 识别中多句各占一行灰斜;连续定稿不覆盖丢失;定稿合并待沉淀 | 已实现 |
| REQ-150 | 档案新增「未知」选项,无法识别时选中(用户需求) | 零信号命中→候选 unknown→自动选中生效;参数默认档零回归 | 已实现 |
| REQ-151 | 采集信息面板:平台/时长/合集集号/字幕情况 | 采集 30-60s 内信息齐全;播放器 OCR 识别时间与分P文本;字幕检测状态如实 | 已排期 |
| REQ-152 | 合集检测与联动:extract_series/normalize_title + 档案系列名投票 + 记忆系列键 + 课程分组 | 标题 P/集/EP/括号/数字后缀正确识别(反例不误判);P1 与 P5 投票一致;选一次整系列生效;B站合集自动归组 | 已排期 |
| REQ-153 | 说话人分离弱化版:引擎接线 + VAD 段馈入 + 切换事件 + 使用说明提醒 | 访谈/会议会话产出讲者切换时间轴;模型缺失降级无标注;使用说明含提醒 | 已排期 |
| REQ-154 | 语速停顿自适应:动态合并阈值 + 语速骤变事件 | 机关枪说话人不再整段挂起;慢速说话人半句不丢;语速骤变事件落库 | 已排期 |
- 信息面板数据全本地:平台=标题后缀规则(
normalize_title,B站/YouTube/腾讯视频等剥离表);时长=播放器区域 OCR 时间文本(播放器区域检测已有,识别当前/总时长文本);合集=标题规则 + 播放器 OCR 分P文本(P2/12、第2集);字幕=subtitle_detect实时状态。零网络请求。 - B站 p= 参数获取否决搜索接口:标题→搜索 API 反查 bvid→pagelist 拿分P——性能可行(两次请求 <1s 后台)但无 cookie 高频 412 风控、接口签名随前端变动、标题外发违背本地优先精神、同名视频搜错。替代=播放器 OCR(完全本地,顺带解决时长);搜索接口记为可选增强(需用户授权)。
- 合集检测纯规则:P/第X集/EP/括号/数字后缀五模式 + 边界反例(
Python3/2026/UP主不误判)+ 序号开头放弃(诚实降级);跨会话同系列 ≥2 确认合集。与course_of(第X章前缀)合并为统一系列键。 - 说话人分离弱化版:不聚类身份、只标切换点(时间戳+置信度);sherpa-onnx
SpeakerEmbeddingExtractor(A3 spike 已验证 1.13 可用)+ wespeaker 模型(Apache-2.0);会话后离线分析(session-audio WAV + VAD 段边界 → 每段 embedding → 相邻余弦,复用speaker_change.rs判定器);模型缺失 → 无讲者标注降级;产物/会话详情展示切换时间轴。 - 断句自适应:S-1 会话前段统计平均段前停顿(
pause_ms已落库)→ 合并 gap 从固定 600ms 参数化(asr_merge阈值注入);S-2speech_rate已落库 → 段间骤变 →session_events新事件(重点标注备数据,消费端后续接线)。
- Rust 单测(实施中):
series_detect五模式+反例矩阵、平台后缀剥离、course_of回归(第X章行为不变)、检测系列名投票一致性、ProfileMemory系列键跨集命中+旧 JSON 兼容、断句自适应阈值统计/注入、语速骤变事件 - 前端:
npm run build通过(TS 类型检查 + 打包);信息面板 UI 真机验证清单见下 - 模型:wespeaker 说话人 embedding 模型(开发期手动下载至
models/,不入库;生产期捆绑/首启下载)
- 采集 B站视频:面板 30-60s 内显示平台=B站、总时长、合集集号(标题带 P 或播放器 OCR 识别)
- 采集无字幕视频:字幕状态显示"未检测到字幕";有字幕视频显示"内嵌/滚动字幕"
- 访谈/会议会话(模型就绪):会话详情出现讲者切换标记;模型缺失时无标记不报错
- 机关枪讲课(停顿 <600ms):段落粒度改善(不再整段挂起/停止时才冒)
- P1/P2 两个会话:档案检测结果一致;确认一次后 P2 直接生效(记忆系列键)
Rust:series_detect.rs(新:normalize_title/extract_series/normalize_episode)· commands_session.rs(course_of 扩展)· video_profile.rs(ProfileMemory 系列键 + ObservedSignals.is_series)· commands_video.rs(检测入口系列名)· asr_merge.rs/live_session_persist.rs(动态合并阈值注入)· live_session_loop.rs(语速骤变事件)· live_session.rs/speaker_engine.rs(新:embedding 引擎接线)· session_events.rs(新事件类型)· commands_speaker.rs(新:会话讲者分析命令)· lib.rs(注册)· 测试文件若干
前端:types.ts(信息面板/讲者切换事件类型)· LiveActivityPanel.tsx(信息卡 UI)· SessionDetailPanel.tsx(讲者切换时间轴标记)· ProfileDetector.tsx/ClassroomPage.tsx(系列联动)
- 讲者身份识别/聚类(A/B/C 时间轴归属,V1.0 模型分发波)
- B站搜索接口反查(可选增强,需用户授权 + 降级设计)
- 词级时间戳落库与"定位回听"(V1.0 升级 + schema 迁移)
- 视频文件元数据提取展示(ffprobe 已捆绑,零成本,独立小批次)