1372600d71
- C2: asr_adapter 并入讯飞上传/轮询/解析,复用 extract_audio 分离音频, 新增 doco asr 命令读 C1 热词;真转写 ep001 出 310 句带时间戳 - 补提交 C1 代码(llm.py / term_extract.py)与累积词典 - .gitignore: 挡 doco/programs 下 png/wav/mp4 及中间帧目录、本地 settings Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
8.9 KiB
8.9 KiB
Doco 子项目 · P3 设计稿(三方交叉融合)
模块定位:《军事科技》中台终极目标。把 A 稿(脚本)、B 稿 v2(屏幕字幕)、ASR(口语实况)三方交叉融合,产出最接近播出的终版文稿。 前置:P1(帧筛)、P2(本地 OCR + 扒词流水线,产出 B稿_v2.txt 743 行)已完工。 状态:设计冻结,待开发。 设计时间:2026-06-15 本稿在原
doco_project_design.md基础上,据 P2 成果与制片人最新决策修订。冲突处以本稿为准。
一、两个交付物(内容一致,形态不同)
| 交付物 | 给谁 | 形态 | 用途 |
|---|---|---|---|
| 融合 B 稿 | 爱德华(另一项目) | 逐条碎句 + 密集字幕级时间戳 [XmYs] 文本 |
字幕/片段定位,时间精度优先 |
| 融合 A 稿 | 编导 | 公文格式 docx,保留【导视】【主持人N】【解说N】【专家N】【隔断】分段 | 最像播出版的存档稿,方便编导复用 |
一致性约束:融合 A 稿由融合 B 稿生成(按 A 稿分段结构归拢 + 套格式),所以两者内容天然一致——是"构造出来的一致",不是事后比对硬凑。
二、流水线四阶段(注意依赖顺序:术语提取必须在 ASR 之前)
A稿 ──► ①术语提取·更新词典 ──► 本期热词表
│
视频 ──► ②分离音频·转码WAV ──► 讯飞STT(热词+pd=mil) ──► 新ASR(带时间戳)
│
B稿v2 ⊕ 新ASR ──► ③交叉复审 ──► 融合B稿(碎句·时间戳·给爱德华) + fusion_review留痕
│
融合B稿 + A稿(语义对齐分段) ──► ④LLM语义融合 ──► 融合A稿(公文docx·给编导)
沿用 P2 的工程纪律:各阶段解耦、中间产物落缓存、可断点续跑、可单独重跑。
Stage C1 — 术语提取 + 词典更新(规则层 + 轻量 AI)
- 从 A 稿提取专有名词(武器/型号/番号/人名/机构/技术概念),并入中台累积词典。
- 词典字段:
term / domain / first_seen_episode / frequency。逐期累积,越用越准。 - demo 词典(34 条热词)作为基线,本期在其上增量更新(如 F/A-18E/F 大黄蜂、歼-10、黄貂鱼无人加油机…)。
- 产出本期热词表(讯飞上限 200 个,每个 2–16 字,
|分隔)供 Stage C2 用。
Stage C2 — 音频分离 + 讯飞 ASR(适配层)
- ffmpeg 从视频分离音频 → 转码 16kHz / 单声道 / 16bit WAV(讯飞硬要求,否则报误导性
language verify fail)。 - 调讯飞「录音文件转写(标准版)」(不要大模型版,免费包阉割
language参数)。参数:pd=mil、eng_smoothproc=true、eng_colloqproc=true、hotWord=<C1热词>。 - 签名:
signa = base64(HmacSHA1(MD5(appid + ts), secretKey))。上传/upload拿 orderId,轮询/getResult到 status=4。 - 产出新 ASR(句级,带时间戳,格式
[XmYs] 文本),落缓存asr_v2_timed.txt+ 原始 json。 - 起点代码:
xfyun_asr_standard.py(demo 已跑通),按下方安全要求改造。
Stage C3 — B⊕ASR 交叉复审 → 融合 B 稿(给爱德华)
- 形态:甲 — 保持 B稿v2 的碎句粒度(743 行),密集字幕级时间戳原样保留;ASR 只做复审纠错,不改变行结构、不并到句级。
- 复审做三件事:① 用 ASR 比对查 B 稿有没有重复行/错漏;② 屏幕术语拼写以 B稿v2 为准(见优先级表);③ B 稿明显 OCR 错字而 ASR 对的,用 ASR 覆盖。
- 不机械逐字标记:由 LLM 读语义判断"是否真分歧",一两个字的等价差异不算分歧。
- 产出:
融合B稿.txt(碎句+时间戳) +fusion_review.csv(机器做了选择/拿不准的地方留痕)。
Stage C4 — 语义融合 → 融合 A 稿(给编导)
- 拿融合 B 稿,按 A 稿分段结构语义对齐归拢成段(参照未融合的 A 稿语义,不是机械时间切分)。
- LLM 读 A 稿语义,理解后重组为"最像播出版"的段落文本,套公文格式。
- 全自动,不阻塞主流程:拿不准的段落照常产出 + 进
fusion_review,不卡住出稿。 - 产出:
融合A稿.docx(公文格式)。
三、三方权威优先级(据 P2 修订 —— B 稿地位升级)
关键变化:原设计把 B 稿定为"OCR 错字多,仅作交叉验证,权威最低"。P2 后 DeepSeek-OCR 产出的 B稿v2 屏幕术语拼写又准又干净,故 B 稿升级加权。
| 看什么 | 信谁 | 说明 |
|---|---|---|
| 屏幕术语 / 型号 / 番号(箭-3、萨德、见证者-136) | B稿v2 ≈ A稿 并列权威 | B 稿是屏幕实际打出的字,常更贴近播出;A 稿是规范写法。两者一致则采用,冲突进 review |
| 口语实况 / 语序 / 语气 | ASR | 主持人/专家实际怎么念(含临场改词) |
| 书面结构 / 完整语义 / 分段 | A 稿 | 编导书面版,管【…】分段与段落语义骨架 |
| 同音事实错(美以→美伊) | A 稿 / B稿v2 覆盖 ASR | ASR 同音误识,句子通顺但语义荒谬,靠 A/B 发现 |
| 整段是否存在 | B稿v2 + ASR 联合判定 | 两者都无 → A 稿该段为未播出,标记删除 |
四、融合 A 稿公文格式(Stage C4 出稿规范)
| 层级 | 字体 | 字号 / 其他 |
|---|---|---|
| 大标题 | 方正小标宋 | — |
| 一级标题 | 黑体 | — |
| 二级标题 | 仿宋,加粗 | — |
| 正文 | 仿宋 | 四号(14pt),1.25 倍行距 |
⚠️ 字体可用性:方正小标宋是商业字体,生成 docx 的机器若未安装,Word 会静默回退、版式垮掉(同字体类坑)。出稿前须确认制片机/编导机已装方正小标宋(公文常用,多半有);否则在脚本里配置回退字体(如标宋→宋体加粗)。用 docx skill 实现时按 GB/T 9704 党政机关公文格式参照。
五、留痕与人工策略
- 全自动产出,绝不阻塞主流程。编导拿到的是干净成品,无需做对齐/确认工作。
- 机器做了选择或拿不准的地方(B/ASR 分歧、低把握段落改写、疑似整段删除、疑似编导笔误)全部甩进
fusion_review.csv留痕,供编导/爱德华事后复核,不卡出稿。 - 改动类型枚举沿用原设计:
unchanged / minor_edit / term_normalize / rewrite_large / segment_delete / segment_add / editor_typo;带 confidence,低把握的进 review 文件。
六、安全:密钥外置(开发第一件事)
- 现状问题:
xfyun_asr_standard.py第 41-42 行明文硬编码了讯飞 APP_ID / SECRET_KEY,且该文件已进 project,凭证已暴露。建议在讯飞控制台轮换该密钥。 - 正式做法:凭证只存制片机本地(
xfyun_credentials.json或环境变量,且加入.gitignore不进库),脚本运行时读取。代码与对话中只引用变量名,绝不出现真值。 - 三套密钥互不相通:讯飞消费端(听见 App)≠ 讯飞开发端(开放平台,本模块用)≠ Claude API。本模块用开发端 + Claude API。
七、外部依赖
- 讯飞开放平台「录音文件转写(标准版)」—— 开发端密钥已就绪(制片机本地)。
- Claude API(Stage C4 语义融合)—— 建议
claude-sonnet-4-6起步;单期上下文 A稿6k + ASR5k + B稿~5k ≈ 16k 字,窗口充裕;每期 1–3 次调用。 - 本地 DeepSeek-OCR / Ollama —— 由 P2 提供 B 稿,本阶段不直接调。
- ffmpeg —— 音频分离 + 转码。
八、数据资产(中台共享,逐期累积)
- A 稿术语表 / 词典(核心):讯飞热词来源 + 规则层纠错字典,双重身份;逐期累积,识别质量滚雪球上升。基线 = demo 34 热词。
- OCR 错字映射表:肘→时、娈→变、夭→天… 随版本扩展(P2 已观察到 DeepSeek-OCR 错字远少于旧引擎,此表主要兜底)。
- 编导风格档案(远期):累积每位编导删改偏好,用于参数自适应。
九、待办与风险
- 并发版 Stage A 提速(P2 遗留):OCR 串行 ~30 分钟/期,GPU 空转;首选并发 4–8 路(
OLLAMA_NUM_PARALLEL),预计压到十分钟出头。P3 期间并行处理。 - 离线小机房模型搬运(P2 遗留):拷
.ollama/models文件夹。 - 方正小标宋字体可用性:出稿前确认,见第四节。
- 讯飞单源依赖:远期接阿里云 ASR 做备份/交叉。
- 整段删除/编导笔误判定:高风险,全自动产出但务必进 review 留痕。
十、本期可复用资产(demo / P2 产物)
| 文件 | 用途 |
|---|---|
B稿_v2.txt(743 行) |
Stage C3 输入(屏幕字幕,P2 产出) |
A稿_..._定稿.docx(实为 md 文本) |
Stage C1 术语源 + Stage C4 分段语义参照 |
xfyun_asr_standard.py |
Stage C2 起点代码(须先密钥外置) |
| demo 词典(34 热词) | Stage C1 词典基线 |
| 源视频 | Stage C2 音频源 |
现代防空反导大对决_终版.docx / 差异报告.docx |
集成测试黄金对照 |
P3 设计冻结。下一步:按 Stage C1→C4 拆任务给 Cline,沿用解耦+缓存+可重跑工程纪律。