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 为准,本节不搬手册。
三条纪律
- ⚠️ 换轨产物是新文件,且是后续工程的素材——用户必须留存,删了工程就素材脱机(同直播切片的切段警告)。
- 内录不丢弃:原毛片原地不动就是保底轨,外录出问题(爆音/断录)随时回退重跑。
- 闭环:oralcut 产的工程本来就进客户端 ⇒ 对齐效果(唇音同步)最终以客户端预览为准——兜底与验收用同一个工具。
二′、屏录 / 第二机位:双源画中画(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"
四条纪律
- 录制规约(开工时就说):两条文件同步录;屏录 MUST 带麦克风音轨(互相关的参照,无麦只能
--offset 或客户端拖齐);开录后拍一下手。
- 主轨不动:人像仍是主轨(
split / subtitle lay 对 transcript 的锚不变),屏录与画中画都是叠加轨;画中画副本恒静音,人声由主轨承担。
- 屏录比人像短 / 晚开录:对应段留空、回执点名毫秒数,MUST NOT 拉伸或变速补齐;成片该段只见人像主轨——这是如实,不是缺陷。
- 幂等:改了参数直接重跑,自产轨剥旧重铺;用户在客户端动过的画中画 clip 会被保留并点名,不会被覆盖。
出片口径
客户端本地导出(所见即所得)/ gtrk render(本地合成画中画几何与蒙版)/ 导剪映(圆窗 / 圆角进草稿;菱形剪映无对应会跳过并明示)。
三、多段一期:concat-first
一期内容由多段毛片构成时(分场景拍摄、换机位重启录制),先拼后剪:
- 参数一致性四查:编码 / 几何 / 帧率 / 音频采样率(
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"
- 对拼接产物跑一次 oralcut——一份工程、一次计费、粗剪自然跨段(段间的重录/垫场会被当停顿剪掉)。
- 参数不一致(罕见)→ 逐段各跑 oralcut 出 N 份工程、拼接归用户在客户端做。MUST NOT 静默转码统一参数。
- 拼接产物同受「留存」警告。
四、粗剪与检查点①(必停)
gtrk oralcut "<inputs/…_full.mp4>" --lang zh-CN [--script 稿.txt] [--preset concise]
命令与参数细节归 /gtrk-oralcut,本节只管走查什么:
- 粗剪回执走查:时长压缩比是否合理(口播毛片通常剪去 20–50%)、report 剪除项抽查 2–3 处是否真是废话。剪错了真内容 → 换
--preset steady 或开 --visual-assist 重跑,MUST NOT 带着错误粗剪往下铺。
- BGM 拍板(双来源,推荐必附试听链接):用户自带音乐 → 问是否
audio_separation 分离取伴奏;没带 → 素材矩阵按内容基调搜 3–5 首附试听直链。
- 字幕样式拍板:给样式候选,用户没选用 default。
- 前六秒方案拍板(公约 §三⁗ 执行文本,引用不复制):粗剪回执到手后、检查点①之前由你产——基于粗剪转写首段改写钩子文案三候选(五型任选,每条一行,只改开口方式、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 → 按当下这片的内容,现场泛化一套自洽风格直接用:
- 先从内容调性推风格基调:讲什么(严肃知识 / 情感陪伴 / 轻快种草)→ 定配色倾向(沉稳深色系 / 暖色低饱和 / 高亮对比)、字体气质(书卷 / 圆润 / 利落)、动效克制度(知识类稳、情绪类柔、种草类快);
- 基调定了全片贯彻:同片所有颗粒同一套色板与字体气质,MUST NOT 逐颗粒各自为政;
- 两个 MUST NOT:不把某套固定「通用默认风格」死板套在所有片子上(那是换了个形态的强行锚定);不因为没有栏目 skill 就放弃风格一致性(那是没有风格)。
- 一句话:风格必须有,但不强行锚定——锚在这一片的内容上,而非某个预设模板上。
七、文风铁律(继承通用框架层,射程 = 一切 AI 产文本)
口播链没有写稿环节(内容是用户自己讲的),三段式写稿规约不适用。但你产出的每一段文本——字卡文案、标题、HashTag、简报——全量适用通用框架层的文风铁律(正本见 gtrk-travel-recap §三通用框架层):
- 禁「否定—转折」对举句式家族(「不是 X 而是 Y」「不仅…更是」「与其…不如」及全部变体;含标题与 HashTag)——能直接陈述的事实绝不用对举包装;
- 禁模板连接词、拒翻译腔、禁幼稚拟声;
- 裁剪版自校验(产出前逐项过):对举句式零命中 / 重复字错字扫描 / 字卡文案与用户原话事实一致(别替用户改口径——他说「大概三成」你别写「30.2%」)。
八、双模式
| 模式 | 停点 |
|---|
| 快速成片 | 开工五问 → 检查点①(§四,必停一次)→ 一杆到底(含 SOP 既有的「B-roll 铺完抽帧检查」与精剪包装,归入快速语义不再单独打扰用户;合成静帧随交付一次给) |
| 逐步推进模式 | 每步停:对齐/拼段确认 → 粗剪回执 → 拆分稿 → B-roll 候选 → 字卡 → BGM/字幕逐项确认 → 精剪包装(合成 skill 两个检查点) |
双轨低置信度兜底(§二)在两种模式下都会停——那是数据正确性问题,不归模式管。
九、计费与排错
- 跑前 CLI 自动查实时价并打印,原样转述;计费按上传物音频时长(≈毛片时长)。
- concat-first 的计费含义:拼成一条跑一次 ≈ 各段分别跑的总和(时长相加),差别在工程份数与人的操作量,价钱差别不大——别拿「省钱」当拼段理由,拿「一份工程」当理由。
- 排错以
/gtrk-oralcut 排错节为准,本图纸只补双轨/多段特有的:
- 成片人声与口型错位 → 偏移错了。回 §二用客户端对齐工程重测,换轨重跑;
- 拼接产物在某段交界处画面卡顿/音画渐飘 → 段参数其实不一致(四查漏了帧率的分数形式差异),改走逐段兜底;
- 粗剪把段间垫场剪得太狠/不够 → 那是节奏预设的事,回 §四换 preset。