Communitygithub.com

frankhzh-source/digital-human-video-pipeline

name: digital-human-video-pipeline

digital-human-video-pipeline 是什么?

digital-human-video-pipeline is a Claude Code agent skill that name: digital-human-video-pipeline.

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add frankhzh-source/digital-human-video-pipeline

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

数字人视频制作管线(本机已全链验证 ✅)

2026-09-21/22 实测打通:74.8s 口播 → 15.6s 测试片(A7 形象 + MiniMax 克隆配音 + HyperFrames 包装)全流程 0 失败。 所有脚本在 D:\workbuddy\Claw\Claw,用 D:/Anaconda3/envs/ai/python.exe -X utf8 运行(faster_whisper 在这个环境)。 2026-09-29 增补:[0] 文案一致性闸门——口号/收口句类内容两次被自拟改写(详见闸门章节),现为一票否决前置步骤。

流程总览(闸门 + 六步)

[0] 文案闸门(强制) → [1] 母版音频 → [2] ASR转写+切段表 → [3] MiniMax克隆配音(B2配方)
    → [4] HeyGen photo avatar + lipsync → [5] HyperFrames 透明叠加层(ProRes4444)
    → [6] ffmpeg 合成(字幕/音效/BGM/响度) → 成片 + 封面

[0] 文案一致性闸门(强制,一票否决,先于一切生成动作)

背景:口号/SLOGAN/收口句两次被自拟改写(2026-09-28 开场四连问被换方向+丢口号,返工 24 积分;2026-09-29 结尾「占领源头」被换成「必修课」)。 教训:靠记忆/自觉不可靠——规则写在记忆里,违规发生在任务中段,那时规则早已不在上下文。 解法是把「自觉」换成「机制」:注册表 + 脚本硬校验 + 人工拍板闸门。

三条铁律:

  1. 口号/SLOGAN/收口句/落款必须回源稿逐字核对——源稿=分段TTS脚本的 ANCHOR 段或成片字幕源,禁止自拟、禁止"口播化微调";
  2. 起草先引原文:任何新段落起草后,先把含口号的原文逐字贴给用户过目,确认后才允许进入生成;
  3. 付费生成前必过闸门:TTS/HeyGen 等花积分的动作之前,口号校验必须 PASS。

操作(两件套):

  • 注册表:文案规范_定稿.json(唯一权威源,新增定稿句须用户拍板后登记);
  • 校验:D:/Anaconda3/envs/ai/python.exe -X utf8 工具_口号校验.py <目标文件...>
    • 支持 .md/.txt/.json(直读)、.ass(剥标签取字幕文字)、.py(提取字符串字面量,覆盖 TTS 文案常量);
    • 自动归一化标点/空白后做子串匹配;closed_targets 封版目标只提示不拦截;
    • exit 0=PASS 可继续;exit 1=FAIL 禁止进入付费生成;--self-test 自检。
  • 详细机制说明:references/copy-slogan-gate.md(发布版)。

闸门嵌入点(每期实操时逐一执行):

时点动作
起草后、TTS 前工具_口号校验.py 工具_第XX期TTS.py → 必须 PASS
HeyGen 提交前再次校验(防止中途改稿引入漂移)
终装后、发布前工具_口号校验.py <sub.ass> <发布文案.md> → PASS 才允许发飞书/发布
失败处理回源稿逐字回填;确属新定稿句 → 用户拍板 → 更新注册表 → 复跑 PASS

[1] 母版要求

  • 句末完整收尾(勿用截断版);响度 -16 LUFS 口径;30–90s 干净录音可兼做克隆注册素材。
  • 注册克隆用 音频_口播原声_092211_句末收尾_69秒.m4a(勿用 74.8s 半句版)。

[2] ASR 转写 + 切段表

D:/Anaconda3/envs/ai/python.exe -X utf8 工具_播客ASR转写.py <音频> --md 转写_xxx.md
  • 输出词级时间戳(.asr_cache/*.json 有缓存,重跑秒回);依据转写切 5 段左右,标记 S1–S5 与信息点;
  • 测试段选 18–30s:含中英混读、停顿的段落最有代表性。

[3] MiniMax 声音克隆 + 配音

工具:工具_MiniMax声音克隆_通用.py(密钥 .secrets/minimax.key + minimax_group.txt,国内站直连不需代理)。

  • --check 免费 → --clone --yes 克隆(voice_id 规则:≥8位字母数字、字母开头,用 haifengv1)→ --t2a 配音;
  • 配音配方定版「B2」:speech-2.8-hd + speed:0.95,不加情绪标签(用户验收:音色可以,B2 语气可接受);
  • 语气僵的调法优先级:改文案口语化 > speed 0.95 > emotion=happy > 更长素材重克隆;
  • 成本参考:HD 3.5 元/万字符,一句话 <1 分钱。

[4] HeyGen 数字人

前置:代理必须开(127.0.0.1:7890 监听检查 + mcp.heygen.com 连通测试)。

  • 工具:工具_播客测试片A7_准备_2026-09-21.py(免费:额度/schema/形象核对/传音频)→ 工具_播客测试片A7_提交_2026-09-21.py(--yes 闸门);
  • 形象 A7 + avatar_v 引擎;2 分钟级出片,下载后 probe 验收;
  • ⚠️ 真实单价 ~0.85 积分/秒(15.7s 片实测 13 积分,559→546)。全长片提交前先拿 30s 中段核一次计价。

[5] HyperFrames 透明叠加层(卡片/图表动效)

工程:_cards_hf/compositions/v2_testcard.html(换文案只动文字+时间戳)。

  • 驱动模式:gsap.timeline({paused:true}) 注册到 window.__timelines["main-video"] + 元素 data-start/data-duration;
  • 渲染(约 4.5–5 分钟机时,overlay_v2.mov 172MB 保留至定版,别中途删——删一次重渲 5 分钟):
export PATH="/d/ffmpeg:/c/Users/admin/.workbuddy/binaries/PortableGit/versions/1.2.0/usr/bin:$PATH"
cd _cards_hf && npx hyperframes render -c compositions/v2_testcard.html -f 25 --format mov \
  -o "../_v2/overlay_v2.mov"
  • ⚠️ 四个必踩坑(全部实测踩平):
    1. 根元素必须 data-composition-id="...",否则 HF_DE_COMPOSITION_ROOT_MISSING;
    2. 画幅用 data-width/data-height(data-composition-width 不被读取 → 输出竖屏 1080×1920);
    3. 渲染机 PATH 里 ffmpeg 和 ffprobe 都要有(D:\ffmpeg 曾缺 ffprobe → npm i ffprobe-static --registry=https://registry.npmmirror.com 一分钟解决;别从 gyan.dev 下 114MB 包,国内 ~20KB/s 且断流);
    4. 渲染输出 1920×1080,合成时 scale 到 1072 对齐成片。

[6] ffmpeg 合成交付

工具:工具_测试片v2合成_2026-09-22.py(每期复制一份,只改顶部 SRC/OV/字幕/点位常量)。

  • 链路:zoompan punch-in(8.45/13.25s 各 5%)→ overlay ProRes4444 → ASS 字幕(ass= 路径必须正斜杠相对路径,反斜杠会被转义吞) → 音效三件套(adelay 对位)→ BGM 床(sidechaincompress 人声闪避)→ loudnorm -14 LUFS;
  • 字幕:词级时间戳断句,高亮词 {\c&H6ABEE9&}词{\r}(BGR 金色);封面取 13.8s 帧。

BGM / 音效范式(已成文:整理_知识类视频BGM与音效范式_2026-09-22.md)

知识口播 = BGM 范式 B「信息陪伴型」:BGM 是教室的灯光,不是舞台配乐。

  1. 无旋律(pluck/拨弦,不"唱歌");2. C4+ 中高音区(低音区长音 legato = 氛围片 drone = 压抑感,v2.2 教训);3. 跳音留白;4. BPM 88–104 贴语速;5. 频段避让人声 300Hz–3.4kHz;量级 -28~-32 LUFS 相对人声 + sidechain 闪避(threshold 0.028 / ratio 7 / attack 180ms / release 1000ms)。
  • 两个预置在 make_bgm_pluck(默认)/ make_bgm_pad(A/B 备用),BGM_STYLE 一词切换;换风格只改和弦表。

音效三件套(配方固定,只换点位):whoosh 转场(lowpass ≤2400)→ tick 反馈(1.2–1.6kHz,量最低)→ thump 强调(全片 ≤2 次感叹号);音量配比 强调 0.24 : 转场 0.22 : 反馈 0.165;任意 2s 窗口 ≤1 个点位。

成本台账(实测口径)

项成本
ASR / ffmpeg / HyperFrames / BGM 合成0
MiniMax 克隆9.9 元/音色(首合成才计费);TTS ≈0.02 元/句
HeyGen 测试片13 积分 / 15.7s;69s 全长估 ~59 积分,2:44 版估 ~140

验收清单(出片后逐项过)

  1. 口号闸门:工具_口号校验.py <sub.ass> <发布文案.md> PASS(定稿句逐字在位,[0] 章节铁律);
  2. volumedetect:mean ≈ -17dB / max ≤ -2.5dB(无削波);
  3. 抽 3 帧(图表卡 / 关键词卡 / 结论卡时点):人脸双手零遮挡(安全区:左卡 56–546px、右卡 1150–1860px、顶部标题 84px、底部字幕 200px);
  4. 听感三点:开头 3s 有动能、人声突出、结尾有停留感。

待办(定版前必办)

  • 全长母版拍板:69s 句末版 or 2:44 全段重裁(74.8s 半句版禁用);
  • 全长片增量:A7 章节卡 ×5 段、S4 逐句上屏、BGM 扩成 4–8 小节循环 + 尾奏、3s 关注卡。

相关技能