lanshu-create-ai-presenter-video 拆解
拆解对象:cclank/lanshu-create-ai-presenter-video(2818★,活跃至 2026-10,327 文件,带 CI 与 tests) 拆解方式:GitHub API 直连文件树 + 通读 SKILL.md 全文(215 行)与 explainer/、references/、scripts/ 结构核对。生成实测需付费 provider,本期为结构实评。 口播形态对照:本拆解重点关注其与「资讯播报类口播视频」(比特新语类)的可迁移性。
1. 它解决什么问题
数字人口播的默认事故不是「做不出来」,是三件事:侵权(拿没授权的肖像和声音生成视频)、烧钱(口型没对齐就全片重渲、付费 API 反复试错)、对不上(配音改了一个词,字幕/图形/剪辑全部漂移)。大多数同类 skill 只管「生成」,这个 skill 的 SKILL.md 里最重的部分全是治理:授权确认链、付费审批五要素、修改路由表。
它的双路由设计也源于现实约束:有授权肖像的用户走 presenter(数字人出镜),没有的走 styled(12 种风格化解说替演)——并且「Never fall back to presenter silently:它需要用户可能没有的肖像」,不静默降级、开口问一次。
2. 怎么设计的
2.1 授权链:在掏钱之前逐项确认
Operating rules 第一组就是授权四件套:图像权利、成人状态、远程上传批准、声音克隆授权——「在相关远程动作之前」确认。两条配套铁律:「Never infer a real voice from an image」(不能从照片推断出真人声音——声音必须来自授权样本或选定库声)、「Never pass 用户已录旁白 as --voice-sample」(那是锁定音频,不是克隆素材)。这是对 AI 换脸/克隆事故带(国内已有多起数字人维权案)的正面回应,同类 skill 里独一份。
2.2 付费纪律:五要素 + hash 寻址防重复
「Treat remote generation as potentially billable」——第一次付费调用前必须报:上传了什么资产、请求的秒数/单位、已知成本、试跑规模、重试上限、预期产出。「Reuse an approval already given for that exact plan」——同一计划的批准可复用,但换计划重新问。topic-to-digital-human 同款思路的 hash 寻址(「approved this exact hash-addressed package → 不再问也不再重渲」)在这里表现为状态机复用。
2.3 master clock:locked narration 统治一切时间轴
「The final narration is the master clock for presenter motion, captions, graphics, cuts, and delivery duration.」定稿配音之后:ASR 回验(漏字/加字/数字/人名/口吃五类错误清单)、「Record real durations. These durations now define the timeline.」、provider 时长上限时用 ASR 时间戳切分而不是猜(plan_segments.py --timings sentences.json)。剪辑侧「deterministic timeline driven by the locked audio」,字幕和关键词图形「only after audio and selected media are final」——上锁顺序写死。
2.4 交付即审计:finalize_delivery.sh 的九项检查
母版/分享双编码 + 两遍响度归一化(-16 LUFS 默认,目标平台不同用 PROGRAM_LUFS 覆盖——这个环境变量设计本身就是「平台无关」的正确写法)+ 全解码验证 + 交付响度实测 + 黑帧/冻结帧计数 + 九帧 contact sheet。「builds everything in a temporary directory and publishes nothing unless every check passes」——不通过就不发布,fail-fast 的交付版。check_state.py --write 推进 job.json 状态到 verified,形成状态机闭环。
2.5 修改路由表:改什么就从哪重跑
Resume 规则精确到资产类型:词改 → research 起;发音改 → spoken 起;换声 → TTS 起;口型问题 → 只重做受影响 HeyGen 段;截图/封面/字幕 → Remotion only;编码问题 → render only。配套「Never spend HeyGen credits to fix a local composition or subtitle problem」——付费段和本地段的责任边界,把「改字幕重渲数字人」这种最冤的钱堵死了。
2.6 工程化程度:327 文件里的职业素养
CI(.github/workflows/validate.yml)+ tests/(smoke、story_timing、explainer_smoke)+ CHANGELOG + VERSION + 双语 README + agents/openai.yaml(跨 harness 声明)。explainer/ 子系统自成一体(STYLES.md 风格菜单 + gallery 缓存图 + GOTCHAS.md 坑典 + KITS.md + 工具链 14 个脚本)。job artifacts 目录契约 14 项标准化(job.json/docs/assets/qa/renders/outputs)。
3. 六维实评
| 维度 | 实评 | 证据 |
|---|---|---|
| 方法论沉淀度 | 2/2 | 双路由分流判据 + 12 风格体系 + 四阶段主流程 + resume 路由表 + 状态机(check_state → verified) |
| 单一真相源 | 2/2 | master clock 明文 + job.json 全程记录(prompt/参数/版本/区域/task ID/秒数/验收注记归档) |
| 自检协议 | 2/2 | ASR 回验五类错误 + finalize 九项 + contact sheet 人工复核点 + 「全过才发布」 |
| 上下文经济学 | 1.5/2 | Reference routing 表清晰(按 route/阶段读对应文件);但 SKILL.md 215 行单文件密度偏高,presenter/styled 双路由共享主文件,分文件可更省——小扣 |
| 无关性设计 | 2/2 | provider-neutral 明文 + 「capability-based 选模型并记录实际选择」+ PROGRAM_LUFS 环境变量 + 免费降级路径(无肖像→styled) |
| 边界感 | 2/2 | 「本 skill 做 explainer,宣传片/广告/footage montage 另请高明」+ 不静默回退 presenter + 无肖像时明确告知 |
4. 实测记录
- 结构实测(本期):文件树 327 文件与 SKILL.md 引用对账(references 4 份 + explainer 工具 14 个脚本 + scripts 5 个 + tests 3 个 + CI workflow),无悬空引用;VERSION/CHANGELOG 存在,维护节奏到 2026-10 仍活跃。
- 生成实测(2026-10-27 部分完成):presenter 出片被付费 provider + 授权肖像卡(按设计应被闸住);自带 CI 级测试全绿——tests/smoke.sh 7 项(init 防覆盖/preflight 审查闸/check_state 拒绝无证据推进/plan_segments 按停顿切分/只有带证据才推进/finalize 验证后才发布/到 verified)+ tests/explainer_smoke.sh 8 项(路由判定/styled 跳过 presenter 检查/12 风格 starter 全同步/状态机拒绝草稿证据)。self-check 与 ssot 两维的 CI 实证。styled 路由 60 秒片待排期。
5. 可偷的设计模式(回灌自产线)
- master clock(锁定音频统治时间轴) → 资讯视频产线的字幕/画面/剪辑全部挂配音时间戳,词改则全片重对位——与 anything2explainer「定稿后帧号锁定」同一条定律的两个表述,自产线应统一采用。
- 付费前五要素报价 → 一切调付费 API 的 skill(生图/生视频/TTS)都该有:资产/单位/成本/试跑规模/重试上限。配 hash 寻址防重复付费。
- 修改路由表 → 「改 X 只重跑 Y」矩阵直接适用于视频产线与 kb 产线(改图不重排全文、改译文不动术语表)。
- 不通过就不发布 → deploy.sh 预检的同律加强版:临时目录构建、全检通过才落 outputs——可作为自产线视频交付的终点设计。
- 授权四件套前置 → 用户未来若做数字人分身,「疯了再说」IP 授权链(肖像/声音/上传/克隆)应从第一天就按这个清单留痕。
- PROGRAM_LUFS 式平台参数 → 平台差异(响度/画幅/时长)用环境变量外置而不是写死分支,工具页工程同款思路。
6. 边界与风险
- 付费依赖不可回避:presenter 路由的语音与数字人生成都是远程计费,免费路径只有 styled 的图形侧;国内 provider(即梦/火山)适配需自行验证 provider-neutral 声明。
- 重流程对轻需求:单条 60 秒资讯口播走全状态机(job.json + 14 目录 + 多闸门)偏重——适合周更精品,日更需裁剪。
- 中英双语但非中文优先:触发词与风格名已本地化,但 reference 文档主体是英文,中文语速/字幕断行等参数需按 anything2explainer 的中文实测值另配。
- ** HeyGen 类 provider 的单点风险**:口型修复、时长上限切分等设计均按商业 API 行为校准,换开源数字人栈(如 MuseTalk)时 plan_segments/qa 逻辑需重核。