feat: CCA 唱词助手子项目 v3 — 脚本版流水线完成
新增 cca/ 子项目:编导A稿+人声音频 → ASR+AI校对+AI折行 → 5段SRT字幕。 - 讯飞录音文件转写标准版(热词注入) - DeepSeek AI校对(严格纪律:只改错别字/术语/填充词,不润色) - DeepSeek AI折行(语义断句,≤14字/行) - 节目结构自动切分(导视/正片×3/预告) - 绝对时间戳SRT输出(大洋系统兼容) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
+147
@@ -0,0 +1,147 @@
|
||||
# 项目协作主控文件 (cca/CLAUDE.md)
|
||||
|
||||
---
|
||||
|
||||
## 🔖 状态栏 (STATUS — 每次结束 session 前必须更新这三行)
|
||||
|
||||
- **最后更新**:Claude Code(动手开发)| 2026-07-04
|
||||
- **当前状态一句话**:脚本版流水线 v3 完成(绝对时间戳+严格校对不润色),等制片人周一大洋系统验证 SRT 导入效果。
|
||||
- **下一个动手的人从这里开始**:读完本文件,运行 `python cca_pipeline.py --help` 了解用法。凭证需填入 `cca/.env`(XFYUN + DEEPSEEK)。可选下一步:用 `--audio` 跑真实 ASR(带热词注入)看是否比缓存版效果更好。
|
||||
|
||||
---
|
||||
|
||||
## 🤖 给 AI 的工作约定 (READ FIRST)
|
||||
|
||||
- 开始任何工作前,先读完本文件,特别是「状态栏」「交接备注」「关键决策」三节。
|
||||
- 完成一段工作后**增量更新**:「已完成」追加一条、「待办」勾掉或新增、必要时更新「关键决策」,最后改「状态栏」三行。不要重写整份文件,不要删历史,只追加/勾选。
|
||||
- 涉及发送、发布、删除、改权限、付款等不可逆操作前,先在对话里跟制片人确认。
|
||||
- **本项目着急用**——优先出可用版本,不追求完美架构。先跑通再优化。
|
||||
- **沟通**:全程简体中文;制片人不懂代码,解释说人话;给明确推荐不反复抛选项。
|
||||
|
||||
---
|
||||
|
||||
## 1. 项目概览
|
||||
|
||||
- **项目名**:CCA 唱词助手(ChangCi Assist)— 《军事科技》栏目编导/责编用的唱词字幕生成工具
|
||||
- **目标**:把编导 A 稿 + 粗编人声音频 → 经过 ASR + AI 校对 + 编导审稿 → 最终输出符合大洋系统的 SRT 字幕文件
|
||||
- **使用角色**:编导(提供 A 稿+音频、审稿确认)、责编(拿 SRT 拉到大洋上线)
|
||||
- **部署计划**:先独立部署在 lanhao 配音 2.0 网站测试,成熟后吸收进 TPS 主项目作为子功能
|
||||
|
||||
### 核心工作流
|
||||
|
||||
```
|
||||
编导A稿 ──→ AI提取专有名词词典
|
||||
↓
|
||||
粗编人声音频 + 词典 ──→ 讯飞ASR(录音文件转写标准版) ──→ 带时间戳ASR稿
|
||||
↓
|
||||
ASR稿 ⊕ A稿 比对
|
||||
↓
|
||||
┌─ AI自动修正(明显错别字)
|
||||
└─ 编导审稿台(拿不准的差异)
|
||||
↓
|
||||
B稿(定稿)
|
||||
↓
|
||||
按拍词规则折行 + 时间戳
|
||||
↓
|
||||
SRT文件(大洋格式)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 2. 技术栈与运行方式
|
||||
|
||||
- **语言**:Python(与主项目 backend 对齐)
|
||||
- **前端**:Web 界面(编导审稿台需要双屏对比 UI),技术选型待定(可复用主项目 React 或轻量方案)
|
||||
- **ASR**:讯飞开放平台 录音文件转写标准版(已有 API Key,与 doco 共用同一套讯飞凭证)
|
||||
- **AI**:LLM 用于两处——① 从 A 稿提取专有名词词典;② ASR 稿校对(的地得、引号、错别字)
|
||||
- **输出格式**:SRT(大洋系统兼容格式,有样本参照)
|
||||
- **美术风格**:参考 `ai-labeling/example/`(功能区划.jpg、幅面参考.jpg、页面风格.webp),与 TPS 主项目 UI 风格对齐
|
||||
- **凭证**:子项目自己 `.env`,不动主项目 `backend/.env`
|
||||
|
||||
---
|
||||
|
||||
## 3. 当前进度
|
||||
|
||||
- **已完成至**:脚本版流水线 v3 跑通——绝对时间戳 + 严格校对(只改错别字/术语/填充词,不润色不调序)+ AI折行 + 5段SRT。
|
||||
- **正在做**:无,等制片人周一在大洋系统验证 SRT 导入效果。
|
||||
- **卡点/待解**:无硬卡点。可选优化:用 `--audio` 跑真实 ASR(热词注入生效)看是否在转写层就避免"建制→舰只"类错误。
|
||||
|
||||
---
|
||||
|
||||
## 4. 已完成(只追加,最新在上)
|
||||
|
||||
- [2026-07-04] **脚本版流水线 v3(绝对时间戳+严格校对)**:① 恢复绝对时间戳(方便在大洋时间线对位);② 重写校对 Prompt——铁律:只改错别字/同音字、术语格式、口语填充词,绝不润色/调序/替换实词;③ 校对效果:60 处修正(vs v2 的 100 处,去掉了过度修改)。输出目录 `output_v3/`。
|
||||
- [2026-07-04] **脚本版流水线 v2 真实测试通过**:① 热词提取(规则+AI,127个术语)→ ② 讯飞ASR(94秒完成25MB音频,357句)→ ③ AI校对(DeepSeek,修正同音字/术语格式/口语填充,"建制"→"舰只"等)→ ④ AI折行(语义断句,98%行≤14字)→ ⑤ 5段SRT输出(段内相对时间戳,从00:00:00开始)。新增:hotword_extractor.py(热词提取)、ai_proofreader.py(AI校对)、ai_line_breaker.py(AI折行)。
|
||||
- [2026-07-04] 脚本版流水线骨架完成:① asr_client.py(讯飞ASR适配,从doco复用);② line_breaker.py(折行引擎,≤14字/语义断句/空白行检测);③ srt_writer.py(大洋格式SRT输出);④ segment_splitter.py(节目结构切分:导视/正片×3/预告);⑤ cca_pipeline.py(主入口串联全流程)。本地测试全部通过。
|
||||
- [2026-07-04] 子项目立项:目录结构、CLAUDE.md、Brief、主项目寄存条建立。
|
||||
|
||||
---
|
||||
|
||||
## 5. 待办(按优先级)
|
||||
|
||||
- [x] ~~PRD / 业务规则确认~~ → 已在对话中完成(2026-07-04)
|
||||
- [x] ~~脚本版流水线~~ → v3 完成(绝对时间戳+严格校对),等大洋验证
|
||||
- [x] ~~AI 校对层~~ → 已实现(两层防线:热词注入+DeepSeek 严格校对)
|
||||
- [ ] **大洋系统验证**:周一导入 SRT 测试兼容性
|
||||
- [ ] **热词注入真实 ASR 测试**:用 `--audio` 跑完整流水线(非缓存),验证热词在转写层的效果
|
||||
- [ ] **编导审稿台**:双屏对比 UI、差异高亮、编导确认/手改交互(第二步)
|
||||
- [ ] **部署至 lanhao 配音 2.0**:先跑起来测试
|
||||
|
||||
---
|
||||
|
||||
## 6. 关键决策(跨 session 最易丢)
|
||||
|
||||
- [2026-07-04] **ASR 稿是权威底稿**:最终 SRT 必须和音频对应,ASR 稿(时间戳+内容)是基准。A 稿只提供专有名词写法和上下文参考,不能用 A 稿覆盖 ASR 的内容结构。
|
||||
- [2026-07-04] **讯飞用录音文件转写标准版**(与 doco 一样,不要大模型版)。热词偏置注入专有名词词典。
|
||||
- [2026-07-04] **编导审稿台是必要环节**:AI 拿不准的差异必须过编导确认,不能全自动。尊重编导创作主权(继承主项目设计哲学)。
|
||||
- [2026-07-04] **先独立部署再吸收**:先在 lanhao 配音 2.0 上跑通测试,成熟后并入 TPS 主项目。不等主项目进度。
|
||||
- [2026-07-04] **SRT 格式有样本**:data/ 下 3 个 SRT 是人工拍词导出的真实样本,作为格式参照。
|
||||
- [2026-07-04] **折行(拍词)规则**:
|
||||
- A. 每行 ≤ 14 字
|
||||
- B. ASR 中 >2 秒空白 → 插入空白行(屏幕清字幕)
|
||||
- C. 按语义断句(不机械凑满 14 字),符合阅读习惯
|
||||
- D. 去掉逗号/句号/感叹号等标点,只保留引号
|
||||
- [2026-07-04] **输出结构(5 个 SRT)**:
|
||||
- 导视 1 个 + 正片 3 个 + 下期预告 1 个
|
||||
- 正片 3 个拆分依据:按时长大致均分,优先在角色转换处(解说词→专家采访)切分
|
||||
- 5 个 SRT 时间戳连续拼接 = 音频总长
|
||||
- [2026-07-04] **节目结构标志词**:
|
||||
- 导视结束标志:听到"本期《军事科技》……"
|
||||
- 正片开始标志:听到"各位观众你们好,我是主持人蓝皓"
|
||||
- 正片结束标志:听到"好了观众朋友们,感谢您关注国防军事频道军事科技……"
|
||||
- 正片之后是下期预告(无固定话术)
|
||||
- [2026-07-04] **正片拆 3 个 SRT 的原因**:大洋字幕系统不稳定容易出错,责编提的需求。
|
||||
- [2026-07-04] **音频是纯人声**:已分离好的干净音频(无 BGM/音效),无需人声分离。
|
||||
- [2026-07-04] **先出脚本版**:命令行跑通流水线,审稿台第二步做。
|
||||
- [2026-07-04] **讯飞代码从 doco 复用**:`doco/src/doco/asr_adapter.py` 有完整签名/上传/轮询/解析逻辑,直接适配。
|
||||
- [2026-07-04] **SRT 用绝对时间戳**:每段 SRT 的时间戳是音频中的真实位置(不从 00:00:00 开始),方便在大洋时间线直接对位。制片人实测确认比相对时间戳好用。
|
||||
- [2026-07-04] **AI 校对严格纪律**:只允许改三类——① 错别字/同音字 ② 术语格式(F-15J)③ 口语填充词删除。绝不润色、绝不调序、绝不替换实词。ASR 是已录音频的转写,改不了内容。
|
||||
- [2026-07-04] **两层 ASR 纠错防线**:第一层=热词注入(预防,让讯飞在转写时就认对专有名词);第二层=AI 校对(修正,用 A 稿上下文判断同音字)。两层互补。
|
||||
- [2026-07-04] **LLM 选型已定**:校对+折行+热词提取统一用 DeepSeek(deepseek-chat),性价比最优。
|
||||
|
||||
---
|
||||
|
||||
## 7. ⏩ 交接备注
|
||||
|
||||
- **立项背景**:编导剪完节目后需要给责编一份 SRT 唱词字幕文件。传统流程是责编拿折行稿到大洋系统里 1:1 实时"拍词"(播放视频、听到对应句子拍空格记录时间戳),效率极低。CCA 用 ASR 自动化这个过程。
|
||||
- **"拍词"术语解释**:折行稿(去标点、按规则断行的文稿)+ 时间戳对位 = 拍词。传统靠人工实时听拍,CCA 用 ASR 时间戳代替。
|
||||
- **与 doco 的区别**:doco 是"播出后"整理终版文稿(三方融合);CCA 是"剪辑后、播出前"生成唱词字幕(ASR→校对→SRT)。两者共用讯飞 ASR 能力,但流程目的完全不同。
|
||||
- **数据样本**:`data/` 下有 A 稿 docx + mp3 音频 + 3 个人工拍词 SRT(对应正片三段)。
|
||||
- **代码文件**:`src/` 下是核心流水线代码(asr_client / line_breaker / ai_line_breaker / ai_proofreader / srt_writer / segment_splitter / hotword_extractor),入口 `cca_pipeline.py`。
|
||||
- **凭证**:需在 `cca/.env` 中填写 `XFYUN_APP_ID`、`XFYUN_SECRET_KEY`、`DEEPSEEK_API_KEY`。
|
||||
- **输出目录**:`output/`(ASR 缓存 + v1 输出)、`output_v2/`(相对时间戳版)、`output_v3/`(绝对时间戳+严格校对,当前最优)。
|
||||
- **运行命令示例**:
|
||||
- 从缓存跑(调试校对/折行):`python -X utf8 cca_pipeline.py --asr-cache output/asr_raw.json --script "data/重走战争老路的日本军备(A稿).docx" --output-dir output_v3`
|
||||
- 完整流水线(含真实 ASR):`python -X utf8 cca_pipeline.py --audio "data/重走战争老路的日本军备A0.mp3" --script "data/重走战争老路的日本军备(A稿).docx" --output-dir output_v4`
|
||||
- **时间压力**:这两天要出可用版本,功能不复杂但要快。
|
||||
|
||||
---
|
||||
|
||||
## 8. 待确认 / 开放问题
|
||||
|
||||
- [x] ~~拍词规则~~ → 已确认(见关键决策)
|
||||
- [x] ~~大洋 SRT 样本文件~~ → data/ 下已有 3 个真实样本
|
||||
- [x] ~~音频格式~~ → 纯人声 MP3,无需预处理
|
||||
- [x] ~~LLM 选型~~ → DeepSeek(deepseek-chat),已验证效果好、价格低
|
||||
- [ ] 前端审稿台技术选型(第二步再定)
|
||||
- [ ] 大洋系统 SRT 导入兼容性(周一验证)
|
||||
Reference in New Issue
Block a user