@dsh-gis/dsh-video-studio-skill 0.8.1 → 1.0.2
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/CHANGELOG.md +582 -0
- package/README.md +287 -304
- package/THIRD_PARTY_NOTICES.md +1 -1
- package/package.json +11 -10
- package/schemas/design.schema.json +722 -0
- package/schemas/film.schema.json +171 -15
- package/schemas/proposal.schema.json +133 -0
- package/skills/video-studio/SKILL.md +1316 -1066
- package/skills/video-studio/assets/design_fixture.json +141 -0
- package/skills/video-studio/assets/film.json +1 -2
- package/skills/video-studio/assets/golden_frames.json +12 -9
- package/skills/video-studio/assets/scenes.py +2207 -1190
- package/skills/video-studio/assets/voice_loudness.json +16 -0
- package/skills/video-studio/references/audio-variation.md +15 -11
- package/skills/video-studio/references/audio.md +36 -34
- package/skills/video-studio/references/change-impact.md +3 -3
- package/skills/video-studio/references/frame-qa.md +2 -2
- package/skills/video-studio/references/proposal.md +177 -0
- package/skills/video-studio/references/quality-gates.md +2 -2
- package/skills/video-studio/references/scene-grammar.md +311 -0
- package/skills/video-studio/references/sfx-design.md +1 -1
- package/skills/video-studio/references/style-packs.md +107 -168
- package/skills/video-studio/references/v08-quality.md +8 -8
- package/skills/video-studio/references/web-engine.md +1 -1
- package/skills/video-studio/references/word-timeline.md +2 -2
- package/skills/video-studio/scripts/designkit.py +2120 -0
- package/skills/video-studio/scripts/filmcheck.py +104 -33
- package/skills/video-studio/scripts/filmkit.py +153 -78
- package/skills/video-studio/scripts/grammar.py +619 -0
- package/skills/video-studio/scripts/musicgen.py +2043 -0
- package/skills/video-studio/scripts/preflight.py +10 -3
- package/skills/video-studio/scripts/previewkit.py +849 -0
- package/skills/video-studio/scripts/propose.py +825 -0
- package/skills/video-studio/scripts/qa_frames.py +45 -10
- package/skills/video-studio/scripts/qavmaf.py +77 -11
- package/skills/video-studio/scripts/render.py +505 -142
- package/skills/video-studio/scripts/scorekit.py +50 -1748
- package/skills/video-studio/scripts/selfcheck.py +851 -115
- package/skills/video-studio/scripts/stagewatch.py +21 -5
- package/skills/video-studio/scripts/stylekit.py +293 -570
- package/skills/video-studio/scripts/voicekit.py +502 -380
- package/skills/video-studio/scripts/webengine.py +15 -14
- package/tools/audio_similarity.py +57 -30
- package/tools/ci_check.py +9 -1
- package/tools/estimate.py +14 -8
- package/tools/golden_frames.py +56 -11
- package/tools/silhouette_qa.py +1263 -0
- package/docs/demo-pil-sheet.png +0 -0
- package/docs/styles/demo-results.json +0 -76
- package/docs/styles/sheet-8-styles.png +0 -0
- package/docs/styles/sheet-ai.png +0 -0
- package/docs/styles/sheet-craft.png +0 -0
- package/docs/styles/sheet-night.png +0 -0
- package/skills/video-studio/assets/score_demo.json +0 -307
|
@@ -80,7 +80,7 @@ python preflight.py --script film.json --work work --engine pil --json
|
|
|
80
80
|
|
|
81
81
|
### 2.3 阈值 92 / 96 是怎么来的(**只有一份权威定义**)
|
|
82
82
|
|
|
83
|
-
判据来自 qavmaf
|
|
83
|
+
判据来自 qavmaf 作者对**同一部示例片**(参考帧含字幕与片头片尾淡入淡出)的三组实测:
|
|
84
84
|
crf17 → **97.24**(pass)、crf30 → **95.74**(pass + warning)、二次编码 + 缩放坏片 → **29.45**(fail)。
|
|
85
85
|
|
|
86
86
|
**阈值只有一份**:权威定义是 `qavmaf.py` 的 `VMAF_PASS=92.0` / `VMAF_WARN=96.0`
|
|
@@ -124,7 +124,7 @@ qavmaf 会在报告里打 warning 提醒这一点,但**不因此改判**——
|
|
|
124
124
|
|
|
125
125
|
| 项 | 实测 |
|
|
126
126
|
|---|---|
|
|
127
|
-
| 29.011 s
|
|
127
|
+
| 29.011 s 示例片全片(870 帧,1080p 交付) | **14.2 s**(同机负载高时同一份代码测到过 28.8 s,见下"成本口径") |
|
|
128
128
|
| 720p@24 交付(696 帧) | **7.2 s**(帧数少 + libvmaf 比较分辨率低) |
|
|
129
129
|
| 分项吞吐 | 参考帧渲染受 ffmpeg 消费速度限制;libvmaf threads=min(8, CPU) 时约 124–160 帧/秒(threads=0 只有约 20 帧/秒) |
|
|
130
130
|
| 抽样模式 | `--vmaf sample`(每 5 帧取 1)实测 8.0 s 跑完 184 帧,VMAF 与全片差 0.34 分 |
|
|
@@ -136,7 +136,7 @@ qavmaf 会在报告里打 warning 提醒这一点,但**不因此改判**——
|
|
|
136
136
|
所以这里只写"这一跑"的数,不写承诺。纯 libvmaf 比较(参考帧已就绪)约 1.2× 实时——
|
|
137
137
|
**别把"纯比较的 1.2×"当成端到端成本**。
|
|
138
138
|
|
|
139
|
-
**v0.8 之后 qa 比渲染还贵**:29 s
|
|
139
|
+
**v0.8 之后 qa 比渲染还贵**:29 s 示例片 `--stage all --cost` 实测总 **47.3 s**,
|
|
140
140
|
其中 `frames` 12.5 s、`qa` 23.9 s(VMAF 14.2 + ASR 8.7 + 其余);v0.7 的全链约 28 s。
|
|
141
141
|
决策影响:**批量出片的瓶颈从渲染转到质检**——想压回渲染量级就 `--vmaf off` 或 `--vmaf sample`。
|
|
142
142
|
|
|
@@ -188,13 +188,13 @@ v0.7 及以前的质检只看"容器 / 响度 / 帧 / 音画同步",都建立
|
|
|
188
188
|
|
|
189
189
|
### 3.4 为什么默认线是 0.85 而不是 0.95
|
|
190
190
|
|
|
191
|
-
实测(29 s
|
|
191
|
+
实测(29 s 示例片,含 "DeepSeek 4.1 Flash / DeepSeek Harness" 这类中英混排专名):
|
|
192
192
|
|
|
193
193
|
| 场景 | 召回 |
|
|
194
194
|
|---|---|
|
|
195
|
-
|
|
|
196
|
-
|
|
|
197
|
-
|
|
|
195
|
+
| 干净示例片 1080p(4 段全对上、缺句 0) | **0.803** |
|
|
196
|
+
| 干净示例片 720p@24(同剧本) | **0.853** |
|
|
197
|
+
| 干净示例片(另一轮) | **0.811 – 0.828** |
|
|
198
198
|
| 丢句反证:把 l03 从音轨剪掉、timeline 仍写 3 句 | **0.677**(`missing_lines=["l03"]`、gate=fail、exit 1) |
|
|
199
199
|
|
|
200
200
|
0.803–0.853 不是流水线坏了,是 ASR 对中英混排专名的正常误差——实测把 "DeepSeek 4.1 Flash"
|
|
@@ -203,7 +203,7 @@ v0.7 及以前的质检只看"容器 / 响度 / 帧 / 音画同步",都建立
|
|
|
203
203
|
|
|
204
204
|
- **< 0.72 才说明"整句丢了 / 音轨跟剧本不是一套"**——这是真正要阻断的;
|
|
205
205
|
- 0.72–0.85 给 warning:仍然出片,但提示可能是缓存串了;
|
|
206
|
-
- **≥ 0.95
|
|
206
|
+
- **≥ 0.95 会把干净的示例片判成 fail**,所以不能拿短测试片的 0.985(19.87 s 纯中文素材,
|
|
207
207
|
没有专名)当默认线。
|
|
208
208
|
|
|
209
209
|
### 3.5 实测耗时
|
|
@@ -164,7 +164,7 @@ PNG 截图比 JPEG q94 慢但无压缩伪影,本模块按契约固定 PNG。
|
|
|
164
164
|
|
|
165
165
|
## 10. 和别的模块怎么接
|
|
166
166
|
|
|
167
|
-
- **配乐 / 音效**:webengine.py cues 输出 work/cues.json(§4.2),
|
|
167
|
+
- **配乐 / 音效**:webengine.py cues 输出 work/cues.json(§4.2),musicgen / sfxkit 按 t 对齐;
|
|
168
168
|
页面 cue 的 type 用 sfxkit 配方名(ui_blip / whoosh / impact / data_chirp ...)。
|
|
169
169
|
- **音画同步质检**:页面 S.event 登记的视觉事件进 work/cues.json 的 events,qa_frames.sync_check 用。
|
|
170
170
|
- **合成成片**:webengine 只出无声画面;配音/配乐/混音由 filmkit 音频总线和 render.py 的 mux 阶段负责。
|
|
@@ -97,13 +97,13 @@ G10 会因此记 `skipped` 或 `fail`(看是全部为空还是个别句为空
|
|
|
97
97
|
### 4.1 词间有 0.1–0.3 s 的空隙
|
|
98
98
|
|
|
99
99
|
edge-tts 的 WordBoundary 只覆盖"发音区间",相邻词之间的停顿**不在任何事件里**。
|
|
100
|
-
所以 `covered = Σ dur`
|
|
100
|
+
所以 `covered = Σ dur` 永远小于句长。示例片实测 4 句 64 词,覆盖率约 0.7 量级。
|
|
101
101
|
**判据不能写 `covered == dur`**——G10 的覆盖率下限是 **45%**(低于它才是"明显少了")。
|
|
102
102
|
|
|
103
103
|
### 4.2 句尾静音不在事件里(约 0.5 s)
|
|
104
104
|
|
|
105
105
|
排轴用的是**整句实测时长**,不是词时长求和。G10 只检查"末词终点离句尾不超过 **0.40 s**"
|
|
106
|
-
|
|
106
|
+
(示例片实测 0.09 s)。这条超过 0.40 s,通常不是"片子坏了",而是词事件本身整体错位了。
|
|
107
107
|
|
|
108
108
|
### 4.3 裁剪会让词整体提前(`words_shift`)
|
|
109
109
|
|