---
name: gitruck-gtrk-talking-head
description: "通用口播视频创作图纸（口播链）——把一条或一组真人出镜的口播毛片，做成完整包装的可出片工程：外录音轨对齐换轨 → 多段拼接 → oralcut 粗剪 → 拆分派单 → B-roll/MG 字卡 → BGM → 字幕 → 客户端出片。当用户想「口播视频从毛片做到成片 / 口播完整包装 / 我拍了几段口播帮我做成一期 / 领夹麦音轨怎么合进去 / 口播加 B-roll 加字卡 / talking head 成片」时使用本 skill。凡涉及真人口播的完整成片编排，优先用本图纸驱动全链，别只跑一句 oralcut 了事、也别手搓 ffmpeg。"
license: "MIT"
metadata:
  decimalai-skill-id: "fa93c5d8-21eb-4bfb-8388-7bad2cd50175"
  decimalai-version-id: "10430884-4ed1-4291-abce-aac1f7571e56"
  decimalai-version: "2"
  decimalai-body-sha256: "d33872c8318f7c9de08b31064f47b0312a1db90ca98881f57112f594a3aa9eae"
  decimalai-name: "gitruck/gtrk-talking-head"
  decimalai-format: "1"
  decimalai-invocation: "model"
  decimalai-category: "design-media"
  decimalai-source: "https://app.decimal.ai/s/gitruck-gtrk-talking-head@2/SKILL.md"
---
# 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 时长比对 | 走不走双轨换声（§二） |
| ③ | 有没有文稿？ | **问用户，MUST NOT 代猜**（目录里没有 txt 不等于没稿）。**⚠️ 即兴内容禁传事后整理稿**——oralcut 会把「终稿外内容」当废话剪掉，即兴场景必须走无稿智能重建 | `--script` 传不传 |
| ④ | 毛片几何 | ffprobe | 画幅随片（**非拍板项**，与旅拍不同——那边是无中生有须拍板画幅）；非标帧率会被吸附到标准值，属预期 |
| ⑤ | **B-roll 素材来源** | **问用户，MUST NOT 硬塞**：有没有本地素材文件夹（要路径）？要不要用云端素材填充？ | §五 matrix 走法三选一：本地（`--local --dirs`）/ 云端 / **都不要 = 不铺 B-roll**（纯 A_ROLL + MG 字卡也是完整成片形态） |
| ⑥ | **有没有与人像同步录制的屏录 / 第二机位？** | **问用户，MUST NOT 代猜**（看目录里有没有同时段的屏录 / 另一机位文件只是提示，不是答案）。有则追问三样：画中画形状（圆 / 圆角方 / 爱心 / 菱形 / 星形，缺省圆）、位置（缺省右下）、大小（缺省约 28% 画幅高） | 走不走 §二′ 双源画中画（`gtrk pip lay`）；屏录题材 **⑤ 默认答「不铺 B-roll」**（屏幕本身即画面） |

**开工问询是一次停（两种模式都是）**：①（多条时）③⑤⑥ MUST 问用户、MUST NOT 代猜，一张表一次问完、不碎问；②④ 自己取证，不发问。**答完之前 MUST NOT 跑 `gtrk oralcut` 或任何计费命令**——oralcut 是本链第一个计费命令，排在检查点①之前，能拦住它的只有这次问询。用户原话已经答了的项不重问，须答项全有答案就不停、直接开剪。目录取证（同目录有没有外录音轨、文稿、屏录 / 第二机位）写进表里当提示（如「目录里没看到文稿 / 屏录」），MUST NOT 代答 ③⑥——稿和屏录常放在别处。下面两段的告知与轻提随这张表一起给。

> **推荐面（公约 §三‴）**：问答收口时可问一句「要不要看看第三方 skill？」；题材命中场景触发词才定向推荐，读取 `gtrk skills recommend --scene <id> --json`；用户拒绝后不执行推荐动作。

> **精剪包装（公约 §三⁵）**：开工时告知一句「快速成片会在适合的段落做合成包装，最多全片四分之一，不要就说一声」——不是问题，用户说不要即零动作；`gtrk composite bake --abi` 报烘焙浏览器没装时，在这张问询表里多问一句装不装（不装用本机 Chrome / Edge）。

## 二、双轨收音：对轨 → 换轨（本图纸最大的新东西）

真实口播几乎都是**双轨收音**：相机内录只是参考声，领夹麦/录音笔的外录才是成片要用的。而粗剪链吃的是视频文件里的音轨 ⇒ **先把外录换进去，转写和成片就都是外录声**。

**对轨是可选前置**：用户给的毛片若已换好轨（或本就单轨无外录），本节整体跳过、后续零差别——链路不检查任何「对轨凭据」。

### 一条命令，不用人判两态

```bash
gtrk audio align "<毛片>" "<外录>"
```

已对齐、未对齐**都直接跑自动分支**——已对齐素材会测出接近 0 的偏移与高置信。**测出 0 比假设 0 更稳**：万一素材其实没对齐，假设 0 会静默错轨。
`--offset 0` 只在你确知偏移时用（跳过检测省几秒）。

命令自动互相关测偏移并给**置信度**，按置信度分流：

1. **置信度 ≥ 阈值** → 直接换轨产 `<名>_extaudio.mp4`，回执打印偏移/置信度，**零人工**。
2. **置信度 < 阈值** → 不猜、不硬上：命令产一个**对齐工程** `<名>_align.gtrk`（视频 + 外录双素材）——让用户在**客户端时间线上拖音轨对齐**（有波形有预览，比任何抽听都直观），保存后：

```bash
gtrk audio align --resume "<名>_align.gtrk"
```

　　读回人工确认的偏移，完成换轨。

> 命令面细节（`--offset` / `--threshold` / `-o` / `--json`）以 `gtrk audio align --help` 为准，本节不搬手册。

### 三条纪律

- ⚠️ **换轨产物是新文件，且是后续工程的素材——用户必须留存**，删了工程就素材脱机（同直播切片的切段警告）。
- **内录不丢弃**：原毛片原地不动就是保底轨，外录出问题（爆音/断录）随时回退重跑。
- 闭环：oralcut 产的工程本来就进客户端 ⇒ **对齐效果（唇音同步）最终以客户端预览为准**——兜底与验收用同一个工具。

## 二′、屏录 / 第二机位：双源画中画（`gtrk pip lay`）

真实的「讲软件 / 讲代码 / 讲课件」口播几乎都是**两条文件同步录**：屏幕一条、人像一条。粗剪只剪人像；本零件把粗剪的**每个切点镜像到屏录**，
铺出「屏录满幅轨 + 人像画中画副本轨」，画中画带形状蒙版 / 圆角，客户端打开即所见。**纯本地、零计费。**

### 链路位置

对轨（§二，可选）→ `oralcut` → **检查点①** → **`gtrk pip lay`** → 包装（字卡 / BGM / 字幕）→ 客户端出片。
`pip lay` **不新增必停点**——铺完让用户在客户端看一眼即可；只有低置信兜底会停（那是数据正确性问题，两种模式都停）。

### 一条命令

```bash
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`，让用户在客户端把「伴随源」轨拖到与人像画面对齐后保存，再：

```bash
gtrk pip lay --project "<口播工程目录>" --resume "<屏录名>_pip_align.gtrk"
```

### 四条纪律

- **录制规约**（开工时就说）：两条文件同步录；**屏录 MUST 带麦克风音轨**（互相关的参照，无麦只能 `--offset` 或客户端拖齐）；开录后拍一下手。
- **主轨不动**：人像仍是主轨（`split` / `subtitle lay` 对 transcript 的锚不变），屏录与画中画都是叠加轨；画中画副本恒静音，人声由主轨承担。
- **屏录比人像短 / 晚开录**：对应段留空、回执点名毫秒数，MUST NOT 拉伸或变速补齐；成片该段只见人像主轨——这是如实，不是缺陷。
- **幂等**：改了参数直接重跑，自产轨剥旧重铺；用户在客户端动过的画中画 clip 会被保留并点名，不会被覆盖。

### 出片口径

客户端本地导出（所见即所得）/ `gtrk render`（本地合成画中画几何与蒙版）/ 导剪映（圆窗 / 圆角进草稿；**菱形剪映无对应会跳过并明示**）。

## 三、多段一期：concat-first

一期内容由多段毛片构成时（分场景拍摄、换机位重启录制），**先拼后剪**：

1. **参数一致性四查**：编码 / 几何 / 帧率 / 音频采样率（`ffprobe` 逐段比对）。同机位同期拍摄基本都一致。
2. 一致 → `-c copy` 无损拼接（先逐段完成 §二 换轨再拼）：

```bash
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"
```

3. 对拼接产物跑**一次** oralcut——一份工程、一次计费、粗剪自然跨段（段间的重录/垫场会被当停顿剪掉）。
4. **参数不一致**（罕见）→ 逐段各跑 oralcut 出 N 份工程、拼接归用户在客户端做。**MUST NOT 静默转码统一参数**。
5. 拼接产物同受「留存」警告。

## 四、粗剪与检查点①（必停）

进入本节时开工问询已经答完（§一），③ 的答案决定传不传 `--script`。检查点①只收下面列的四项；开工问询漏问的项 MUST NOT 挪到这里补问——回头补问 ③ 意味着粗剪可能要带稿重跑、再计一次费。

```bash
gtrk oralcut "<inputs/…_full.mp4>" --lang zh-CN [--script 稿.txt] [--preset concise]
```

命令与参数细节归 `/gtrk-oralcut`，本节只管**走查什么**：

1. **粗剪回执走查**：时长压缩比是否合理（口播毛片通常剪去 20–50%）、report 剪除项抽查 2–3 处是否真是废话。**剪错了真内容** → 换 `--preset steady` 或开 `--visual-assist` 重跑，MUST NOT 带着错误粗剪往下铺。
2. **BGM 拍板（双来源，推荐必附试听链接）**：用户自带音乐 → 问是否 `audio_separation` 分离取伴奏；没带 → 素材矩阵按内容基调搜 3–5 首附试听直链。
3. **字幕样式拍板**：给样式候选，用户没选用 default。
4. **前六秒方案拍板**（公约 §三⁗ 执行文本，引用不复制）：粗剪回执到手后、检查点①之前由你产——基于粗剪转写**首段**改写**钩子文案三候选**（五型任选，每条一行，只改开口方式、MUST NOT 改动用户的事实与数据）+ **画面层建议**（A_ROLL / MG 字卡 / 拼贴或 AI 片段三选一）+ **字卡节奏**（屏字与出现时机按公约口径）。与前三项同屏一次拍板；用户答「开场照原样」= 零动作、后续不再提。先给自持方案，再一句轻提「要更多变体也可以看第三方钩子 skill」（推荐面 §三‴ 的 `hook` 场景，不列名）。拍了 MG 字卡 ⇒ §五 拆分稿里开场 beat 的 MG `handoff.theme` 写 `"opening-hook｜屏字：<拍板文案>"`；拍了 A_ROLL ⇒ 开场不派辅助层。

以上四项一次确认完 = 检查点①收口。

## 五、拆分与铺轨：三车道，无 AI 情景动画

口播链拆分**只派三车道**（拍板：口播场景不需要 AI_DRAMA）：

- **A_ROLL 主导**：真人出镜是叙事主体——大部分 beat 就该是 A_ROLL，别为了「丰富」硬切走人。
- **FILM_BROLL 辅助**：只在**需要视觉支撑**处切出（提到具体事物/场景/数据来源时），切出必回。
- **MG 字卡强调**：金句、要点列举、数字——叠加强调，不抢主体。

流程与制片顺序（遵既有定序，细节归各车道 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（检查点①拍板样式）→ 精剪包装（§五′）→ 客户端打开出片
```

拆分稿写完自查两条：
- **lane 里出现 AI_DRAMA 即改派**（机检 grep 即可）；
- **字卡要产颗粒的，aux 必须用 `type:"overlay"` + handoff（含 duration_hint）**——`quote-card` 等
  前七类 aux 只是语义标注、**不产派单**；需要颗粒的字卡必须用 `type:"overlay"` + handoff。

### 五′、精剪包装（字幕之后、出片之前）

字幕上完、出片之前，把适合的时间窗做成**合成**（一段时间内的整个画面由一颗代码颗粒接管：逐句换画面、对照并排、并列卡片、字幕排版，讲者与 B-roll 作为槽位画进去）。既有步骤的顺序不变，这一步加在最后：

- 交棒 `/gtrk-composite` 做**精剪包装**（公约 §三⁵：快速成片 auto ≤ 25% → 逐窗口复核 → 构建机检 → 铺轨烘焙，不停；回执列「做了 / 建议了没做 / 烘焙结果」；逐步推进按合成 skill 两个检查点停；开工时用户说了不要就跳过）。
- 用户中途说「整片做一下合成」「11 秒到 32 秒做一个」时，入口按 `/gtrk-composite` 的三选一走，不受快速成片口径限制。
- ⚠️ 合成颗粒出片靠本机烘焙（`/gtrk-composite` 的「出片：烘焙」一节）；某颗烘焙失败时导出该段按粗剪出画——回执里点名。

## 六、MG 风格：内容驱动的临场泛化（成片型图纸通用条款）

> 横切原则正本见仓内《成片型图纸公约》§三（`docs/成片型图纸公约.md`）；本节是口播链的执行文本，旅拍图纸 §六「因势象形」是它的旅拍实例。

- **有栏目风格 skill** → 走栏目（经栏目配置注入），本节不适用。
- **没有栏目风格 skill** → **按当下这片的内容，现场泛化一套自洽风格直接用**：
  1. 先从内容调性推**风格基调**：讲什么（严肃知识 / 情感陪伴 / 轻快种草）→ 定配色倾向（沉稳深色系 / 暖色低饱和 / 高亮对比）、字体气质（书卷 / 圆润 / 利落）、动效克制度（知识类稳、情绪类柔、种草类快）；
  2. 基调定了**全片贯彻**：同片所有颗粒同一套色板与字体气质，MUST NOT 逐颗粒各自为政；
  3. **两个 MUST NOT**：不把某套固定「通用默认风格」死板套在所有片子上（那是换了个形态的强行锚定）；不因为没有栏目 skill 就放弃风格一致性（那是没有风格）。
- 一句话：**风格必须有，但不强行锚定**——锚在这一片的内容上，而非某个预设模板上。

## 七、文风铁律（继承通用框架层，射程 = 一切 AI 产文本）

口播链**没有写稿环节**（内容是用户自己讲的），三段式写稿规约不适用。但你产出的**每一段文本**——字卡文案、标题、HashTag、简报——全量适用通用框架层的文风铁律（正本见 `gtrk-travel-recap` §三通用框架层）：

- **禁「否定—转折」对举句式家族**（「不是 X 而是 Y」「不仅…更是」「与其…不如」及全部变体；含标题与 HashTag）——能直接陈述的事实绝不用对举包装；
- 禁模板连接词、拒翻译腔、禁幼稚拟声；
- **裁剪版自校验**（产出前逐项过）：对举句式零命中 / 重复字错字扫描 / 字卡文案与用户原话事实一致（**别替用户改口径**——他说「大概三成」你别写「30.2%」）。

## 八、双模式

| 模式 | 停点 |
|---|---|
| **快速成片** | 开工五问 → 检查点①（§四，必停一次）→ 一杆到底（含 SOP 既有的「B-roll 铺完抽帧检查」与精剪包装，归入快速语义不再单独打扰用户；合成静帧随交付一次给） |
| **逐步推进模式** | 每步停：对齐/拼段确认 → 粗剪回执 → 拆分稿 → B-roll 候选 → 字卡 → BGM/字幕逐项确认 → 精剪包装（合成 skill 两个检查点） |

快速成片停两处：开工问询（§一，答完才开剪）与检查点①（§四）。表里「必停一次」说的是检查点①；开工问询那一次另算，用户原话已答全时才省掉。

双轨低置信度兜底（§二）在两种模式下都会停——那是数据正确性问题，不归模式管。

## 九、计费与排错

- 计费按上传物音频时长（≈毛片时长）。oralcut 正式运行时在抽音频之前打一行实时价格与本次预估（stderr；`--json` 结果的 `pricing` 也有），**原样转述**、别自己报数字；用户在开工问询时问价，或想先报价再开剪，就跑 `gtrk oralcut "<毛片>" --dry-run --json`（零抽取、零上传、零计费、不建目录），转述 stdout 那行的 `pricing`。
- **concat-first 的计费含义**：拼成一条跑一次 ≈ 各段分别跑的总和（时长相加），差别在**工程份数与人的操作量**，价钱差别不大——别拿「省钱」当拼段理由，拿「一份工程」当理由。
- 排错以 `/gtrk-oralcut` 排错节为准，本图纸只补双轨/多段特有的：
  - **成片人声与口型错位** → 偏移错了。回 §二用客户端对齐工程重测，换轨重跑；
  - **拼接产物在某段交界处画面卡顿/音画渐飘** → 段参数其实不一致（四查漏了帧率的分数形式差异），改走逐段兜底；
  - **粗剪把段间垫场剪得太狠/不够** → 那是节奏预设的事，回 §四换 preset。
