gtrk-live-slicing(直播切片 · 组合成片图纸)
把一场直播回放(1–4 小时)变成一批可编辑的逐 clip 粗剪工程:五问定策略 → 分段 → 逐段选段 → 选题清单必停 → 出工程。
定位:第三张 structure 级组合图纸(前两张=gtrk-travel-recap 旅拍解说、gtrk-vlog-docu Vlog 纪实)。不新增任何命令,只编排既有零件。参数细节以 gtrk-long2short 与 --help 为准,本图纸引用不复制;编排次序、分段规约、检查点以本图纸为准。CLI 是手,你是脑。
⚠️ 定位铁律(先读这条,后面全部服从它)
本图纸产的是「粗剪工程」,不是成片。
由此推出一条贯穿全文的边界:MUST NOT 对源片做任何像素级改动。
- ❌ 不去水印、❌ 不去烧录贴片、❌ 不做画面清理美化、❌ 不调色不裁切
- 源片长什么样,切片就长什么样。要不要动那些元素,是用户在客户端二次编辑时的决定,不是你的。
- 分段所需的时间轴裁切必须用
ffmpeg -c copy 流拷贝(不重编码)。
- 工程层设置不算像素改动:变速倍率(
--speed-factor)、运镜关键帧(--camera-move)、客户端字幕轨(gtrk subtitle lay)、画布模糊底(gtrk project background)都写在工程里、可在客户端撤销,源片本身一个像素不动——与本条不冲突。
用户只要能直接发的成片、不打算再剪? 那不是本图纸的活,转 gtrk tool video_long2short_pro(精剪,整片上传、云端渲染、计费约两倍)。判断句同 gtrk-long2short:「剪完还要不要再动?」要动 → 留这儿;不动 → 转精剪。
一、输入契约与开工六问
输入:一条直播回放的本地文件(.ts / .mp4 等均可)。
MUST NOT 执行录制或下载——平台动作与版权责任归用户。用户给什么文件就用什么。
开工前先答六问,答案决定后面全部策略:
| # | 问 | 怎么取证 | 决定什么 |
|---|
| ① | 源片总时长与几何 | ffprobe(或直接跑一次 gtrk long2short 让它打印) | 要不要分段、分几段(§二) |
| ② | 画面形态是否单一 | 问用户——全程主播口播位?还是含实景走播/换机位? | 哪些段开分屏(§四) |
| ③ | 有无烧录贴片 | 抽 2–3 帧看(开头/中段/尾段各一) | 交付时要如实告知什么(§五) |
| ④ | 入选切片要不要叠 MG 动画 | 问用户——缺省不叠(粗剪定位) | 选题清单敲定后是否走 MG 车道(§七) |
| ⑤ | 入选切片要不要加运镜(推拉镜头) | 问用户——缺省不加 | 逐段提交是否带 --camera-move(§七「运镜」) |
| ⑥ | 入选切片要不要做合成包装 | 问用户——缺省不做(公约 §三⁵) | 选题清单敲定后是否对入选 clip 做精剪包装(§七「合成包装」);答要时 gtrk composite bake --abi 报烘焙浏览器没装,同一张表里多问一句装不装 |
②④⑤⑥ MUST 问用户、MUST NOT 代猜。 ②猜错的代价是白跑一轮分屏(几十分钟 + 积分);
④缺省是不叠——用户没要就零 MG 动作,MUST NOT 硬塞;⑤缺省是不加——用户没要就全程不带 --camera-move、不再追问。
⑤ 必须在提交前问:运镜是云端任务参数,交上去之后改不了(没入选的 clip 带了运镜也无害,随 clip 一起丢弃)。
③ 的取证目的只是「告知」,不是「处置」——看到贴片不要动手,见定位铁律。
② 与 /gtrk-long2short、/gtrk-tools 精剪开工的「多人同框」一问同口径:是就开、不确定按否;
分屏单段最长 8 秒、每条最多 3 处。
推荐面(公约 §三‴):问答收口时可问一句「要不要看看第三方 skill?」;题材命中场景触发词才定向推荐,读取 gtrk skills recommend --scene <id> --json;用户拒绝后不执行推荐动作。
二、分段规约(本图纸的骨干)
两道闸
| 闸 | 值 | 命中时的表现 |
|---|
| 闸一 | 服务端媒体探测层全局业务限制 | 2 小时 | 建单期直接拒:6019 媒体时长无效或超过业务限制。任务不创建、不计费 |
| 闸二 | CLI 轮询墙钟 | 60 分钟 | 轮询超时报错(任务在云端照常跑完,可取回) |
处理耗时 / 源时长比值按分屏与否分档:
- 不开分屏:墙钟压力较小;
- 开分屏:处理耗时明显增加,优先按较短段切分。
⇒ 单段 MUST ≤ 2h(硬拒线),开分屏时 SHOULD ≤ 48min(墙钟线)。
判据与做法
源片 > 40 分钟即 MUST 分段。 40 是落在两条线内并留余量的取值。
# 段边界优先级:内容自然停顿(长静音/话题转折)> 等分兜底
# MUST 用 -c copy,MUST NOT 重编码
ffmpeg -ss 3600 -t 2400 -i "<直播回放>" -c copy "<工作区>/inputs/<名>_seg02_60-100min.mp4"
- 命名带上源片时间范围(如
_60-100min),后面汇总选题清单时你要靠它把 clip 定位回原片。
- 有弹幕文件时可用热区微调边界(§六),但不作为主依据。
⚠️ 两条必须在动手前告诉用户
- 切段是新文件,工程指向它、不指向原片。 逐 clip 工程的
materials[].path 实指切段;用户删掉切段文件,工程就素材脱机。让他把 inputs/ 留着。
- 超过 2 小时整条提交会被直接拒,不是慢、是拒。好消息是零计费(不进队列),但会白抽白传一个大文件——所以先分段。
超时兜底
单段仍超墙钟时,轮询超时属预期不属故障:
gtrk oralcut-result <task_id> --out <目录> # task_id 在产物根 task.json;--out 必填
服务端按 task_id 取结果幂等。MUST NOT 重跑——重跑是重复计费。
三、双模式(两种都要停)
为什么直播切片必须停,而口播/TTS 不用?
口播毛片是用户已经讲完的内容、TTS 稿是他已经认可的文本——内容选择在进剪辑链之前就完成了,agent 只是执行。而一场数小时直播里「这几十个候选哪些值得做」尚未发生、本身就是创作决策。全自动跑完 = 替创作者行使了选题权。
| 模式 | 停点 |
|---|
| 快速成片 | 六问 + 分段方案确认 → 逐段跑 → 【必停】选题清单 → 确认后一路出工程(⑥ 答要时含逐条精剪包装,合成静帧随交付一次给) |
| 逐步推进模式 | 上述基础上每步都停(分段方案 / 逐段选段结果 / 逐条工程产物) |
两模式共用同一套分段规约与参数配方,差别只在停几次,不在停不停。
选题清单长什么样
每段跑完后产物根有 clips.md,一张五列表(标题 / 时长 / 评分 / 简介)。把各段的表合并成一张给用户,标注每条回溯到原片的大致时间,让他勾。真实样例:
| # | 标题 | 时长 | 评分 |
|---|
| clip1 | 别被高认知陷阱害了 | 5:40 | 8.5 |
| clip2 | 孩子情绪稳定靠父母正反馈 | 3:06 | 8.2 |
别让用户自己开工程猜——他要的就是这张表。
四、按形态配分屏(不给一刀切默认)
--split-screen 只对用户在开工②里确认含多人同框的段开。
⚠️ 静默面(务必知道):段内无多人同框候选时,服务端静默跳过——不报错、不记 errors、不置降级标志。所以:
判断分屏是否真的生效,MUST 看产物证据,MUST NOT 按「没报错」推定。
证据 = report.json 的 split_manifest 条数 + 毛片旁 split_screen/ 目录里的素材(可抽帧看)。
分屏在子轨、主轨原片可回退:分屏素材落在独立子轨上叠放,
主轨的原片全程完整在场——用户对某段分屏不满意时,在客户端隐藏/删除子轨该段即回退原片,
零重跑。交付时把这条回退动线告诉用户。⚠️ 连带边界:本地 gtrk render 是快照渲染、
不合成子轨——渲出来没有分屏画面;要分屏成片走客户端出片(或剪映导出)。
其余参数配方:
--language 必填,缺失在上传前就报错(省一次白上传)
- 竖屏直播源通常无需转比例,
--output-size 缺省即可
--duration-pref / --max-clip-sec 按投放平台口径给档
--subtitle-out 产逐 clip 独立 .srt(不烧进画面)——可选,给要拿去 PR 精修的用户;客户端用户走 §七 的字幕上轨
--speed-factor 只在用户主动要求时加(见 §七「调速」);开工问询里不问速度
--camera-move 按开工⑤:用户要运镜才带(见 §七「运镜」),各段一致
完整参数表在 gtrk-long2short,本节只给直播场景的配方差异,不搬手册。
五、贴片如实告知(交付项,不是处置项)
直播源片常自带烧录元素。你的义务是说清楚,不是动手。
| 类型 | 后果 | 怎么说 |
|---|
| 静态标题贴片(贯穿全场不变) | 每条切片都带一个与自己主题无关的标题 | 举实例给用户看:某条讲 A,画面上却写着 B |
| 时效信息贴片(价格 / 截止日期) | 切片再发布时是过期信息 | 额外点一句,让用户自行判断是否适合再发 |
| 无叠加 | — | 不必提 |
贴片可能贯穿全场且与切片主题无关,也可能包含会过期的价格或日期;交付时按实际画面如实告知。
这一节不含任何去除动作。 用户问「能不能去掉」→ 告诉他这超出本图纸射程,可在客户端二次编辑时自行处理。
六、弹幕(可选增强,不是必需输入)
真实场景绝大多数没有弹幕——无弹幕是默认路径,不是降级。本图纸主干全部步骤在零弹幕下完整可执行。
用户确实给了弹幕文件时,可以额外用:
- 格式:B站式
.xml 是 <d p="秒数,…">用户:文本</d>,p 首字段即距开播秒数 = 源片时码;平台导出 .txt 通常是时钟列。归一化成「秒 + 文本 + 用户」三元组即可。
- 两个信号:复述密度(同一句话被多个用户在短窗口内重复——观众自发复述的往往就是金句)、刷屏密度(互动符号瞬时峰值)。
⚠️ 别高估它:弹幕对「选哪些段」通常只是辅助
结论:弹幕主要用于验证选段、提取观众原句标题和微调边界,不是必需输入:
- ❌ 不要为了「更准地选段」去要用户补弹幕(没有就没有,主干照跑)
- ✅ 它真正剩下的价值是 取候选标题原句:观众自发复述出来的那句话(如「大脑不接受否定」被 15 人复述),
往往比 LLM 生成的标题更有传播力。有弹幕时,优先把这类原句作为标题候选给用户挑。
- ✅ 次要价值:微调段边界(别把一个热区从中间切开)。
⚠️ 红线
弹幕 MUST NOT 当 --subtitle-file 喂入。 那个入口收的是主播口述的转写;弹幕是观众文本,喂进去会污染选段依据。
两者都是「带时码的文本文件」、形状极像,极易误用——看到弹幕文件先想这条。
现实诱因实例:某创作者的弹幕就存在名为「文稿」的目录里——目录名叫文稿,内容却是弹幕。别被目录名带偏。
七、二次包装(可选;全部不动源片像素)
看板点名的三件,都不碰源片:
- 标题钩子:文本建议。有弹幕时优先取观众复述的原句。
- 字幕:见下「字幕上轨」——选题确认后对入选 clip 缺省做。
- 模糊底:见下「模糊底」——源片与画布横竖不一致时,对入选 clip 缺省做。
- 封面:走
/gtrk-cover(另出图,不改片)。
- 合成包装:见下「合成包装」——开工 ⑥ 答要才做,只对入选 clip。
合成包装(缺省不做,开工 ⑥ 答要才做,只对入选 clip)
选题清单敲定之后,对每条入选 clip 交棒 /gtrk-composite 做精剪包装(公约 §三⁵:快速成片 auto ≤ 25% → 逐窗口复核 → 构建机检 → 铺轨烘焙,不停;回执列「做了 / 建议了没做 / 烘焙结果」;逐步推进按合成 skill 两个检查点停;开工时用户说了不要就跳过)。clip 工程与整片转写的路径同「字幕上轨」:--gtrk "<产物根>/clip{i}/gtrk/<该 clip 的 .gtrk>" --transcript "<产物根>/json/transcript.json"。合成写在工程里、可在客户端撤销,不动源片像素。
字幕上轨(缺省做,只对入选 clip)
选题清单敲定之后,对每条入选 clip 跑一次(用户明确说不要字幕才跳过;没入选的不做):
gtrk subtitle lay --gtrk "<产物根>/clip{i}/gtrk/<该 clip 的 .gtrk>" --transcript "<产物根>/json/transcript.json" --language <该段提交时的源语种>
json/transcript.json 是该段任务落下的整片转写,一份服务该段全部 clip;分了几段就各用各段产物根里的那份。
--language 跟该段 gtrk long2short 的 --language 一致(英文直播就 en-US),否则云端会按中文断句。
- 交付时说清三件事:① 字幕在客户端字幕轨上,可换样式、可整轨删,不烧进画面;② 云端产出的剪映 / PR 工程是在上字幕之前生成的,不含这条字幕轨,要带字幕的剪映草稿请从客户端导出;③ 用了
--subtitle-file 的段,字幕按行出现、词级时间是近似值(clips.md 会提示)。
打开 PR 工程时的重链提醒照 gtrk-oralcut「回给用户(三端打开方式)」PR/FCP 条,引用不复制。
- 该段产物根里没有
json/transcript.json(老服务端或下载失败,CLI 日志会说):如实告诉用户这一段没法自动上字幕,其余段照常。MUST NOT 拿弹幕或别的文本凑一份当字幕来源(见 §六 红线)。
模糊底(横竖互转时缺省做,只对入选 clip)
横屏直播切成竖屏(缺省 9:16)时,粗剪工程上下是黑边。选题清单敲定之后,对每条入选 clip 判断源片朝向与该段画布朝向:
- 源片几何:该段
gtrk long2short 日志里的源分辨率,或 ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=p=0 "<源片>";
- 画布:该段提交时的
--output-size(没传就是 9:16 竖屏)。
朝向不一致(横屏源进竖屏画布,或反之)⇒ 缺省跑(用户说要保持黑边才跳过):
gtrk project background --gtrk "<产物根>/clip{i}/gtrk/<该 clip 的 .gtrk>" --blur
朝向一致(竖屏直播进竖屏画布)⇒ 不跑。
交付时说清:模糊底写在主轨每个片段上(片段自己画面的模糊副本铺满垫底),客户端里可逐片段或多选批量改成黑底 / 纯色;从客户端导出的剪映草稿带模糊底,Pr 工程降级为纯黑,本地 gtrk render 带;云端随 gtrk long2short 产出的剪映 / PR 工程生成在它之前、不带。强度缺省 200,用户嫌太虚或不够虚可加 --intensity <0–1000 整数> 重跑(幂等覆盖)。零计费、不访问云端。(只想要旧的整片画布设置:--scope canvas。)
运镜(仅当开工⑤用户要了才做)
⑤答「要」⇒ 逐段提交都带 --camera-move(细项如幅度、概率不另开旗标,确有需要走 --params-json '{"camera_move":{"enable":true,"amplitude":0.1}}')。云端按与精剪同一套调度给主轨片段写推 / 拉镜头关键帧,零渲染、不加价。
交付时说清:
- 运镜写在工程里:客户端与剪映打开可见、可在关键帧面板改或删;本地
gtrk render 与 PR 工程看不到运镜(按静态画面出片),要成片带运镜请从客户端或剪映导出;
clips.md 每条的「运镜 N 处」是实际写入数,0 处属正常(按概率抽取);有「未能加运镜的切片」小节就点名告知;
- 之后用
gtrk patch 裁剪 / 切分带运镜的片段,关键帧会跟着调整,不用手改。
调速(只在用户主动要求时)
用户说「切片都加速到 1.2 倍」这类话时,逐段提交带 --speed-factor 1.2(范围 0.5–2.0,保音高)。倍率写进逐 clip 工程,客户端 / 剪映 / PR 打开都按倍率播放,可在客户端逐条改回;交付时把这句告诉用户,clips.md 里若有「未能变速的切片」小节就点名告知。用户没提就全程不加、不追问;要超出 0.5–2.0 的倍率,告诉他在客户端对具体片段拖边变速。
MG 动画(仅当开工④用户要了才做)
- 时机:选题清单敲定之后、只对入选 clip 做——没入选的切片不白做颗粒。
- 姿势:逐 clip 走标准成片化车道(
gtrk split 拆分派单 → 颗粒 → gtrk mg 铺轨),
素材=该 clip 的粗剪工程与 .srt。风格按内容驱动的临场泛化横切原则
(全部成片型图纸通用):风格必须有,但不锚定既有风格 skill,按当下内容自由泛化。
- 红线:MG 是叠加层,照旧不动源片像素;④答「不要」= 全程零 MG 动作。
B-roll:缺省不掺(明示条款)
直播切片的画面本体就是直播实录,本图纸缺省不派 FILM_BROLL、不推销 B-roll 填充
——开工问询里也刻意没有这一问。用户主动明确要求给某条切片补空镜时,按通用
gtrk matrix 车道单独走,不改本图纸主干。
八、计费与预算速查(跑前转述给用户)
- 计费基 = 上传物音频流时长(≈源片时长),2 积分/分钟。
- 分段不改总量:切段总时长≈原片,所以分不分段花的钱差不多,分段买的是「能跑通」和「粒度更细的选题清单」。费用以实时价格和音频时长为准。
- 建单期被拒是零计费的(如超 2h 硬闸)——试探性提交不会烧钱,但会白传一个大文件。
- 任务失败按服务端回执处理;只有回执明确退款时才向用户说明可重跑。
- 运行时 CLI 自动查实时价格并打印,把提示原样转述;长片先向用户确认再跑。
九、排错
超过最大重试次数 → 这句是通用兜底文案;优先检查外部 ASR 查询接口状态。
- 判据:失败很快(1–2 分钟内就报,而正常 40 分钟段要跑 4–20 分钟)⇒ 卡在开头的转写阶段。
- 处置:先原样重跑一次。若仍失败,说明故障可能不是瞬时的。
- 重试仍失败时,别死磕同一段:换个切点重切该时段(边界挪几分钟)、或先跑其他段把能出的先出了,
把这一段单独挂起问客服/换时间再试。MUST NOT 反复重跑——每次都会重新等待,是否退款以回执为准。
- 别改参数、别一味切更短——那会掩盖问题;先确认是不是 ASR 侧的事。
- 分段跑的好处在这里体现:只需处理失败的那一段,其余段的成果不受影响。
6019 媒体时长无效或超过业务限制 → 单次提交超服务端 2 小时硬闸。分段,别重试。
- 轮询超时 → 不是失败,
gtrk oralcut-result <task_id> --out <目录> 取回(§二)。
- 分屏没生效但也没报错 → 正常静默面(§四)。按
split_manifest 与 split_screen/ 目录核实;确无多人同框就是没候选,不是 bug。
- clips 为空 → 该段没有可成片的高光(纯语义选段),看
report.json 摘要给用户解释;直播的垫场/等人段落出现这个属正常。
- 工程打开缺素材 → 多半是切段文件被移动/删除了(§二 警告)。
- 其余症状(部分 clip 失败 / 剪映看不到草稿 / 改工程)→ 一律以
gtrk-long2short 的排错节与 gtrk patch 为准,本图纸不搬。