通用口播视频创作图纸(口播链)——把一条或一组真人出镜的口播毛片,做成完整包装的可出片工程:外录音轨对齐换轨 → 多段拼接 → oralcut 粗剪 → 拆分派单 → B-roll/MG 字卡 → BGM → 字幕 → 客户端出片。当用户想「口播视频从毛片做到成片 / 口播完整包装 / 我拍了几段口播帮我做成一期 / 领夹麦音轨怎么合进去 / 口播加 B-roll 加字卡 / talking head 成片」时使用本 skill。凡涉及真人口播的完整成片编排,优先用本图纸驱动全链,别只跑一句 oralcut 了事、也别手搓 ffmpeg。
npx skills add https://github.com/Gitruck/cli --skill gtrk-talking-head
把真人出镜的口播毛片(一条或一组)变成完整包装的可出片工程:双轨换声 → 拼段 → 粗剪 → 检查点① → 拆分 → B-roll → 字卡 → BGM → 字幕 → 精剪包装(合成)→ 客户端出片。
> 定位:第四张 structure 级组合图纸。本图纸自身不新增命令,只编排零件(audio align / oralcut / split / matrix / mg / audio lay / subtitle lay——其中对轨零件 gtrk audio align 与本图纸同批交付)。零件参数细节以各自 skill(/gtrk-oralcut、/gtrk-splitter、/gtrk-matrix、/gtrk-mg)与 --help 为准,本图纸引用不复制;编排次序、检查点、双轨与多段规约以本图纸为准。CLI 是手,你是脑。
与另外三张图纸的分野(先对号入座再开工):
| 图纸 | 内容从哪来 | 产物 |
|---|---|---|
| 旅拍解说 | 素材 + AI 写稿 + TTS 配音(无真人出镜) | 完整包装工程 |
| 直播切片 | 直播回放,只粗剪不包装 | 一批粗剪工程 |
| 口播链(本图纸) | 真人已把内容讲完,AI 只做剪与包装 | 完整包装工程 |
> 用户只要「剪干净」不要包装 → 那是一句 /gtrk-oralcut 的事,别拉全链。
输入:口播毛片本地文件(一条或多条),可带独立外录音轨(wav / MP3 / m4a / flac),可带文稿 txt。
| # | 问 | 怎么取证 | 决定什么 |
|---|---|---|---|
| ① | 一条还是多条?多条是一期分段还是各自成片? | 问用户,MUST NOT 代猜(同日多条两种都常见) | 走不走拼段(§三) |
| ② | 有无独立外录音轨? | 看目录配对(每条视频旁的音频文件)+ ffprobe 时长比对 | 走不走双轨换声(§二) |
| ③ | 有没有文稿? | 问用户。⚠️ 即兴内容禁传事后整理稿——oralcut 会把「终稿外内容」当废话剪掉,即兴场景必须走无稿智能重建 | --script 传不传 |
| ④ | 毛片几何 | ffprobe | 画幅随片(非拍板项,与旅拍不同——那边是无中生有须拍板画幅);非标帧率会被吸附到标准值,属预期 |
| ⑤ | B-roll 素材来源 | 问用户,MUST NOT 硬塞:有没有本地素材文件夹(要路径)?要不要用云端素材填充? | §五 matrix 走法三选一:本地(--local --dirs)/ 云端 / 都不要 = 不铺 B-roll(纯 A_ROLL + MG 字卡也是完整成片形态) |
| ⑥ | 有没有与人像同步录制的屏录 / 第二机位? | 问用户,MUST NOT 代猜(看目录里有没有同时段的屏录 / 另一机位文件只是提示,不是答案)。有则追问三样:画中画形状(圆 / 圆角方 / 爱心 / 菱形 / 星形,缺省圆)、位置(缺省右下)、大小(缺省约 28% 画幅高) | 走不走 §二′ 双源画中画(gtrk pip lay);屏录题材 ⑤ 默认答「不铺 B-roll」(屏幕本身即画面) |
> 推荐面(公约 §三‴):问答收口时可问一句「要不要看看第三方 skill?」;题材命中场景触发词才定向推荐,读取 gtrk skills recommend --scene <id> --json;用户拒绝后不执行推荐动作。
> 精剪包装(公约 §三⁵):开工时告知一句「快速成片会在适合的段落做合成包装,最多全片四分之一,不要就说一声」——不是问题,用户说不要即零动作;gtrk composite bake --abi 报烘焙浏览器没装时,在这张问询表里多问一句装不装(不装用本机 Chrome / Edge)。
真实口播几乎都是双轨收音:相机内录只是参考声,领夹麦/录音笔的外录才是成片要用的。而粗剪链吃的是视频文件里的音轨 ⇒ 先把外录换进去,转写和成片就都是外录声。
对轨是可选前置:用户给的毛片若已换好轨(或本就单轨无外录),本节整体跳过、后续零差别——链路不检查任何「对轨凭据」。
gtrk audio align "<毛片>" "<外录>"
已对齐、未对齐都直接跑自动分支——已对齐素材会测出接近 0 的偏移与高置信。测出 0 比假设 0 更稳:万一素材其实没对齐,假设 0 会静默错轨。
--offset 0 只在你确知偏移时用(跳过检测省几秒)。
命令自动互相关测偏移并给置信度,按置信度分流:
<名>_extaudio.mp4,回执打印偏移/置信度,零人工。<名>_align.gtrk(视频 + 外录双素材)——让用户在客户端时间线上拖音轨对齐(有波形有预览,比任何抽听都直观),保存后:gtrk audio align --resume "<名>_align.gtrk"
读回人工确认的偏移,完成换轨。
> 命令面细节(--offset / --threshold / -o / --json)以 gtrk audio align --help 为准,本节不搬手册。
gtrk pip lay)真实的「讲软件 / 讲代码 / 讲课件」口播几乎都是两条文件同步录:屏幕一条、人像一条。粗剪只剪人像;本零件把粗剪的每个切点镜像到屏录,
铺出「屏录满幅轨 + 人像画中画副本轨」,画中画带形状蒙版 / 圆角,客户端打开即所见。纯本地、零计费。
对轨(§二,可选)→ oralcut → 检查点① → gtrk pip lay → 包装(字卡 / BGM / 字幕)→ 客户端出片。
pip lay 不新增必停点——铺完让用户在客户端看一眼即可;只有低置信兜底会停(那是数据正确性问题,两种模式都停)。
gtrk pip lay --project "<口播工程目录>" --companion "<屏录.mp4>" \
[--shape ellipse|rectangle|heart|diamond|star|none] [--feather 10] [--border-radius 24] \
[--anchor bottom-right] [--scale 0.28] [--margin 40] [--offset <秒>] [--dry-run]
自动分支:以人像为参考、屏录为待对齐做互相关,置信度 ≥ 阈值直接铺,回执逐颗打印偏移与钳位(打印数字,不打「已验证」);
置信度不足 → 产 <屏录名>_pip_align.gtrk,让用户在客户端把「伴随源」轨拖到与人像画面对齐后保存,再:
gtrk pip lay --project "<口播工程目录>" --resume "<屏录名>_pip_align.gtrk"
--offset 或客户端拖齐);开录后拍一下手。split / subtitle lay 对 transcript 的锚不变),屏录与画中画都是叠加轨;画中画副本恒静音,人声由主轨承担。客户端本地导出(所见即所得)/ gtrk render(本地合成画中画几何与蒙版)/ 导剪映(圆窗 / 圆角进草稿;菱形剪映无对应会跳过并明示)。
一期内容由多段毛片构成时(分场景拍摄、换机位重启录制),先拼后剪:
ffprobe 逐段比对)。同机位同期拍摄基本都一致。-c copy 无损拼接(先逐段完成 §二 换轨再拼):printf "file '%s'\n" seg1_extaudio.mp4 seg2_extaudio.mp4 seg3_extaudio.mp4 > list.txt
ffmpeg -f concat -safe 0 -i list.txt -c copy "<工作区>/inputs/<期名>_full.mp4"
gtrk oralcut "<inputs/…_full.mp4>" --lang zh-CN [--script 稿.txt] [--preset concise]
命令与参数细节归 /gtrk-oralcut,本节只管走查什么:
--preset steady 或开 --visual-assist 重跑,MUST NOT 带着错误粗剪往下铺。audio_separation 分离取伴奏;没带 → 素材矩阵按内容基调搜 3–5 首附试听直链。hook 场景,不列名)。拍了 MG 字卡 ⇒ §五 拆分稿里开场 beat 的 MG handoff.theme 写 "opening-hook|屏字:<拍板文案>";拍了 A_ROLL ⇒ 开场不派辅助层。以上四项一次确认完 = 检查点①收口。
口播链拆分只派三车道(拍板:口播场景不需要 AI_DRAMA):
流程与制片顺序(遵既有定序,细节归各车道 skill)。B-roll 步按开工⑤的确认结果走:
用户给了本地素材夹 → gtrk matrix --local --dirs;同意云端 → gtrk matrix;都不要 →
跳过 matrix,拆分稿不派 FILM_BROLL(对应 beat 改 A_ROLL + MG 强调)——别给用户硬塞素材。
gtrk split(投影 → 你写拆分稿 → 落地)→ gtrk matrix(按⑤走或跳过)
→ 全局抽帧检查构图 → gtrk mg(字卡,§六风格)→ gtrk audio lay(BGM,-20dB 口径)
→ gtrk subtitle lay(检查点①拍板样式)→ 精剪包装(§五′)→ 客户端打开出片
拆分稿写完自查两条:
type:"overlay" + handoff(含 duration_hint)——quote-card 等前七类 aux 只是语义标注、不产派单;需要颗粒的字卡必须用 type:"overlay" + handoff。
字幕上完、出片之前,把适合的时间窗做成合成(一段时间内的整个画面由一颗代码颗粒接管:逐句换画面、对照并排、并列卡片、字幕排版,讲者与 B-roll 作为槽位画进去)。既有步骤的顺序不变,这一步加在最后:
/gtrk-composite 做精剪包装(公约 §三⁵:快速成片 auto ≤ 25% → 逐窗口复核 → 构建机检 → 铺轨烘焙,不停;回执列「做了 / 建议了没做 / 烘焙结果」;逐步推进按合成 skill 两个检查点停;开工时用户说了不要就跳过)。/gtrk-composite 的三选一走,不受快速成片口径限制。/gtrk-composite 的「出片:烘焙」一节);某颗烘焙失败时导出该段按粗剪出画——回执里点名。> 横切原则正本见仓内《成片型图纸公约》§三(docs/成片型图纸公约.md);本节是口播链的执行文本,旅拍图纸 §六「因势象形」是它的旅拍实例。
口播链没有写稿环节(内容是用户自己讲的),三段式写稿规约不适用。但你产出的每一段文本——字卡文案、标题、HashTag、简报——全量适用通用框架层的文风铁律(正本见 gtrk-travel-recap §三通用框架层):
| 模式 | 停点 |
|---|---|
| 快速成片 | 开工五问 → 检查点①(§四,必停一次)→ 一杆到底(含 SOP 既有的「B-roll 铺完抽帧检查」与精剪包装,归入快速语义不再单独打扰用户;合成静帧随交付一次给) |
| 逐步推进模式 | 每步停:对齐/拼段确认 → 粗剪回执 → 拆分稿 → B-roll 候选 → 字卡 → BGM/字幕逐项确认 → 精剪包装(合成 skill 两个检查点) |
双轨低置信度兜底(§二)在两种模式下都会停——那是数据正确性问题,不归模式管。
/gtrk-oralcut 排错节为准,本图纸只补双轨/多段特有的:Take gitruck/gtrk-talking-head from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.