@gitruck/cli 1.1.10 → 1.2.1
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 +21 -0
- package/CHANGELOG.md +72 -0
- package/README.en.md +14 -5
- package/README.md +14 -5
- package/dist/index.js +226 -226
- package/package.json +2 -2
- package/skills/gtrk-matrix/SKILL.md +3 -0
- package/skills/gtrk-narration/SKILL.md +6 -0
- package/skills/gtrk-talking-head/SKILL.md +38 -0
- package/skills/gtrk-tools/SKILL.md +3 -2
- package/skills/gtrk-travel-recap/SKILL.md +7 -0
- package/skills/gtrk-vlog-docu/SKILL.md +3 -0
- package/skills/gtrk-voiceover/SKILL.md +3 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gitruck/cli",
|
|
3
|
-
"version": "1.1
|
|
3
|
+
"version": "1.2.1",
|
|
4
4
|
"description": "同合云成片流水线 CLI —— agent 驱动云端任务、产物拉回本地、三方工程文件(客户端/剪映/PR)互通。",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Gitruck (同合云)",
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
"build": "bun build ./src/index.ts --target=node --minify --outfile dist/index.js",
|
|
51
51
|
"typecheck": "tsc --noEmit",
|
|
52
52
|
"prepublishOnly": "npm run typecheck && npm test && bun run build",
|
|
53
|
-
"test": "esbuild src/lib/compliance-notice.ts src/lib/config.ts src/lib/crash-report.ts src/lib/enum-catalog.ts src/lib/first-run-tutorial.ts src/lib/desktop-client-hint.ts src/lib/command-path.ts src/lib/user-path.ts src/lib/runtime-channel.ts src/lib/self-install.ts src/lib/chunk-upload.ts src/lib/upload-cache.ts src/lib/upload-submit.ts src/lib/render.ts src/lib/cloud.ts src/lib/materialize.ts src/lib/jianying.ts src/lib/clip-brief.ts src/lib/media.ts src/lib/projection.ts src/lib/reproject.ts src/lib/splitdoc.ts src/lib/gtrk-writeback.ts src/lib/gtrk-patch.ts src/lib/frame-domain.ts src/lib/clock-adapter.ts src/lib/gtrk-invariants.ts src/lib/column-config.ts src/lib/third-party-catalog.ts src/lib/mg-adopt.ts src/lib/mg-registry.ts src/lib/matrix.ts src/lib/matrix-material.ts src/lib/matrix-fetch.ts src/lib/matrix-lay.ts src/lib/arrange-metering.ts src/lib/arrange-wire.ts src/lib/arrange-apply.ts src/lib/arrange-client.ts src/lib/arrange-gate.ts src/lib/arrange-decision-pin.ts src/lib/arrange-qc.ts src/lib/arrange-qc-bind.ts src/lib/rate-limit-wait.ts src/lib/embed-client.ts src/lib/describe.ts src/lib/highlight-rubric.ts src/lib/local-index.ts src/lib/index-decode.ts src/lib/local-search.ts src/lib/qc.ts src/lib/alignment-qc.ts src/lib/bgm-history.ts src/lib/image-move.ts src/lib/cloud-render-guard.ts src/lib/outdir-guard.ts src/lib/landing-wait.ts src/lib/material-integrity.ts src/lib/solid-png.ts src/lib/mg-lint.ts src/lib/mg-lay.ts src/lib/mg-render.ts src/lib/particle-qtrle.ts src/lib/tool-descriptors.ts src/lib/tool-runner.ts src/lib/tool-pricing.ts src/lib/transcript.ts src/lib/runtime-assets.ts src/lib/subtitle-lay.ts src/lib/caption-align.ts src/lib/subtitle-line-split-client.ts src/lib/audio-align.ts src/lib/audio-tighten.ts src/lib/ai-drama-lay.ts --bundle --platform=node --format=esm --external:bun:sqlite --outdir=.test-build --out-extension:.js=.mjs && esbuild src/commands/split.ts --bundle --platform=node --format=esm --outdir=.test-build --out-extension:.js=.mjs && esbuild src/commands/patch.ts --bundle --platform=node --format=esm --external:commander --outfile=.test-build/patch-cmd.mjs && esbuild src/commands/matrix.ts --bundle --platform=node --format=esm --external:bun:sqlite --outfile=.test-build/matrix-cmd.mjs && esbuild src/commands/mg.ts --bundle --platform=node --format=esm --outfile=.test-build/mg-cmd.mjs && esbuild src/commands/tool.ts --bundle --platform=node --format=esm --outfile=.test-build/tool-cmd.mjs && esbuild src/commands/transcript.ts --bundle --platform=node --format=esm --outfile=.test-build/transcript-cmd.mjs && esbuild src/commands/project.ts --bundle --platform=node --format=esm --outfile=.test-build/project-cmd.mjs && esbuild src/commands/audio.ts --bundle --platform=node --format=esm --outfile=.test-build/audio-cmd.mjs && esbuild src/commands/subtitle.ts --bundle --platform=node --format=esm --outfile=.test-build/subtitle-cmd.mjs && esbuild src/commands/ai-drama.ts --bundle --platform=node --format=esm --outfile=.test-build/ai-drama-cmd.mjs && esbuild src/commands/feedback.ts --bundle --platform=node --format=esm --outfile=.test-build/feedback-cmd.mjs && esbuild src/commands/music-visualizer.ts --bundle --platform=node --format=esm --external:commander --outfile=.test-build/music-visualizer-cmd.mjs && esbuild src/commands/long2short.ts --bundle --platform=node --format=esm --external:commander --outfile=.test-build/long2short-cmd.mjs && esbuild src/commands/oralcut.ts --bundle --platform=node --format=esm --external:commander --outfile=.test-build/oralcut-cmd.mjs && esbuild src/commands/oralcut-result.ts --bundle --platform=node --format=esm --external:commander --outfile=.test-build/oralcut-result-cmd.mjs && esbuild src/commands/skills.ts --bundle --platform=node --format=esm --outfile=.test-build/skills-cmd.mjs && esbuild src/commands/qc.ts --bundle --platform=node --format=esm --external:commander --external:bun:sqlite --outfile=.test-build/qc-cmd.mjs && esbuild src/lib/convert/ir_to_jsx.ts src/lib/convert/ir_to_am.ts src/lib/convert/ir_to_nv.ts src/lib/convert/am_parse.ts src/lib/convert/nv_parse.ts src/lib/convert/parse.ts src/lib/convert/download.ts src/lib/convert/bake_ops.ts --bundle --platform=node --format=esm --outdir=.test-build/convert --out-extension:.js=.mjs && esbuild src/lib/mad/selector.ts src/lib/mad/beat.ts src/lib/mad/scan.ts src/lib/mad/data.ts src/lib/mad/pool.ts src/lib/mad/cloud-beat.ts src/lib/mad/mad.ts --bundle --platform=node --format=esm --outdir=.test-build/mad --out-extension:.js=.mjs && node --import ./test/helpers/test-home.mjs --test \"test/*.test.mjs\"",
|
|
53
|
+
"test": "esbuild src/lib/compliance-notice.ts src/lib/config.ts src/lib/crash-report.ts src/lib/enum-catalog.ts src/lib/first-run-tutorial.ts src/lib/desktop-client-hint.ts src/lib/command-path.ts src/lib/user-path.ts src/lib/runtime-channel.ts src/lib/self-install.ts src/lib/chunk-upload.ts src/lib/upload-cache.ts src/lib/upload-submit.ts src/lib/render.ts src/lib/cloud.ts src/lib/materialize.ts src/lib/jianying.ts src/lib/clip-brief.ts src/lib/media.ts src/lib/projection.ts src/lib/reproject.ts src/lib/splitdoc.ts src/lib/gtrk-writeback.ts src/lib/gtrk-patch.ts src/lib/frame-domain.ts src/lib/clock-adapter.ts src/lib/gtrk-invariants.ts src/lib/column-config.ts src/lib/third-party-catalog.ts src/lib/mg-adopt.ts src/lib/mg-registry.ts src/lib/matrix.ts src/lib/matrix-material.ts src/lib/matrix-fetch.ts src/lib/matrix-lay.ts src/lib/arrange-metering.ts src/lib/arrange-wire.ts src/lib/arrange-apply.ts src/lib/arrange-client.ts src/lib/arrange-gate.ts src/lib/arrange-decision-pin.ts src/lib/arrange-qc.ts src/lib/arrange-qc-bind.ts src/lib/rate-limit-wait.ts src/lib/embed-client.ts src/lib/describe.ts src/lib/highlight-rubric.ts src/lib/local-index.ts src/lib/index-decode.ts src/lib/local-search.ts src/lib/qc.ts src/lib/alignment-qc.ts src/lib/bgm-history.ts src/lib/image-move.ts src/lib/cloud-render-guard.ts src/lib/outdir-guard.ts src/lib/landing-wait.ts src/lib/material-integrity.ts src/lib/solid-png.ts src/lib/mask-raster.ts src/lib/mg-lint.ts src/lib/mg-lay.ts src/lib/mg-render.ts src/lib/particle-qtrle.ts src/lib/tool-descriptors.ts src/lib/tool-runner.ts src/lib/tool-pricing.ts src/lib/transcript.ts src/lib/runtime-assets.ts src/lib/subtitle-lay.ts src/lib/caption-align.ts src/lib/subtitle-line-split-client.ts src/lib/audio-align.ts src/lib/audio-tighten.ts src/lib/ai-drama-lay.ts src/lib/pip-lay.ts --bundle --platform=node --format=esm --external:bun:sqlite --outdir=.test-build --out-extension:.js=.mjs && esbuild src/commands/split.ts --bundle --platform=node --format=esm --outdir=.test-build --out-extension:.js=.mjs && esbuild src/commands/patch.ts --bundle --platform=node --format=esm --external:commander --outfile=.test-build/patch-cmd.mjs && esbuild src/commands/matrix.ts --bundle --platform=node --format=esm --external:bun:sqlite --outfile=.test-build/matrix-cmd.mjs && esbuild src/commands/mg.ts --bundle --platform=node --format=esm --outfile=.test-build/mg-cmd.mjs && esbuild src/commands/tool.ts --bundle --platform=node --format=esm --outfile=.test-build/tool-cmd.mjs && esbuild src/commands/transcript.ts --bundle --platform=node --format=esm --outfile=.test-build/transcript-cmd.mjs && esbuild src/commands/project.ts --bundle --platform=node --format=esm --outfile=.test-build/project-cmd.mjs && esbuild src/commands/audio.ts --bundle --platform=node --format=esm --outfile=.test-build/audio-cmd.mjs && esbuild src/commands/subtitle.ts --bundle --platform=node --format=esm --outfile=.test-build/subtitle-cmd.mjs && esbuild src/commands/ai-drama.ts --bundle --platform=node --format=esm --outfile=.test-build/ai-drama-cmd.mjs && esbuild src/commands/feedback.ts --bundle --platform=node --format=esm --outfile=.test-build/feedback-cmd.mjs && esbuild src/commands/music-visualizer.ts --bundle --platform=node --format=esm --external:commander --outfile=.test-build/music-visualizer-cmd.mjs && esbuild src/commands/long2short.ts --bundle --platform=node --format=esm --external:commander --outfile=.test-build/long2short-cmd.mjs && esbuild src/commands/oralcut.ts --bundle --platform=node --format=esm --external:commander --outfile=.test-build/oralcut-cmd.mjs && esbuild src/commands/oralcut-result.ts --bundle --platform=node --format=esm --external:commander --outfile=.test-build/oralcut-result-cmd.mjs && esbuild src/commands/skills.ts --bundle --platform=node --format=esm --outfile=.test-build/skills-cmd.mjs && esbuild src/commands/qc.ts --bundle --platform=node --format=esm --external:commander --external:bun:sqlite --outfile=.test-build/qc-cmd.mjs && esbuild src/lib/convert/ir_to_jsx.ts src/lib/convert/ir_to_am.ts src/lib/convert/ir_to_nv.ts src/lib/convert/am_parse.ts src/lib/convert/nv_parse.ts src/lib/convert/parse.ts src/lib/convert/download.ts src/lib/convert/bake_ops.ts --bundle --platform=node --format=esm --outdir=.test-build/convert --out-extension:.js=.mjs && esbuild src/lib/mad/selector.ts src/lib/mad/beat.ts src/lib/mad/scan.ts src/lib/mad/data.ts src/lib/mad/pool.ts src/lib/mad/cloud-beat.ts src/lib/mad/mad.ts --bundle --platform=node --format=esm --outdir=.test-build/mad --out-extension:.js=.mjs && node --import ./test/helpers/test-home.mjs --test \"test/*.test.mjs\"",
|
|
54
54
|
"test:linux": "node scripts/test-linux.mjs",
|
|
55
55
|
"openspec:gate": "node openspec/gate.mjs",
|
|
56
56
|
"mg-registry:snapshot": "node scripts/mg-registry-snapshot.mjs"
|
|
@@ -25,6 +25,7 @@ description: B-roll 检索铺轨编排手册——成片管线里第一个铺的
|
|
|
25
25
|
## 配方库 v1(起手式,可变奏可自创)
|
|
26
26
|
|
|
27
27
|
> 配方前置都一样:能跑 `gtrk` CLI;本地素材类配方先 `gtrk matrix index --dirs <素材夹>` 建索引。每条命令都带 `--json`。
|
|
28
|
+
> ⚠️ **路径里有英文半角逗号**(`Bears, Salmon and Adventure` 这种)时 `--dirs` / `--materials` MUST **重复传**(`--dirs "A" --dirs "B"`,累加不覆盖),别塞进一串里 —— 缺省按半角逗号分隔。整串在盘上存在时会自动不拆,中文全角「,」从不参与拆分。
|
|
28
29
|
|
|
29
30
|
### 配方 A · 纯匹配铺轨(默认主路)
|
|
30
31
|
|
|
@@ -427,6 +428,8 @@ gtrk matrix --project "<split 产物目录>" [--lay N] [--score-floor F] [--top-
|
|
|
427
428
|
| 只想先看清单不铺轨 | `--lay 0`(只产 plan);之后铺 = `matrix lay`(不重新检索、不重新烧配额) |
|
|
428
429
|
| **报「候选轨已被你编辑过」拒铺** | 保护不是故障:工程零改动,plan 照常产出。① opencut 处置那条轨后重跑;② 用户明确点头 → `--force-relay`(raw 登记删除不可恢复,先说后果) |
|
|
429
430
|
| **`matrix lay` 报「plan 校验未通过」** | 你把不可编辑面改坏了(报错逐条指名字段):按 §plan 编辑口径改回来重跑;`local_path 路径无效` 多半是可移动盘没挂载或真把路径改了 |
|
|
431
|
+
| **describe 明明跑过、这轮又扣费** | 多半是**服务端判据升级**:`describes` 缓存键并入判据版本(`DESCRIBE_CRITERIA_VERSION`),旧口径条目在新版本下不算命中,会重跑重计费。`--json` 的 `cached_stale_criteria` 就是这一栏的张数(是 `called` 的子集,不是额外开销)。旧产物不删、仍可读。**属预期,不是缺陷** |
|
|
432
|
+
| **`matrix index` 报 `0/0`(一个素材都没枚举到)** | 先看两件事:① `--dirs` 的路径里有没有**英文半角逗号**——有就改成重复传(见文首前置);② 素材夹里有没有**断链**(失效软链接)。两条都不是再查路径本身对不对 |
|
|
430
433
|
| 报「本地索引不存在」 | 先 `gtrk matrix index --dirs <...>`;已建过则查 `--dirs` 与建索引目录是否一致、可移动盘是否挂载 |
|
|
431
434
|
| 换电脑用不了索引 | 索引跨机不可移植(本机缓存),新机重跑 `matrix index` 即可 |
|
|
432
435
|
| 预览看不了 / 想「重签」 | 别为此重跑铺轨:`preview_url`/`cover_url` 不带签名不过期;带签名 24h 过期的是原片 `url`——工程内走客户端「确认原片」重签;**脱离工程要原片落本地走 `gtrk matrix fetch <clip_id...>`(免费重签+下载,见「精剪补素材」节)** |
|
|
@@ -207,6 +207,9 @@ QC 反算重铺);② 段带 `cuts`,端点残片收缩生效;③ 段带 `
|
|
|
207
207
|
# ① 索引前置(第一步就起,不是可选项——它是质量信号的载体,见 §三 代价表)
|
|
208
208
|
# 4K 长片索引慢,未提速期**与写稿/TTS/检查点①并行跑**,别串行干等
|
|
209
209
|
gtrk matrix index --dirs "<这一部片的绝对路径>" & # 后台起,写稿同时跑(索引侧同口径:也钉单片)
|
|
210
|
+
# ⚠️ **后台起就看不见失败**:全域零枚举现在是**硬失败**(退出码 1),而 `&` 把它吞了 ——
|
|
211
|
+
# 回头 MUST 看那一行的 `materials.total` 与 `per_dir`,别等到检索阶段才发现索引是空的。
|
|
212
|
+
# 报 0/0 先看两件事:路径里有没有**英文半角逗号**(有就把 --dirs 重复传,别塞一串)、素材夹里有没有断链。
|
|
210
213
|
gtrk transcript "<长片>" --lang <开工⑦所答语种> --json # 影视/游戏类:台词与时码双锚(可选)
|
|
211
214
|
# ↑ 语种取开工⑦所答,MUST NOT 拿缺省顶上去 —— 但「传错就白花钱」只在**非中文**这一档成立;
|
|
212
215
|
# 粤语 SHOULD 如实填 zh-HK(元数据诚实 + 备链路切换),当前链路下对粤语无差别:
|
|
@@ -242,6 +245,9 @@ gtrk matrix lay --project "<工程>" --mark-weight 0.3 --highlight-weight 0.2 --
|
|
|
242
245
|
# BGM 是带人声歌曲(audio_type:"song")→ MUST 下载 accompaniment_url 伴奏版上轨,
|
|
243
246
|
# 不得用 download_url 原曲(人声与配音打架,260827 美食批踩坑)
|
|
244
247
|
gtrk mg --project "<工程>" --json
|
|
248
|
+
# --beat-align 的高潮点取自 split.beats 的 narrative / container_stage(升华段 → 容器转折 → 回扣段);
|
|
249
|
+
# 拆分稿没带这两个字段 ⇒ 落 0.75×全片兜底档,**CLI 会明示那是猜的**。不接受就用 --climax <轨秒> 指定。
|
|
250
|
+
# 两侧都够长时零平铺(恰好 1 个 clip);不够长才按小节线平铺补齐、接缝吸附 downbeat。
|
|
245
251
|
gtrk audio lay --project "<工程>" --file "<bgm>" --volume 0.1 --beat-align --json
|
|
246
252
|
gtrk subtitle lay --project "<工程>" --style <样式> --color <色> --json
|
|
247
253
|
```
|
|
@@ -31,6 +31,8 @@ description: 通用口播视频创作图纸(口播链)——把一条或一
|
|
|
31
31
|
| ④ | 毛片几何 | ffprobe | 画幅随片(**非拍板项**,与旅拍不同——那边是无中生有须拍板画幅);非标帧率会被吸附到标准值,属预期 |
|
|
32
32
|
| ⑤ | **B-roll 素材来源**(主理人 2026-08-27 真机挑刺拍板) | **问用户,MUST NOT 硬塞**:有没有本地素材文件夹(要路径)?要不要用云端素材填充? | §五 matrix 走法三选一:本地(`--local --dirs`)/ 云端 / **都不要 = 不铺 B-roll**(纯 A_ROLL + MG 字卡也是完整成片形态) |
|
|
33
33
|
|
|
34
|
+
| ⑥ | **有没有与人像同步录制的屏录 / 第二机位?** | **问用户,MUST NOT 代猜**(看目录里有没有同时段的屏录 / 另一机位文件只是提示,不是答案)。有则追问三样:画中画形状(圆 / 圆角方 / 爱心 / 菱形 / 星形,缺省圆)、位置(缺省右下)、大小(缺省约 28% 画幅高) | 走不走 §二′ 双源画中画(`gtrk pip lay`);屏录题材 **⑤ 默认答「不铺 B-roll」**(屏幕本身即画面) |
|
|
35
|
+
|
|
34
36
|
> ⟲ **推荐面(公约 §三‴)**:问答收口时多问一句「要不要看看第三方 skill?」,不列名;题材命中场景触发词才多 1–2 句定向推(`gtrk skills recommend --scene <id> --json` 取 tier 最高者,各给一句为什么),用户追问才展开完整块;轻提加定向合计不超三句、同会话同场景只推一次、答「不要」零动作。
|
|
35
37
|
|
|
36
38
|
## 二、双轨收音:对轨 → 换轨(本图纸最大的新东西)
|
|
@@ -68,6 +70,42 @@ gtrk audio align --resume "<名>_align.gtrk"
|
|
|
68
70
|
- **内录不丢弃**:原毛片原地不动就是保底轨,外录出问题(爆音/断录)随时回退重跑。
|
|
69
71
|
- 闭环:oralcut 产的工程本来就进客户端 ⇒ **对齐效果(唇音同步)最终以客户端预览为准**——兜底与验收用同一个工具。
|
|
70
72
|
|
|
73
|
+
## 二′、屏录 / 第二机位:双源画中画(`gtrk pip lay`)
|
|
74
|
+
|
|
75
|
+
真实的「讲软件 / 讲代码 / 讲课件」口播几乎都是**两条文件同步录**:屏幕一条、人像一条。粗剪只剪人像;本零件把粗剪的**每个切点镜像到屏录**,
|
|
76
|
+
铺出「屏录满幅轨 + 人像画中画副本轨」,画中画带形状蒙版 / 圆角,客户端打开即所见。**纯本地、零计费。**
|
|
77
|
+
|
|
78
|
+
### 链路位置
|
|
79
|
+
|
|
80
|
+
对轨(§二,可选)→ `oralcut` → **检查点①** → **`gtrk pip lay`** → 包装(字卡 / BGM / 字幕)→ 客户端出片。
|
|
81
|
+
`pip lay` **不新增必停点**——铺完让用户在客户端看一眼即可;只有低置信兜底会停(那是数据正确性问题,两种模式都停)。
|
|
82
|
+
|
|
83
|
+
### 一条命令
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
gtrk pip lay --project "<口播工程目录>" --companion "<屏录.mp4>" \
|
|
87
|
+
[--shape ellipse|rectangle|heart|diamond|star|none] [--feather 10] [--border-radius 24] \
|
|
88
|
+
[--anchor bottom-right] [--scale 0.28] [--margin 40] [--offset <秒>] [--dry-run]
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
自动分支:以人像为参考、屏录为待对齐做互相关,置信度 ≥ 阈值直接铺,回执逐颗打印偏移与钳位(**打印数字,不打「已验证」**);
|
|
92
|
+
置信度不足 → 产 `<屏录名>_pip_align.gtrk`,让用户在客户端把「伴随源」轨拖到与人像画面对齐后保存,再:
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
gtrk pip lay --project "<口播工程目录>" --resume "<屏录名>_pip_align.gtrk"
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### 四条纪律
|
|
99
|
+
|
|
100
|
+
- **录制规约**(开工时就说):两条文件同步录;**屏录 MUST 带麦克风音轨**(互相关的参照,无麦只能 `--offset` 或客户端拖齐);开录后拍一下手。
|
|
101
|
+
- **主轨不动**:人像仍是主轨(`split` / `subtitle lay` 对 transcript 的锚不变),屏录与画中画都是叠加轨;画中画副本恒静音,人声由主轨承担。
|
|
102
|
+
- **屏录比人像短 / 晚开录**:对应段留空、回执点名毫秒数,MUST NOT 拉伸或变速补齐;成片该段只见人像主轨——这是如实,不是缺陷。
|
|
103
|
+
- **幂等**:改了参数直接重跑,自产轨剥旧重铺;用户在客户端动过的画中画 clip 会被保留并点名,不会被覆盖。
|
|
104
|
+
|
|
105
|
+
### 出片口径
|
|
106
|
+
|
|
107
|
+
客户端本地导出(所见即所得)/ `gtrk render`(本地合成画中画几何与蒙版)/ 导剪映(圆窗 / 圆角进草稿;**菱形剪映无对应会跳过并明示**)。
|
|
108
|
+
|
|
71
109
|
## 三、多段一期:concat-first
|
|
72
110
|
|
|
73
111
|
一期内容由多段毛片构成时(分场景拍摄、换机位重启录制),**先拼后剪**:
|
|
@@ -19,13 +19,13 @@ description: gtrk 单点工具与媒体转换能力的调用向导,覆盖 `gtr
|
|
|
19
19
|
| `image_matting` | 「给图片抠像 / 抠出主体 / 去背景 / 出透明 png」 | 单张图片 | 透明背景 png | 运行前实时查询 | 已上线 |
|
|
20
20
|
| `image_blackborder_remove` | 「图片去黑边 / 裁掉四周黑边 / 保留有效画面」 | 单张本地图片 | 去黑边图片 | 运行前实时查询 | 已上线 |
|
|
21
21
|
| `image_canvas_adapt` | 「图片比例转换 / 调整画布尺寸 / 转成矩形或方形裁剪」 | 单张本地图片;模式只支持 `normal` / `rectangle` / `square` | 比例适配图片 | 运行前实时查询 | 已上线 |
|
|
22
|
-
| `image_purify` | 「清理我有权处理的图片水印 / 去掉 Logo 或叠加元素 /
|
|
22
|
+
| `image_purify` | 「清理我有权处理的图片水印 / 去掉 Logo 或叠加元素 / 图片净化 / 按我圈的框去掉台标」 | 单张本地图片(仅处理你有权处理的素材);可选按框直接去除 | 净化图片 | 运行前实时查询 | 已上线 |
|
|
23
23
|
| `video_matting` | 「视频抠像 / 视频去背景 / 出透明背景视频」 | 单条视频(≤10 分钟) | 透明背景 webm | 运行前实时查询 | 已上线 |
|
|
24
24
|
| `video_blackborder_remove` | 「视频去黑边 / 裁掉视频四周黑边 / 保留有效画面」 | 单条本地视频 | 去黑边视频 | 运行前实时查询 | 已上线 |
|
|
25
25
|
| `video_canvas_adapt` | 「视频比例转换 / 横竖屏适配 / 截取片段并转换画布」 | 单条本地视频;模式只支持 `normal` / `rectangle` / `square` | 比例适配视频 | 运行前实时查询 | 已上线 |
|
|
26
26
|
| `video_stabilizer` | 「视频防抖 / 稳定手持画面 / 去抖」 | 单条本地视频;方式 `fast` / `exp` / `turbo` | 防抖视频 | 运行前实时查询 | 已上线 |
|
|
27
27
|
| `video_vaporwave` | 「给视频加蒸汽波滤镜 / 复古滤镜 / 使用某个滤镜预设」 | 单条本地视频;滤镜名需精确 | 蒸汽波滤镜视频 | 运行前实时查询 | 已上线 |
|
|
28
|
-
| `video_purify` | 「清理我有权处理的视频水印 / 去字幕 /
|
|
28
|
+
| `video_purify` | 「清理我有权处理的视频水印 / 去字幕 / 只净化指定区域 / 只抹我圈的这块 / 只抹片头几秒的角标」 | 单条本地视频(仅处理你有权处理的素材);可选范围、方式、归一化 ROI 和带时间段的区域框 | 一条净化视频 | 运行前实时查询 | 已上线 |
|
|
29
29
|
| `video_upscale` | 「视频超分 / 低清视频放大 / 动漫视频变清晰」 | 单条本地视频(≤1 分钟);倍数 `2` / `3` / `4`,类型 `Reality` / `Anime` | 一条超分视频 | 运行前实时查询 | 已上线 |
|
|
30
30
|
| `video_interpolate` | 「视频补帧 / 提高帧率 / 让画面更流畅」 | 单条本地视频;倍数 `2` / `3` / `4`,不附加 1 分钟限制 | 一条插帧视频 | 运行前实时查询 | 已上线 |
|
|
31
31
|
| `video_segment` | 「机械分镜 / 按画面变动切分镜区间 / 场景切分」 | 单条本地视频;可选 `--detector content\|adaptive`、`--threshold` | 分镜区间结构 `result-output.json`(非下载文件) | 运行前实时查询 | 已上线 |
|
|
@@ -135,6 +135,7 @@ description: gtrk 单点工具与媒体转换能力的调用向导,覆盖 `gtr
|
|
|
135
135
|
- 视频防抖:`gtrk tool video_stabilizer ./clip.mp4 --stabilizer-method turbo --json`。支持 `fast`、`exp`、`turbo`;未传时由服务端使用 `turbo`,`exp` 只按实验方式转述,不承诺观感。
|
|
136
136
|
- 蒸汽波滤镜:`gtrk tool video_vaporwave ./clip.mp4 --vaporwave-filter "灼熱苦夏" --json`。滤镜名原样精确传递,不翻译、不猜别名;未传时 CLI 明确使用 `愈漸升溫`。
|
|
137
137
|
- 视频净化:`gtrk tool video_purify ./clip.mp4 --purify-scope custom --purify-method ffmpeg --purify-roi 0,0.78,1,0.2 --json`。ROI 是 `x,y,w,h` 归一化坐标,只能和 `custom` 同用;`raft` 仅支持 20 分钟以内视频,`ffmpeg` 不套用这个上限。只处理用户有权修改的素材,不宣称能还原被遮挡的原始内容。
|
|
138
|
+
- 按框直接去除:`gtrk tool video_purify ./clip.mp4 --purify-scope region --purify-region 0.8,0.02,0.18,0.08,0,5 --json`(图片把工具换成 `image_purify`、框只写 `x,y,w,h`)。`--purify-region` 可重复,最多 16 个框,视频框后可带 `start,end` 秒。`custom` 只去除框内识别到的文字;`region` 不做识别、**框内全部内容都会被处理(包括画面主体)**——用户要去的是图形台标、半透明图案或只在某段时间出现的角标时选 `region`,并提醒框越小越贴边效果越好。
|
|
138
139
|
- 视频超分:`gtrk tool video_upscale ./clip.mp4 --upscale-times 3 --upscale-type Anime --json`。输入最多 60 秒,放大后任一边超过 4000 px 会由服务端拒绝;这是实验性增强,不能承诺主观画质一定提升。
|
|
139
140
|
- 视频插帧:`gtrk tool video_interpolate ./clip.mp4 --interpolate-multiplier 3 --json`。支持 `2`、`3`、`4`,不套用旧总览里的 1 分钟限制;原视频任一边超过 4000 px 时由服务端拒绝。
|
|
140
141
|
|
|
@@ -244,6 +244,10 @@ gtrk transcript "<原片>" --lang <zh-CN 普通话 | zh-HK 粤语 | en-US | ja-J
|
|
|
244
244
|
# ↑ **MUST NOT 以「粤语语种传错」为由重跑转写**:la 进 ASR 缓存键(asr_result_cache.py:71-75),
|
|
245
245
|
# 换码必然 cache miss,白扣一次时长换回逐字段相同的请求与同一份结果。
|
|
246
246
|
# 原创场景改跑:gtrk matrix index --dirs "<素材夹>" && gtrk matrix describe --materials ...
|
|
247
|
+
# ↑ **这个 `&&` 现在真的会拦住**:全域零枚举(一个素材都没枚举到)是**硬失败**(退出码 1),
|
|
248
|
+
# `describe` 不会执行 —— 这是改对了:以前 index 报 0/0 也 exit 0,`describe` 会对着空清单空跑一趟。
|
|
249
|
+
# 报 0/0 先看两件事:路径里有没有**英文半角逗号**(有就把 --dirs 重复传 `--dirs "A" --dirs "B"`,累加不覆盖)、
|
|
250
|
+
# 素材夹里有没有断链。⚠️ 「个别素材处理失败」不算硬失败(那是既有 failed 计数口径,退出码仍 0)。
|
|
247
251
|
# ↑ 原创(自拍素材集)这一档**整夹即该片素材域,传夹正确**,不受 ⑦ 那条「钉单片」铁则约束——
|
|
248
252
|
# 那条治的是二创:一个夹里躺着几条互不相干的片,才会互相抢候选
|
|
249
253
|
|
|
@@ -307,6 +311,9 @@ gtrk mg --project "<工程目录>" --json
|
|
|
307
311
|
# BGM 是带人声歌曲(audio_type:"song")→ MUST 下载 accompaniment_url 伴奏版上轨,
|
|
308
312
|
# 不得用 download_url 原曲(人声与配音打架,260827 美食批踩坑);"pure" 取 download_url。
|
|
309
313
|
# 文件名 bgm-<曲名>[-伴奏].<扩展名>:跨片避让按**标题归一化键**记账(剥 bgm- 前缀与伴奏/instrumental/off-vocal 后缀),乱命名=下一轮 --exclude-recent 失准
|
|
314
|
+
# --beat-align 的高潮点取自 split.beats 的 narrative / container_stage(升华段 → 容器转折 → 回扣段);
|
|
315
|
+
# 拆分稿没带这两个字段 ⇒ 落 0.75×全片兜底档,**CLI 会明示那是猜的**。不接受就用 --climax <轨秒> 指定。
|
|
316
|
+
# 两侧都够长时零平铺(恰好 1 个 clip);不够长才按小节线平铺补齐、接缝吸附 downbeat。
|
|
310
317
|
gtrk audio lay --project "<工程目录>" --file "<bgm>" --volume 0.1 --beat-align --json
|
|
311
318
|
|
|
312
319
|
# ⑪ 字幕(样式/颜色 = 检查点①拍板值;用户没选用 default/雅黑;零计费——拆行走云端 subtitle_line_split 0 积分留痕,离线可加 --offline 用本地拆窗、重跑幂等替换)
|
|
@@ -240,6 +240,9 @@ gtrk mg lint "<工程目录>/mg/<composition_id>.html" --dispatch "<工程目录
|
|
|
240
240
|
gtrk mg --project "<工程目录>" --json
|
|
241
241
|
|
|
242
242
|
# ⑪ BGM(-20dB = 线性 0.10)
|
|
243
|
+
# --beat-align 的高潮点取自 split.beats 的 narrative / container_stage(升华段 → 容器转折 → 回扣段);
|
|
244
|
+
# 拆分稿没带这两个字段 ⇒ 落 0.75×全片兜底档,**CLI 会明示那是猜的**。不接受就用 --climax <轨秒> 指定。
|
|
245
|
+
# 两侧都够长时零平铺(恰好 1 个 clip);不够长才按小节线平铺补齐、接缝吸附 downbeat。
|
|
243
246
|
gtrk audio lay --project "<工程目录>" --file "<bgm>" --volume 0.1 --beat-align --json
|
|
244
247
|
|
|
245
248
|
# ⑫ 字幕
|
|
@@ -52,6 +52,9 @@ gtrk matrix lay --project "<工程>" --mark-weight 0.3 --gap-fill fast --json
|
|
|
52
52
|
|
|
53
53
|
# ⑤⑥⑦ 字卡 → BGM → 字幕
|
|
54
54
|
gtrk mg --project "<工程>" --json
|
|
55
|
+
# --beat-align 的高潮点取自 split.beats 的 narrative / container_stage(升华段 → 容器转折 → 回扣段);
|
|
56
|
+
# 拆分稿没带这两个字段 ⇒ 落 0.75×全片兜底档,**CLI 会明示那是猜的**。不接受就用 --climax <轨秒> 指定。
|
|
57
|
+
# 两侧都够长时零平铺(恰好 1 个 clip);不够长才按小节线平铺补齐、接缝吸附 downbeat。
|
|
55
58
|
gtrk audio lay --project "<工程>" --file "<bgm>" --volume 0.1 --beat-align --json
|
|
56
59
|
gtrk subtitle lay --project "<工程>" --style <样式> --color <色> --json
|
|
57
60
|
```
|