@gitruck/cli 1.2.6 → 1.2.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENT.md +11 -1
- package/CHANGELOG.md +24 -0
- package/README.en.md +13 -1
- package/README.md +18 -8
- package/dist/index.js +229 -229
- package/package.json +1 -1
- package/skills/gtrk-ai-drama/SKILL.md +8 -8
- package/skills/gtrk-cover/SKILL.md +1 -1
- package/skills/gtrk-matrix/SKILL.md +1 -1
- package/skills/gtrk-mg/SKILL.md +1 -1
- package/skills/gtrk-splitter/SKILL.md +4 -4
- package/skills/gtrk-style-maker/references/seeds/seed-psych-humanities.md +1 -1
- package/skills/gtrk-talking-head/SKILL.md +1 -1
- package/skills/gtrk-tools/SKILL.md +11 -1
- package/skills/gtrk-travel-recap/SKILL.md +2 -2
- package/skills/gtrk-travel-recap/references/speech-rate.md +139 -119
- package/skills/gtrk-voiceover/SKILL.md +1 -1
package/package.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: gtrk-ai-drama
|
|
3
|
-
description: AI
|
|
3
|
+
description: AI 情景动画分镜稿生成器——把成片 SOP 第③步(B-roll 底轨阶段)分到 AI_DRAMA 车道的 beat,逐个产**四段朴素描述(故事背景 / 角色 / 分镜 / 原文文稿)+ 独立视觉基调段 + 时长预算**,中英双版;Markdown 外壳默认严格兼容 gitruck-ai-drama-desk 解析器,可直接导入工作台,也可拿去任意外部 AI 漫剧管线(可灵 / 即梦 / Vidu / Veo / Runway / LTX / 本地开源,或 LibTV / OiiOii / TapNow 这类成片 agent 平台)上手用。创作与出片仍在 skill / 外部工作台;工作台导出的 return-v1 包用 `gtrk ai-drama lay` 确定性回填独立 AI 轨。当用户想「上 AI 情景动画 / 做 AI 分镜 / AI 动画描述 / 把这段做成 AI 视频 / 给这段配 AI 情景动画 / 弗洛伊德这段怎么做视频」时使用本 skill。通用拆镜 craft(蒙太奇段分层 / 四段描述结构 / 中英双语 / 时长预算)由本 skill 自持;栏目视觉 DNA(Style Lock)从栏目配置 style.skills 里 produces==AI_DRAMA 的条目解析注入,绝不硬编某栏目风格。凡把口播派单里 AI_DRAMA 段落转成可出片的描述稿,优先用本 skill,别手搓。
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# AI
|
|
6
|
+
# AI 情景动画分镜稿生成器(gtrk-ai-drama)
|
|
7
7
|
|
|
8
8
|
把口播派单里分到 **`AI_DRAMA` 车道**的 beat,逐个拆成分镜、为每个 beat 产 **四段朴素描述 + 独立视觉基调 + 时长预算**(中英双版),落到 `<project>/ai-drama/<beat_id>.md`,再交棒 AI Drama Desk 或任意外部平台出片;标准工作台导出包由 CLI 自动回填时间线。
|
|
9
9
|
|
|
@@ -22,7 +22,7 @@ return-v1 标准包由 `gtrk ai-drama lay` 确定性回填;其他平台没有
|
|
|
22
22
|
|
|
23
23
|
**你与 `matrix` 同属第 ③ 步,MUST 在 MG 之前落位。** 理由:**AI 情景片段属于底轨 B-roll 画面家族,不是叠加层**——整条管线里唯一的叠加层是 MG(含 ov)。MG 的排版决策是「因势象形避主体」、**依赖底轨的最终画面构图**;若你的片段在 MG 之后才回铺,底轨构图就变了,先产的 MG 是对着「还没有 AI 画面的底轨」做的避让,你的片段落位后必然被避让错位、甚至被 MG 盖住画面主体。
|
|
24
24
|
|
|
25
|
-
> ⚠️ **本节旧口径是错的,已于 2026-08-17 纠正**:旧文写「第 ⑤ 步、最后一层视觉,越往后叠得越上层」——**那是把「工序次序」误当成了「图层次序」**。工序上你必须先落位;图层上你本来就在底轨、从来不是「最上层」。若你在别处读到「AI
|
|
25
|
+
> ⚠️ **本节旧口径是错的,已于 2026-08-17 纠正**:旧文写「第 ⑤ 步、最后一层视觉,越往后叠得越上层」——**那是把「工序次序」误当成了「图层次序」**。工序上你必须先落位;图层上你本来就在底轨、从来不是「最上层」。若你在别处读到「AI 情景动画最后上」的表述,以本节为准。
|
|
26
26
|
|
|
27
27
|
**异步等待的口子(你造成的那个)**:你产完描述后,用户要去外部平台出片、抽卡可能数天。严格串行会把 ④⑤ 无限期卡住,故约定:进 ⑤ 的硬门是「**AI 片段已回铺 ∨ 用户明示先跳过**」。走「明示跳过」时,下游 `/gtrk-mg` MUST 把与你的 beat 相邻/重叠区间的 MG 颗粒标记为「AI 回铺后待复查构图」并在收口时复述——**你在交代进度时也要把这个代价说清**,让用户知道跳过意味着将来可能返工那几颗。
|
|
28
28
|
|
|
@@ -49,7 +49,7 @@ return-v1 标准包由 `gtrk ai-drama lay` 确定性回填;其他平台没有
|
|
|
49
49
|
2. **取 AI_DRAMA 生产条目**:读 `style.skills[]`,逐条把 `produces` **归一**(历史别名如 `RRV_MG→MG` 等按归一规则处理),取 `produces == "AI_DRAMA"` 的条目。
|
|
50
50
|
- 命中 → 拿它的 `ref`(指向一个 skill 目录/资源)→ **读该 skill 的 Style Lock / 风格资产**(通常是它 `references/` 下的 style-lock、theme-accent、影视参考锚点等),把其中的**底色 / 单点强调色 / 影视参考 / 材质 / 栏目禁令**当作本次生成的视觉 DNA,注入 ①视觉基调段与各描述。
|
|
51
51
|
- 条目声明 `routing:"none"` → 跳过(显式管线外)。
|
|
52
|
-
- **无 AI_DRAMA 匹配条目 = 该栏目没绑 AI
|
|
52
|
+
- **无 AI_DRAMA 匹配条目 = 该栏目没绑 AI 情景动画风格资产** → 用下面「中性默认」。
|
|
53
53
|
3. **注入,不臆造**:读到什么风格资产就用什么;**没读到就用中性默认,绝不凭栏目名猜风格、绝不套用别的栏目的调性**。
|
|
54
54
|
|
|
55
55
|
> 举例(仅示意解析机制,非硬编):`real-roam-guide` 栏目配置里 `style.skills` 有一条 `{produces:"AI_DRAMA", ref:"…/ai-drama-prompter"}` → 解析到它 → 读它的 style-lock(黑白单红那套)注入。换个栏目、换个 ref,注入的就是另一套风格。**本 skill 正文里不写死任何一套具体风格。**
|
|
@@ -69,7 +69,7 @@ return-v1 标准包由 `gtrk ai-drama lay` 确定性回填;其他平台没有
|
|
|
69
69
|
|
|
70
70
|
1. **1 镜 = 1 情感颗粒**:同一个动作不切两镜;情绪转折必须切镜。
|
|
71
71
|
2. **每镜 3–8 秒**:短于 3 秒观众来不及呼吸;长于 8 秒 AI 视频模型会塌(人物表情 / 手部漂移)。
|
|
72
|
-
3. **长文段拆蒙太奇段**:一个 AI_DRAMA beat 可能覆盖很长一段文稿、含多个场景/情境。此时**先拆蒙太奇段**(每段锚一个场景/情境),**段内 3–6 镜**按情感颗粒切、**段间可换场**。镜数上限按**段级**判定,**不再因整段总镜数超 6 就回退 splitter**——长区间整段做 AI
|
|
72
|
+
3. **长文段拆蒙太奇段**:一个 AI_DRAMA beat 可能覆盖很长一段文稿、含多个场景/情境。此时**先拆蒙太奇段**(每段锚一个场景/情境),**段内 3–6 镜**按情感颗粒切、**段间可换场**。镜数上限按**段级**判定,**不再因整段总镜数超 6 就回退 splitter**——长区间整段做 AI 情景动画是合法创作,不是拆分错误。
|
|
73
73
|
4. **切分触发器**(任一出现才考虑切):时间 / 空间改变、主体改变(例:理论家 → 当事人)、抽象概念登场(从「人物戏」切到「象征物戏」)、情绪转折(安静→刺点 / 爆发→凝滞)。**不要因一个句号、一个逗号就切。**
|
|
74
74
|
5. **控整体不控单镜**:你对**区间总时长**负责(各镜建议秒数之和量级贴合 `track_st→track_ed`),但不必把每一镜的秒数抠死——AI 平台交付本就不保证逐帧准,最终对齐由回填这一步兜:走 `gtrk ai-drama lay` 时它按窗口顺排、
|
|
75
75
|
末镜尽量吸收到 `track_ed`;**素材短于窗口就留空档**(MUST NOT 拉伸/循环去填满),没有标准包才由用户手动拼。
|
|
@@ -140,7 +140,7 @@ bun scripts/validate-storyboard.mjs <候选稿.md>
|
|
|
140
140
|
通过时输出单行 JSON 并退出 0;不通过时逐条列出违约项并退出非零。它校验的是生产端硬契约;工作台仍是最终权威,仓库可用时可再用其 `server/lib/parse.ts` 做回归。
|
|
141
141
|
|
|
142
142
|
```
|
|
143
|
-
# AI
|
|
143
|
+
# AI 情景动画分镜稿 · [自动标题](beat <beat_id>)
|
|
144
144
|
|
|
145
145
|
> [责权利声明:本稿只描述意图与时长;角色一致性依赖下游角色资产机制;出片/拼回在用户手里]
|
|
146
146
|
|
|
@@ -208,7 +208,7 @@ face / hair / eyes / wardrobe / signature prop + do-not-change + one line on how
|
|
|
208
208
|
> **中性 Style Lock**:影视级自然主义画面,真实可信的光源(窗光 / 实用光 / 自然天光,不炫技),克制稳定的镜头语言(固定或缓慢推拉摇,无手持抖动 / 无广告级动态运镜 / 无无人机炫技),近单色到低饱和的克制调色(不追 HDR、不追霓虹),胶片颗粒质感。忌塑料 3D 渲染、忌动漫二次元、忌过度戏剧化打光。
|
|
209
209
|
> **EN**: Cinematic naturalism, believable practical light sources (window / practical / natural daylight, no showing off), restrained stable camera language (locked or slow dolly/pan/tilt, no handheld shake, no ad-grade dynamic moves, no drone stunts), near-monochrome to low-saturation restrained grade (no HDR, no neon), visible film grain. Avoid plastic 3D render, anime, and over-dramatic lighting.
|
|
210
210
|
|
|
211
|
-
中性默认下**不设单点强调色 / 不指定影视导演锚点**(那些是栏目资产)。用完顺带提醒用户:**想要这条栏目有自己的 AI
|
|
211
|
+
中性默认下**不设单点强调色 / 不指定影视导演锚点**(那些是栏目资产)。用完顺带提醒用户:**想要这条栏目有自己的 AI 情景动画视觉 DNA,去 `/gtrk-style-maker` 沉淀一套 AI_DRAMA 风格资产并登记进 `style.skills`**,之后每次生成都会自动注入。分镜稿与提示词层也可查推荐目录(公约 §三‴):`gtrk skills recommend --scene ai-drama`,装完用 `gtrk skills add <owner/repo>` 登记;本 skill 正文不点名任何仓。
|
|
212
212
|
|
|
213
213
|
**禁忌行**(写进 ①)分两层:
|
|
214
214
|
- **通用 AI slop 兜底(本 skill 自带,任何栏目都写)**:glossy 3D render / plastic skin、HDR look / oversaturated、generic AI anime / saccharine、deformed face / extra fingers / mutated limbs、text overlay / captions / 字幕(字幕剪辑阶段另做)、heavy lens flare / chromatic aberration、cartoon / low-res / unfinished。
|
|
@@ -245,7 +245,7 @@ face / hair / eyes / wardrobe / signature prop + do-not-change + one line on how
|
|
|
245
245
|
命令会先按当刻口播工程重投影 beat 窗口,再把所有镜头复制到 `<gtrk目录>/assets/ai-drama/<slug>/`,共用一条新的 `video_track`;每个 beat 从起点顺排,最后一镜吸收到 beat 终点。既有 A-roll、BGM 与 B-roll 轨零改动。若已铺 AI 轨被用户手调过,缺省拒绝覆盖;只有用户明确同意丢弃手调时才加 `--replace-all`。
|
|
246
246
|
3. **非标准平台才手动回铺**:外部平台没有 return-v1 清单时,才由用户把片段拖回 opencut 的 **AI_DRAMA 车道**,对齐该 beat 的 `track_st→track_ed`。AI 出片仍是外部异步、用户驱动;未拿到完整片段前要停下等用户,别替他假装出片 / 回轨完成。
|
|
247
247
|
4. **回铺齐 ≠ 收口,还有两步**:你的片段回铺齐只意味着 **③ B-roll 底轨阶段**完成。接着 MUST 走 **④ 全局抽帧检查画面构图**(对三源合并后的最终底轨抽帧,看主体位置 / 安全区 / 画面朝向 / 明暗,**停下等用户确认**)→ 过了才交棒 **⑤ `/gtrk-mg`** 把 MG(含 ov)叠上 → 最后才 `gtrk render` 收口。
|
|
248
|
-
⚠️ **MUST NOT 从你这里直接跳到 `render`**(旧文档曾这么写,那是错的——它把 AI
|
|
248
|
+
⚠️ **MUST NOT 从你这里直接跳到 `render`**(旧文档曾这么写,那是错的——它把 AI 情景动画当成了最后一层)。
|
|
249
249
|
|
|
250
250
|
> 原则:**agent 替用户跑 CLI / 接力 skill,用户只对话**。但 AI_DRAMA 车道天然有「用户去外部平台出片 + 手动拼回」的手工环节——那部分是外部的手,无法替跑;除此之外的解析、生成、落盘、交代,全由你(脑)一次做完,别让用户自己去拼描述。
|
|
251
251
|
|
|
@@ -88,7 +88,7 @@ description: 封面工作台——把一期视频的封面从「设计诊断 +
|
|
|
88
88
|
## 这个 skill 不做什么 → 找谁
|
|
89
89
|
|
|
90
90
|
- **视频内的 MG 动态图 / 颗粒** → 栏目 MG 生产 skill + `/gtrk-mg`
|
|
91
|
-
- **AI
|
|
91
|
+
- **AI 情景动画分镜稿** → `/gtrk-ai-drama`
|
|
92
92
|
- **建栏目风格体系(含封面风格资产)** → `/gtrk-style-maker`
|
|
93
93
|
- **成片剪辑 / 拆分 / 铺轨 / 渲染** → 成片 SOP 各步(`/gtrk-oralcut` 起)
|
|
94
94
|
- **替用户抽图、替用户拖字导出** → 做不到也不该做:抽图在外部平台、排字在用户浏览器,这两步是用户检查点,交代清楚后**停下等用户**。
|
|
@@ -300,7 +300,7 @@ description: B-roll 检索铺轨编排手册——成片管线里第一个铺的
|
|
|
300
300
|
|
|
301
301
|
**为什么 B-roll 整个阶段最先**:**AI 情景片段属于底轨 B-roll 画面家族,不是叠加层**——叠加层只有 MG(含 ov)。MG 的排版决策是「因势象形避主体」,**依赖底轨的最终画面构图**;三源(影视/本地/AI)没落齐就产 MG,等 AI 片段回铺后避让必然错位、甚至盖住 AI 画面主体。
|
|
302
302
|
|
|
303
|
-
> ⚠️ 旧序(MG ④ 在 AI
|
|
303
|
+
> ⚠️ 旧序(MG ④ 在 AI 情景动画 ⑤ 之前、理由写「越往后叠得越上层」)**是把「工序次序」误当成了「图层次序」**。工序上 AI 片段必须先落位;图层上它本来就在底轨。
|
|
304
304
|
|
|
305
305
|
铺完**必须停下等用户在 opencut 里挑选/调整**(关键检查点),不要一口气往下冲。
|
|
306
306
|
|
package/skills/gtrk-mg/SKILL.md
CHANGED
|
@@ -17,7 +17,7 @@ description: MG 动态图颗粒铺轨器——成片 SOP 第 ⑤ 步(**最后
|
|
|
17
17
|
|
|
18
18
|
**你是第 ⑤ 步、也是最后一层。** MG 颗粒是**唯一的叠加层**——底下那整层底轨必须先定死(**三源全落齐**),否则你的排版避让是对着一个不完整的画面做的。
|
|
19
19
|
|
|
20
|
-
> ⚠️ **AI 情景片段属于底轨 B-roll 画面家族,不是叠加层**。旧序把你排在 AI
|
|
20
|
+
> ⚠️ **AI 情景片段属于底轨 B-roll 画面家族,不是叠加层**。旧序把你排在 AI 情景动画之前、理由写「越往后叠得越上层」——**那是把「工序次序」误当成了「图层次序」**。AI 片段在你之后回铺,底轨构图就变了,你先产的颗粒必然避让错位、甚至盖住 AI 画面主体。
|
|
21
21
|
|
|
22
22
|
所以动手前先过前置硬门。
|
|
23
23
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: gtrk-splitter
|
|
3
|
-
description: 视觉拆分派单器——把一条已剪好的口播工程(gtrk + transcript)拆成 beat 级「视觉拆分稿」,为每个连续文稿段指定唯一主层(A_ROLL 真人出镜 / MG 动态图 / AI_DRAMA 再现 / FILM_BROLL 影视素材)+ 辅助层,产机器可消费的派单清单(MG 槽位 / B-roll 检索队列 / AI 动画队列)驱动后续铺轨。当用户想「文稿视觉化拆分 / 视觉拆分稿 / beat 时间线 / 派分镜 / A-roll B-roll 分配 / 哪些段做动态图·哪些做 AI
|
|
3
|
+
description: 视觉拆分派单器——把一条已剪好的口播工程(gtrk + transcript)拆成 beat 级「视觉拆分稿」,为每个连续文稿段指定唯一主层(A_ROLL 真人出镜 / MG 动态图 / AI_DRAMA 再现 / FILM_BROLL 影视素材)+ 辅助层,产机器可消费的派单清单(MG 槽位 / B-roll 检索队列 / AI 动画队列)驱动后续铺轨。当用户想「文稿视觉化拆分 / 视觉拆分稿 / beat 时间线 / 派分镜 / A-roll B-roll 分配 / 哪些段做动态图·哪些做 AI 情景动画·哪些用影视素材 / 给这条口播派单」时使用本 skill。凡涉及把口播成片拆成分镜派工,优先用本 skill 驱动 gtrk CLI 的 `split` 命令,绝不手写时码、绝不抄原文定位。
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# 视觉拆分派单器(gtrk-splitter)
|
|
@@ -96,7 +96,7 @@ gtrk split --project "<oralcut产物目录>" --json
|
|
|
96
96
|
|
|
97
97
|
按下面「拆分方法论」把连续的 utterance 分成若干 beat。一个 beat 覆盖**连续的 id 区间**(可跨多句),但**不能跨前后两处拼接**。beat 之间允许留空隙(未覆盖段默认 A_ROLL 底轨直出),**不许重叠**。
|
|
98
98
|
|
|
99
|
-
**抽帧确认底轨画面(凡毛片可能已含视觉包装时必做,勿只凭文稿派单)**:view.json 只给你文字,看不见画面——但毛片未必是素的。**二次过 / 补 ov 场景**(毛片本身是已烧入 MG、AI
|
|
99
|
+
**抽帧确认底轨画面(凡毛片可能已含视觉包装时必做,勿只凭文稿派单)**:view.json 只给你文字,看不见画面——但毛片未必是素的。**二次过 / 补 ov 场景**(毛片本身是已烧入 MG、AI 情景动画或其他包装的成片再加工)尤其危险:只凭时码派 overlay 会撞上已有包装叠罗汉。姿势:对候选挂点(尤其打算派 `overlay` 的句区间)用本地 ffmpeg 按 `track_st` 抽 1 帧看一眼(`ffmpeg -ss <秒> -i <毛片> -frames:v 1 "<系统temp>/<句id>.jpg"`,成本≈0;抽帧图是临时文件——落系统 temp、用完即删,**别落 cwd / agent 自有目录**),确认该处画面性质——**裸口播 → 正常派;已有包装 → 避开该区间或另选挂点;拿不准 → 列给用户裁决**。首次过全素毛片可免;一旦毛片来历含「粗剪成片 / 待 ov 补充 / 二次过」字样,此步为硬门。抽帧顺带看清真人主体位置与画面明暗,写进 beat 的语义上下文,供下游产颗粒时构图避让。
|
|
100
100
|
|
|
101
101
|
> 📌 **这一步与 SOP ④ 的全局抽帧检查不是同一件事,两者都要**:这里抽的是**毛片原始画面**(派单前,判该处是裸口播还是已有包装);④ 抽的是**B-roll 三源全铺齐后的最终底轨**(产 MG 前,供排版避让)。前者防「派单派到包装上」,后者防「MG 对着不完整底轨做避让」。
|
|
102
102
|
|
|
@@ -194,7 +194,7 @@ dispatch 落地后**不要收工**——但下游各车道是**有先后的 SOP
|
|
|
194
194
|
|
|
195
195
|
**为什么是这个序**:**AI 情景片段属于底轨 B-roll 画面家族,不是叠加层**——叠加层只有 MG(含 ov)。MG 的排版决策是「因势象形避主体」,**依赖底轨的最终画面构图**;若 AI 片段在 MG 之后才回铺,底轨构图就变了,先产的 MG 是对着「还没有 AI 画面的底轨」做的避让,AI 片段落位后必然错位、甚至盖住 AI 画面主体。
|
|
196
196
|
|
|
197
|
-
> ⚠️ 旧序(MG 在 AI
|
|
197
|
+
> ⚠️ 旧序(MG 在 AI 情景动画之前)的理由写的是「越往后叠得越上层」——**那是把「工序次序」误当成了「图层次序」**。工序上 AI 片段必须先落位;图层上它本来就在底轨。
|
|
198
198
|
|
|
199
199
|
按序推进、每步替用户跑命令,**关键检查点停下等用户确认**再进下一步;哪条车道 dispatch 队列为空就跳过。
|
|
200
200
|
|
|
@@ -238,7 +238,7 @@ SHALL 停在派单这一步、SHALL NOT 自动交棒**。两者语义正交,
|
|
|
238
238
|
|
|
239
239
|
- **`A_ROLL`(真人出镜)**:信任感来自「观众看见真人正在说」。优先给:体验式钩子、立场转换、关键悬念、情绪抱持、理论升华、结尾发问。
|
|
240
240
|
- **`MG`(动态图 / motion graphics)**:主要任务是「让观众看懂结构」。优先给:容器概念展开、抽象结构翻译、多概念映射、网络/流程/关系图、容器反转、回扣时的系统动态图。
|
|
241
|
-
- **`AI_DRAMA`(AI
|
|
241
|
+
- **`AI_DRAMA`(AI 情景动画)**:靠「演绎一个具体历史瞬间」成立。优先给:历史事件再现、理论家/名人/时代场景的动作演绎、有明确年代·人物·地点暗示的桥段。
|
|
242
242
|
- **`FILM_BROLL`(影视素材)**:靠「沉浸感、情绪、现实质感」成立。优先给:日常痛感、都市情绪、社会事件氛围、关系案例沉浸——不适合 MG 讲解、也不需要历史 reenactment 的段落。
|
|
243
243
|
|
|
244
244
|
### 八叙事功能(narrative)
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
|---|---|---|---|
|
|
22
22
|
| 拆分派单器 | 全片 beat 派单文档 | —(管线文档生产者,不登记) | — |
|
|
23
23
|
| 动态图生成 | HTML 动画颗粒 | MG | gsap-emit v1(合规项进自检) |
|
|
24
|
-
| AI
|
|
24
|
+
| AI 情景动画分镜 | 双语分镜提示词文本 | AI_DRAMA | 暂无契约 |
|
|
25
25
|
| 封面设计 | 文生图 prompt + 排字工作台 | cover + routing:"none" | 管线外 |
|
|
26
26
|
|
|
27
27
|
每个 skill 开头声明「这个 skill 不做什么 → 找谁」。
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: gtrk-tools
|
|
3
|
-
description: gtrk 单点工具与媒体转换能力的调用向导,覆盖 `gtrk tool` 家族。当用户想“让图动起来 / 抠像去背景 / 图片或视频去黑边 / 图片或视频比例转换 / 视频防抖 / 添加蒸汽波滤镜 / 清理有权处理的图片或视频中的水印、字幕或叠加元素 / 视频超分变清晰 / 视频补帧变流畅 / 分离人声和伴奏 / 提取伴奏 / 按说话人分轨 / 音频变调变速 / 钢琴扒谱转 MIDI 或修复钢琴录音 / 给音频或视频降噪 / 去掉音频静音停顿 / 长图转方图 / 图片变 LivePhoto 微动 / 视频机械分镜或智能分镜切镜头 / 提取运镜高光片段 / 给视频加字幕或翻译字幕或烧录字幕 / 一键剪 MAD / 用某个 gtrk 单点工具 / gtrk 工具族里有什么”时使用本 Skill。凡涉及这些能力,优先驱动 CLI,不让用户自己去终端敲,也不手搓 ffmpeg。
|
|
3
|
+
description: gtrk 单点工具与媒体转换能力的调用向导,覆盖 `gtrk tool` 家族。当用户想“让图动起来 / 抠像去背景 / 图片或视频去黑边 / 图片或视频比例转换 / 视频防抖 / 添加蒸汽波滤镜 / 清理有权处理的图片或视频中的水印、字幕或叠加元素 / 视频超分变清晰 / 视频补帧变流畅 / 分离人声和伴奏 / 提取伴奏 / 按说话人分轨 / 音频变调变速 / 钢琴扒谱转 MIDI 或修复钢琴录音 / 给音频或视频降噪 / 去掉音频静音停顿 / 长图转方图 / 图片变 LivePhoto 微动 / 视频机械分镜或智能分镜切镜头 / 提取运镜高光片段 / 给视频加字幕或翻译字幕或烧录字幕 / 把视频翻译配音成另一种语言或译制 / 一键剪 MAD / 用某个 gtrk 单点工具 / gtrk 工具族里有什么”时使用本 Skill。凡涉及这些能力,优先驱动 CLI,不让用户自己去终端敲,也不手搓 ffmpeg。
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# gtrk 工具族(gtrk-tools)
|
|
@@ -52,10 +52,20 @@ description: gtrk 单点工具与媒体转换能力的调用向导,覆盖 `gtr
|
|
|
52
52
|
| `image_classic_template` | 「做封面 / 智能拼图 / 标题配图出封面图」 | **多张图片**(可传多个路径,文件顺序即拼装顺序);**`--main-title <标题>` 必填**;可选 `--sub-title`、`--template-mode`、`--aspect`、`--quality`、`--output-pic-count`(服务端钳制 ≤20)、`--output-text-count`(≤20)、`--title-layout` | 封面/拼图成品(text/pic/render 三组、各组可空可多张) | 运行前实时查询 | 已上线 |
|
|
53
53
|
| `image_vertical_stitch` | 「拼长图 / 多图竖拼 / 截图接成一张长图」 | **多张图片**(可传多个路径,顺序=自上而下拼接顺序) | 一张垂直拼接长图 | 运行前实时查询 | 已上线 |
|
|
54
54
|
| `audio_tts_clone` | 「配音 / 文字转语音 / TTS / 用 xx 音色念这段 / 把这段稿子合成音频」 | **无文件**:`--text <短文本>` 或 `--text-file <txt>` 二选一(≤5000 字,服务端为真相)+ **`--speaker <音色代号>` 必填**(可用音色见官网文档,传错时报错会列出全部可用项);可选 `--text-lang`/`--output-format wav\|mp3`/`--speed`/`--split-method`/`--batch-size`/`--fragment-interval <秒>`(句间停顿,**仅自训音色**,云引擎音色传了会报错;speed/切分法缺省跟随该音色调好的参数)/`--subtitle-format <fmt>`(**可选出字幕**,如 `srt`;缺省不出字幕、不额外计费,取值以服务端为准,传了不认的格式服务端会拒并列出可用项)。**计量单位与单价以 `gtrk tool list` 实时显示为准 —— MUST NOT 在本文写死**(此处写死过一次「200 字/分钟」,服务端实为 240,且计量口径已改为千字符)** | 配音音频(wav/mp3);传了 `--subtitle-format` 时另产字幕 `tts-<音色代号>.srt`(服务端字幕降级时只落音频、不留空字幕文件) | 运行前实时查询 | 已上线 |
|
|
55
|
+
| `video_translate_dub` | 「视频翻译配音 / 译制 / 把这条视频换成英文配音 / 用我的声音说英文 / 给视频出个外语配音版」 | 单条视频或音频(**≤120 分钟**,整片上传);**`--language <源语种>`、`--translate-language <目标语种>`、`--speaker <clone 或音色代号>` 三项必填**(语种传标准地区码如 `zh-CN` / `en-US`;可用语种与音色以服务端为准,传错时报错会列出可用项);`clone` = 用原片说话人的声音,可加 `--ref <音频或视频>` 指定克隆参考、`--ref-lang` 标参考语种(非 `clone` 时 `--ref` 会被忽略并提示);可选 `--no-keep-bgm`(不保留原伴奏)、`--fit-policy`(时长拟合策略)、`--speed-band <最小,最大>`(语速倍率区间)、`--subtitle-mode`(字幕形态,音频输入不能烧录)、`--subtitle-type`(烧录样式)、`--project-formats <逗号分隔>`(缺省只出客户端工程 `.gtrk`;要剪映草稿写 `gtrk,jianying`,要 PR / Final Cut 工程写如 `gtrk,xml`)、`--jianying-draft-dir <目录>`(剪映草稿目录,缺省读 `gtrk init` 配置或自动探测);各参数取值以服务端为准 | 配音成片 `<输入名>-dub.mp4`(音频输入为 `-dub.mp3`)+ 纯配音轨 `dub.wav` + 伴奏轨 `bgm.wav`(有则)+ 延长后的底片 `base.mp4`(有则)+ 字幕 `<输入名>.srt` / `<输入名>_bilingual.srt`(有则)+ 逐句对齐记录 `transcript.json` + 工程文件按格式分目录(如 `gtrk/project.gtrk`、`jianying/`;音频输入没有)+ `result-output.json`(配音对齐报告) | 运行前实时查询 | 已上线 |
|
|
55
56
|
| `mad` | 「一键剪 MAD / 素材文件夹自动出卡点成片 / 自动选技法 / 给这堆素材出个 AE 工程 / 我想要某某效果的卡点片」 | 一个素材文件夹(3~10 条视频)+ 可选 `--bgm 歌.mp3` + 可选 `--technique 技法名`;`--search <词>` 只查技法目录不要输入 | AE 母合成工程 `.jsx`(仅支持 AE) | 仅 `--bgm` 触发实时查价 | 已上线 |
|
|
56
57
|
|
|
57
58
|
> 清单随 CLI 版本增补。**动手前先跑 `gtrk tool list --json` 拿最新清单**,别凭记忆——新工具、状态变化都在那里。
|
|
58
59
|
|
|
60
|
+
### video_translate_dub(视频译制配音)要提前讲给用户的
|
|
61
|
+
|
|
62
|
+
- **克隆声音须本人同意**:`--speaker clone`(或 `--ref` 给的是别人的录音)会克隆说话人的声音。克隆别人的声音 MUST 先取得那个人的同意,发起任务即视为已取得;不确定就先问用户,别替他默认。
|
|
63
|
+
- **只换音轨,画面保持原样**:不做口型同步,镜头也不动。缺省拟合策略下,个别译句过长时画面可能短暂定格来让出时间;用户要成片与原片严格等长,传 `--fit-policy strict`(超出部分截尾)。
|
|
64
|
+
- **时长与耗时**:单条最长 120 分钟,超了 CLI 在上传前直接拒并提示分段;长片耗时十几分钟起,CLI 最多等 4 小时。中途断开别直接重跑(会重新计费),凭产物目录里 `task.json` 的任务号取回。
|
|
65
|
+
- **工程文件怎么打开**:CLI 提交时自动带上原片与产物目录的本机路径,各格式工程里的素材都指向本机的原片与产物目录里的 `dub.wav` / `bgm.wav` / `base.mp4`,打开即用。要剪映草稿加 `--project-formats gtrk,jianying`:草稿自动放进剪映草稿目录,打开剪映就在列表里;CLI 提示「没找到剪映草稿目录」或「草稿缺 draft_meta_info.json」时,让用户给出剪映草稿目录再用 `--jianying-draft-dir` 重跑,或先用客户端工程。CapCut 草稿留在产物目录 `capcut/`,需要时手动放进 CapCut 草稿目录。
|
|
66
|
+
- **附带产物偶尔缺项不算失败**:字幕、逐句对齐记录、工程文件某一项没生成时,成片与配音轨照出、`ok=true`,终端打一行「部分附带产物未生成」,原因在 `result-output.json` 的 `errors`。照实告诉用户少了哪样。
|
|
67
|
+
- 常用形态:`gtrk tool video_translate_dub ./talk.mp4 --language zh-CN --translate-language en-US --speaker clone --json`;用自己另录的干净人声做参考加 `--ref ./me.m4a`;要剪映草稿加 `--project-formats gtrk,jianying`,要 PR 工程加 `--project-formats gtrk,xml`。
|
|
68
|
+
|
|
59
69
|
### mad(一键剪 MAD)的特殊之处
|
|
60
70
|
|
|
61
71
|
`mad` 是族内首个 **local 型「纯本地工具、可选云端加料」**成员,与 cloud 型工具不同:
|
|
@@ -126,7 +126,7 @@ description: 旅拍解说一站式成片图纸——输入一个旅拍素材文
|
|
|
126
126
|
**成片时长 = min(内容所支撑, 素材所支撑)**:
|
|
127
127
|
- 内容支撑:有多少真东西说多少话,素材再多也不注水;
|
|
128
128
|
- 素材支撑:按「30% 图片×8 秒 + 70% 视频素材时长」估算上限,稿子在写稿阶段就按上限收敛(不要等铺轨时开天窗);把这个秒数换算成字数用下一条的折算口径(**公式本身不动**);
|
|
129
|
-
- **折算口径 = 挂钟语速**(wall-clock:稿件字数 ÷
|
|
129
|
+
- **折算口径 = 挂钟语速**(wall-clock:稿件字数 ÷ 合成音频总时长,**含**句间停顿),**按检查点①选定的那条音色取值:读 catalog 该音色的 `speech_rate_cpm`(字/分钟),并把 `speech_rate_basis` 一并报给用户(`measured` = 实测 / `derived` = 由声学参数推算)**;catalog 没给该字段(非中文音色)或拉不到 catalog 时才用**缺省 ≈330 字/分钟**,并明说这是缺省估值、**不是该音色的实测值**。3 分钟成片 ≈ **1000 字**。
|
|
130
130
|
缺省 330 的出处(★ 2026-09-02 立,`fix-speech-rate-calibration`):全库 49 条 zh-CN 音色挂钟中位 308.7、`narrator` 349.3(**单点实测,未覆盖全库**)、260902 真机三条片 316–342 —— 逐条档案与标定方法见 `references/speech-rate.md`,**MUST NOT 把那张表贴回本图纸**(单一真值源,垂类只许引用)。
|
|
131
131
|
- ⚠️ **MUST NOT 拿计费折算常量(240 字/分钟)推稿子字数**:那是**计费**用的保守下界(volc 单点实测 260 再下调留余量),与写稿侧的保守方向**正好相反**——计费侧低估语速只是「分钟数变大、不少收」,写稿侧低估语速却会让稿子写短、成片缩水(按 240 写 3 分钟 = 720 字,用 349 的挂钟语速实播只有 2.06 分钟,**缩水 31%**)。计费那一栏见 §九,两个数 MUST NOT 互相冒充。
|
|
132
132
|
|
|
@@ -197,7 +197,7 @@ gtrk matrix describe --plan <工程>/split/broll-plan.json --highlight-rubric @<
|
|
|
197
197
|
1. **解说稿 + 标题**:正文全文贴给用户(不是给路径),标题候选列出;
|
|
198
198
|
2. **画幅**(★ 打样事故教训——横屏素材铺进默认竖屏画布=信箱黑边):问目标平台——横屏 B 站/西瓜=1920x1080,竖屏抖音=1080x1920。**素材几何与画幅不一致时明确提示**(横素材→竖画布会裁切或留边);
|
|
199
199
|
3. **TTS 音色**:拉 catalog(`GET {apiBase}/task/tts/voices`,免鉴权)按内容调性挑 2-4 个候选,**每个附试听链接**(catalog 的 audition_url 字段,api.ai-mcn.tv:9000 静态直链)——用户在对话框里直接点开听。internal 标注的音色注明「仅内部成员」。也可按用户描述语义挑(「要个温柔女声」)。
|
|
200
|
-
**每个候选还 SHALL
|
|
200
|
+
**每个候选还 SHALL 附上该音色的挂钟语速与据此推的稿件字数区间**(取同一份 catalog 载荷里的 `speech_rate_cpm` + `speech_rate_basis`,零额外往返;该字段缺席就明说「用缺省 330 估」;标定方法与历史档案见 `references/speech-rate.md`,不再从那里查数)——挑音色的同时也是在挑稿子长度,别让用户回头才发现稿子长了三成。这条是**加项**,MUST NOT 削弱既有的「无试听链接 = 未完成推荐」义务;
|
|
201
201
|
4. **BGM 处置(双来源)**:
|
|
202
202
|
- 用户有本地音乐 → 询问是否 `gtrk tool audio_separation` 伴奏分离后取伴奏(缺省建议分离——TTS 配音不与歌曲人声打架);
|
|
203
203
|
- 用户未提供 → **搜同和素材矩阵**:`gtrk matrix material "<按稿件情绪+地理文化写的检索词>" --scope audio --top-k 5 --diversity --json`
|
|
@@ -1,119 +1,139 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
3
|
-
>
|
|
4
|
-
>
|
|
5
|
-
>
|
|
6
|
-
>
|
|
7
|
-
>
|
|
8
|
-
>
|
|
9
|
-
>
|
|
10
|
-
>
|
|
11
|
-
> | (
|
|
12
|
-
> | (
|
|
13
|
-
> | (
|
|
14
|
-
>
|
|
15
|
-
>
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
|
38
|
-
|
|
|
39
|
-
|
|
|
40
|
-
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
>
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
|
62
|
-
|
|
|
63
|
-
|
|
|
64
|
-
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
|
88
|
-
|
|
|
89
|
-
|
|
|
90
|
-
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
`
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
1
|
+
# 语速档案(方法学与历史档案 · fix-speech-rate-calibration 2026-09-02 立,2026-09-16 降级)
|
|
2
|
+
|
|
3
|
+
> ★ **(C) 已落地(2026-09-11 上线,infra `link-voice-catalog-speech-rate`)**:写稿折算的**取值**改读 catalog(`GET {apiBase}/task/tts/voices` 每条音色的 `speech_rate_cpm` + `speech_rate_basis`),**本文件不再是数值真值源**,只保留 §一 口径划界、§二 标定方法、§三 历史档案(含日期快照,勿当现值)、§四 缺省值来历、§五 回校攒样本。§3.2 那张 49 条派生表是 2026-09-02 的快照,此后音色增删与重标不再回写此处。
|
|
4
|
+
> 本文件服务于 `SKILL.md` §三 的「成片时长 = min(内容支撑, 素材支撑)」——把秒数换算成字数的那一步。
|
|
5
|
+
> **图纸正文只留一句指针 + 缺省值,方法与历史只住在这里**(垂类图纸继承通用框架层时**引用不复制**)。
|
|
6
|
+
>
|
|
7
|
+
> 表放哪:三方案取舍如下,自裁 **(B) 过渡 + (C) 终局**。
|
|
8
|
+
>
|
|
9
|
+
> | 方案 | 优点 | 缺点 | 判 |
|
|
10
|
+
> |---|---|---|---|
|
|
11
|
+
> | (A) 49 条表直接贴进 `SKILL.md` | 零新增依赖,agent 读图纸即得 | ① 淹没图纸主线(图纸是编排指南不是数据表);② 随注册表漂移,音色增删要手改;③ 图纸随 npm 发版分发,必然过期 | **弃** |
|
|
12
|
+
> | (B) 本文件(`references/speech-rate.md`) | 不淹图纸;仓内已有先例(`gtrk-cover` / `gtrk-splitter` / `gtrk-style-maker` 都有 `references/`);能同时装标定方法与档案 | 仍是静态快照会漂;且这条口径不止旅拍要用,挂在某一个垂类下有被复制扩散的风险 | **取(过渡态)** |
|
|
13
|
+
> | (C) infra 出字段 + CLI 从 catalog 直接读 | **唯一不漂**:注册表是真值源,新增音色自动带上;检查点①本来就要拉 catalog,读同一份载荷零额外往返 | 要 infra 联动件;改 `PUBLIC_FIELDS` 会让所有 ETag 失效一次;上线前 CLI 无数据 | **取(终局)** |
|
|
14
|
+
> | (D) 新增 `gtrk` 子命令去查语速 | 对 agent 友好 | 净新增命令面:今天 CLI 里没有任何代码拉 `/task/tts/voices`(图纸是教 agent 直接 GET 的),为一个写稿阶段只用一次的读操作立子命令,收益不抵维护面 | **弃** |
|
|
15
|
+
>
|
|
16
|
+
> (C) 落地后,本文件降级为**纯方法学文档**:只留 §二 标定方法与 §三 历史档案,取值改指 catalog 字段。——**已于 2026-09-16 执行**(见文首 ★)。
|
|
17
|
+
|
|
18
|
+
## 一、两个数不是一回事
|
|
19
|
+
|
|
20
|
+
| | 公式 | 低估语速的后果 | 保守方向 |
|
|
21
|
+
|---|---|---|---|
|
|
22
|
+
| **计费折算**(`_SPEECH_CHARS_PER_MINUTE = 240`) | 计费分钟 = 字数 ÷ 语速 | 分钟数变大 ⇒ **多收** | 低估是**安全**的(不少收) |
|
|
23
|
+
| **写稿折算**(挂钟语速,本文件) | 成片时长 = 字数 ÷ 语速 | 时长被高估 ⇒ **稿子写短** | 低估是**有害**的(成片缩水) |
|
|
24
|
+
|
|
25
|
+
240 的来历:volc 引擎**单点实测 100 汉字 ≈ 23.06 秒(约 260 字/分钟),再人为下调留余量**取 240;
|
|
26
|
+
2026-08-20 起它**已退出计费链路**,保留只为时长预估。把这份「宁可低估」的偏置搬到写稿侧,
|
|
27
|
+
就是本档案要治的那个缺陷 —— 按 240 写 3 分钟稿 = 720 字,用 `narrator` 349.3 的挂钟语速实播只有
|
|
28
|
+
**2.06 分钟,缩水 31%**。
|
|
29
|
+
|
|
30
|
+
两条口径的换算关系:**挂钟语速 = 有效语速 × (1 − 停顿占比)**。
|
|
31
|
+
注册表 `acoustic.rate` 记的是**有效语速**(扣掉停顿的净说话速度),写稿要的是**挂钟**(含停顿)。
|
|
32
|
+
|
|
33
|
+
## 二、标定方法(一条记录 MUST 齐备五项,缺一不得作口径依据)
|
|
34
|
+
|
|
35
|
+
| # | 必填项 | 说明 |
|
|
36
|
+
|---|---|---|
|
|
37
|
+
| ① | **音色与引擎** | `voice_id` + `engine`(自训 gpt_sovits / 云引擎 volc / …) |
|
|
38
|
+
| ② | **影响语速的合成参数** | `speed`、`fragment_interval`、`split_method` 等。`narrator` 的 `fragment_interval=0.28` 会实打实抬高句间停顿占比,不记就没法复现 |
|
|
39
|
+
| ③ | **稿件** | 字数口径(Unicode 码点、含不含标点与英文数字,与服务端 `_MAX_TEXT_LEN` 同口径)+ 稿件出处或哈希 + 字数 |
|
|
40
|
+
| ④ | **测量方法** | 音频总时长怎么取(`ffprobe` duration)、首尾静音算不算 |
|
|
41
|
+
| ⑤ | **结果两个数 + 样本数 + 日期** | **挂钟语速**(写稿用)与**有效语速 / 停顿占比**(注册表口径),样本条数,标定日期 |
|
|
42
|
+
|
|
43
|
+
两条禁令:
|
|
44
|
+
|
|
45
|
+
- **MUST NOT 再写「(TTS 实测)」这类无主体、无出处的括注**。任何写进图纸的语速数字,
|
|
46
|
+
要么能指到一条满足上表的档案,要么明确标注为「派生值 / 缺省值」。
|
|
47
|
+
(这条的由来:`SKILL.md` 的「200-240 字/分钟(TTS 实测,语速快的音色偏 270)」是
|
|
48
|
+
**一次性写入、无出处**——`git log -S` 只命中 skill 首发那一个 commit,归档 change 里 grep 零命中。)
|
|
49
|
+
- **单点标定 MUST NOT 外推到其它引擎的音色**。240 那次是 volc 单点标定,与自训 gpt_sovits 的
|
|
50
|
+
`narrator` 没有任何关系。
|
|
51
|
+
|
|
52
|
+
## 三、已标定档案
|
|
53
|
+
|
|
54
|
+
> ⚠️ **实测与派生逐条标注区分**,MUST NOT 混着读。本节的独立真机实测只有 §3.4(云引擎 volc 一条音色)与 §3.5(自训 `narrator`),
|
|
55
|
+
> §3.1 是注册表口径复算、§3.2 是派生表,**MUST NOT 宣称「已按新口径标定过全库」**。
|
|
56
|
+
|
|
57
|
+
### 3.1 `narrator`(**单点实测 · 未覆盖全库**)
|
|
58
|
+
|
|
59
|
+
| 项 | 值 |
|
|
60
|
+
|---|---|
|
|
61
|
+
| ① 音色 / 引擎 | `narrator`(`ext_code=narrator`)/ 自训 gpt_sovits |
|
|
62
|
+
| ② 合成参数 | `speed=1.0`、`fragment_interval=0.28` |
|
|
63
|
+
| ③ 稿件 | 见来源件 `fix-speech-rate-calibration`(注册表标定样本,字数口径未逐条留痕 —— **这一格是弱项**,2026-09-16 已由 §3.5 用五项齐备的独立样本补上) |
|
|
64
|
+
| ④ 测量 | 注册表 `acoustic` 口径(有效语速 + 停顿占比) |
|
|
65
|
+
| ⑤ 结果 | 有效语速 `rate = 379.7`、停顿占比 `pause = 0.08` ⇒ **挂钟 ≈ 349.3 字/分**;日期 2026-09-02(复算) |
|
|
66
|
+
|
|
67
|
+
### 3.2 全库 49 条 zh-CN 音色(**派生值,非逐条实测**)
|
|
68
|
+
|
|
69
|
+
`voice_registry.json` 55 条中 49 条带 `acoustic.rate`,据 `挂钟 = rate × (1 − pause)` 派生:
|
|
70
|
+
|
|
71
|
+
| 口径 | min | 中位 | max |
|
|
72
|
+
|---|---|---|---|
|
|
73
|
+
| 有效语速(`rate`,注册表原值) | 309.77 | 361.13 | 427.47 |
|
|
74
|
+
| **挂钟语速**(扣停顿后,写稿用) | 222.02 | **308.66** | — |
|
|
75
|
+
|
|
76
|
+
**落进 200–240 区间的:0 条。低于旧图纸所称上限 270 的:0 条。** 旧口径不是「偏保守」,是全库无一命中。
|
|
77
|
+
|
|
78
|
+
### 3.3 260902 真机三条旅拍片(**复盘记录,未逐条复算**)
|
|
79
|
+
|
|
80
|
+
实测 **316–342 字/分**(挂钟口径),与 3.1 派生的 349.3 同量级、互为旁证。
|
|
81
|
+
本条**不满足** §二 的五项(缺 ②③④ 的逐条留痕),故只作旁证、MUST NOT 单独当口径依据。
|
|
82
|
+
|
|
83
|
+
### 3.4 `volc_zh_male_cixingjieshuonan_uranus_bigtts`(**五项齐备 · 双样本实测**)
|
|
84
|
+
|
|
85
|
+
| 项 | 值 |
|
|
86
|
+
|---|---|
|
|
87
|
+
| ① 音色 / 引擎 | 磁性解说男声 2.0 `volc_zh_male_cixingjieshuonan_uranus_bigtts` / 火山引擎 `volcengine`(云引擎,非自训) |
|
|
88
|
+
| ② 合成参数 | `speed` 未传(= 默认 1.0);`fragment_interval` **不适用**——云引擎音色不受理该参数;`split_method` 走服务端默认 |
|
|
89
|
+
| ③ 稿件 | 两稿,Unicode 码点口径(含标点与英文数字)。① 凯奇坎 823 码点 `sha256:fd4e4f0efaabdfa1…` ② 黄石 904 码点 `sha256:9ce70f69b9d00f20…` |
|
|
90
|
+
| ④ 测量 | `ffprobe -show_entries format=duration` 取 wav 总时长,**首尾静音计入**(挂钟口径的定义即如此) |
|
|
91
|
+
| ⑤ 结果 | 稿① 823 / 230.40s = **214.3**;稿② 904 / 248.33s = **218.4**;合并 1727 / 478.73s = **216.4 字/分**。样本 2 条,日期 2026-09-03 |
|
|
92
|
+
|
|
93
|
+
**这条记录的价值不在它自己,在它顺手验了 §3.2 那张派生表。**
|
|
94
|
+
注册表给这条音色 `rate=321.77 / pause=0.31`,按 `挂钟 = rate × (1 − pause)` 派生得 **222.0**;
|
|
95
|
+
两次实测 214.3 / 218.4,偏 **−3.5% / −1.6%**。
|
|
96
|
+
§3.2 的 49 条派生值此前**从未被任何实测检验过**(3.1 是注册表自身口径的复算,不是独立测量),
|
|
97
|
+
本条是第一次拿真机音频去撞那条公式,**没撞坏**。派生表因此从「未经检验的推算」升格为「有一个实测锚点的推算」——
|
|
98
|
+
仍 MUST NOT 宣称全库已标定,但对**云引擎 volc 这一档**,派生值可以当估值用,误差量级 <5%。
|
|
99
|
+
|
|
100
|
+
⚠️ 另记一条选音色时该知道的事实:这条音色的 `pause=0.31` 是**全库最高**,挂钟 222.0 正是 §3.2 那张表的
|
|
101
|
+
`min` 值本人。同一份稿子交给它,比交给缺省 330 长 **48%**,比交给 `narrator`(349.3)长 **57%**。
|
|
102
|
+
写稿时 MUST 按它自己的挂钟值反推字数,照缺省 330 写会让成片直接长出三成。
|
|
103
|
+
|
|
104
|
+
### 3.5 `narrator`(**五项齐备 · 双样本实测 · 自训引擎首个独立锚点**)
|
|
105
|
+
|
|
106
|
+
| 项 | 值 |
|
|
107
|
+
|---|---|
|
|
108
|
+
| ① 音色 / 引擎 | `narrator` / 自训 gpt_sovits(生产环境 2026-09-16,CLI 1.1.7 `gtrk tool audio_tts_clone --speaker narrator`) |
|
|
109
|
+
| ② 合成参数 | `speed` 未传(= 1.0);`fragment_interval` 样本 a 未传(跟随音色预设 **0.28**)、样本 b 显式 `--fragment-interval 0.2`;`split_method` 走服务端默认 |
|
|
110
|
+
| ③ 稿件 | 同一稿两跑,Unicode 码点口径(含标点)**261** 码点,黄石公园解说短稿 `sha256:a1d8eda9b2e44c40…`(正文与产物在工作区根 `_evidence/tts_pause_2026-09-16/`) |
|
|
111
|
+
| ④ 测量 | wav 总时长 = 采样数 ÷ 采样率,**首尾静音计入**;停顿占比按 infra `add-tts-fragment-interval-param` 5.1 法(0.1 s 窗 RMS < 2% 峰值、连续 ≥0.2 s 计一段) |
|
|
112
|
+
| ⑤ 结果 | 样本 a:261 / 44.60 s = **351.1 字/分**,停顿占比 7.0% ⇒ 有效 ≈ 377.5;样本 b:261 / 43.80 s = **357.5 字/分**,停顿占比 4.3% ⇒ 有效 ≈ 373.6。样本 2 条(同稿两参数),日期 2026-09-16;任务 114462641666715654 / 114462754220863494 |
|
|
113
|
+
|
|
114
|
+
**这条记录的价值同 §3.4:拿真机音频去撞注册表口径,这次撞的是自训那一档。**
|
|
115
|
+
catalog 给 `narrator` 的派生挂钟是 349.3(`rate=379.7 × (1 − 0.08)`),样本 a 实测 351.1,偏 **+0.5%**;
|
|
116
|
+
有效语速 377.5 对注册表 379.7,偏 **−0.6%**。§3.2 那张派生表此前只有 volc 一个实测锚点(§3.4),
|
|
117
|
+
现在自训引擎也有了一个,两档都落在 5% 内。仍 MUST NOT 外推到其它自训音色(各自 `pause` 不同);
|
|
118
|
+
也要记住本稿只有 45 s,短稿的停顿占比对首尾静音更敏感,长稿回校(§五)攒到第三条再谈收敛。
|
|
119
|
+
|
|
120
|
+
⚠️ 顺手得到的一个事实:`fragment_interval` 从预设 0.28 压到 0.2,挂钟语速只快 **1.8%**(44.6 → 43.8 s)。
|
|
121
|
+
写稿折算时这档参数可以忽略;它改的是听感(静音总量 −38%),拿它去「调时长」没有意义。
|
|
122
|
+
|
|
123
|
+
## 四、缺省值 330 是怎么来的,用在哪儿
|
|
124
|
+
|
|
125
|
+
- **取值**:落在全库挂钟中位 **308.7** 与 `narrator` **349.3** 之间,覆盖真机 **316–342** 区间的中部;
|
|
126
|
+
- **性质**:**缺省估值,不是任何一条音色的实测值**。用它折算时 SHALL 在交付说明里明示这一点;
|
|
127
|
+
- **适用边界**:只适用**中文**、**正常语速档**、**未加 `--speed`** 的合成。
|
|
128
|
+
换引擎、换语种、动了 `--speed` / `fragment_interval` 的,一律回 §二 重新标定,MUST NOT 沿用;
|
|
129
|
+
- **怎么退役**:终局 (C) 上线(catalog 投影出 `acoustic` 或派生只读字段)后,
|
|
130
|
+
取值路径改为「读 catalog 字段」,330 只在字段缺失时兜底。
|
|
131
|
+
|
|
132
|
+
## 五、回校怎么攒样本(`SKILL.md` §五 ④′)
|
|
133
|
+
|
|
134
|
+
TTS 合成完成后,稿件字数与音频实际时长都已在手(`project init --tts-task` 本就要读它):
|
|
135
|
+
|
|
136
|
+
1. 算 **实测挂钟语速 = 稿件字数 ÷ 音频实际时长**;
|
|
137
|
+
2. 与写稿所用估值比对,**偏差 >15% 在交付汇报里点名**(报「估 X / 实测 Y / 偏 Z%」);
|
|
138
|
+
3. 按 §二 五项格式**追加一条**进 §三 —— 每跑一条片就攒一条样本,「孤证」这个病从结构上被治掉;
|
|
139
|
+
4. **MUST NOT 自动改稿、MUST NOT 自动重跑 TTS**:改稿要从配音步重跑、重付 TTS 费用,返工与否由用户拍板。
|
|
@@ -61,7 +61,7 @@ gtrk subtitle lay --project "<工程>" --style <样式> --color <色> --json
|
|
|
61
61
|
|
|
62
62
|
> **停顿太长时**:自训音色加 `--fragment-interval 0.2`(合成时就对);云引擎音色**不支持**该参数(传了会报错,不会静默忽略),改在合成后跑 `gtrk audio tighten --project <工程>` 收紧句间停顿(纯本地零计费;只压跨句界的停顿,句内换气与原声引用段不动)。
|
|
63
63
|
|
|
64
|
-
配方口径(mark-weight 0.3 / BGM 0.10 宁低勿高 / gap-fill fast / 句界吸附缺省)与旅拍图纸 §五 同源,引用不复制。派单车道按内容走(FILM_BROLL 为主,可派 MG / AI
|
|
64
|
+
配方口径(mark-weight 0.3 / BGM 0.10 宁低勿高 / gap-fill fast / 句界吸附缺省)与旅拍图纸 §五 同源,引用不复制。派单车道按内容走(FILM_BROLL 为主,可派 MG / AI 情景动画——AI 情景动画描述稿走 `/gtrk-ai-drama`,外部平台出片手动回铺)。
|
|
65
65
|
|
|
66
66
|
## 三、检查点①(必停一次)
|
|
67
67
|
|