@oh-story/dsh 0.1.9 → 0.1.10

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.
Files changed (197) hide show
  1. package/README.md +12 -12
  2. package/lib/client.js +204 -72
  3. package/lib/client.js.map +3 -3
  4. package/lib/drama/manifest.json +84 -74
  5. package/lib/drama/skills/short-drama/SKILL.md +2 -2
  6. package/lib/drama/skills/short-drama/scripts/creator_markdown_check.py +14 -0
  7. package/lib/drama/skills/short-drama-assets/references/character-and-look.md +10 -0
  8. package/lib/drama/skills/short-drama-assets/references/continuity-lock.md +6 -9
  9. package/lib/drama/skills/short-drama-assets/references/voice-direction.md +28 -0
  10. package/lib/drama/skills/short-drama-edit/SKILL.md +27 -29
  11. package/lib/drama/skills/short-drama-edit/assets//345/211/252/350/276/221/345/215/225.md +2 -2
  12. package/lib/drama/skills/short-drama-edit/references/cut-craft.md +24 -67
  13. package/lib/drama/skills/short-drama-edit/references/delivery-verify.md +27 -56
  14. package/lib/drama/skills/short-drama-edit/references/generated-footage.md +37 -79
  15. package/lib/drama/skills/short-drama-edit/references/sound-and-subtitles.md +39 -92
  16. package/lib/drama/skills/short-drama-edit/references/stage-contract.md +12 -16
  17. package/lib/drama/skills/short-drama-edit/scripts/edit_tool.py +126 -11
  18. package/lib/drama/skills/short-drama-edit/scripts/selftest.py +64 -0
  19. package/lib/drama/skills/short-drama-image-prompts/SKILL.md +2 -0
  20. package/lib/drama/skills/short-drama-image-prompts/references/common-recipe.md +11 -0
  21. package/lib/drama/skills/short-drama-produce/SKILL.md +5 -1
  22. package/lib/drama/skills/short-drama-produce/references/adapter-contract.md +14 -20
  23. package/lib/drama/skills/short-drama-produce/references/providers/minimax-h3-video.md +8 -26
  24. package/lib/drama/skills/short-drama-produce/references/providers/minimax-speech.md +41 -0
  25. package/lib/drama/skills/short-drama-produce/scripts/provider_adapters.py +142 -1
  26. package/lib/drama/skills/short-drama-review/SKILL.md +2 -3
  27. package/lib/drama/skills/short-drama-review/references/production-quality-gates.md +6 -19
  28. package/lib/drama/skills/short-drama-review/references/rubric-visual-motion.md +9 -35
  29. package/lib/drama/skills/short-drama-storyboard/SKILL.md +10 -6
  30. package/lib/drama/skills/short-drama-storyboard/references/lighting-craft.md +39 -0
  31. package/lib/drama/skills/short-drama-storyboard/references/shot-craft.md +58 -21
  32. package/lib/drama/skills/short-drama-storyboard/references/stage-contract.md +1 -1
  33. package/lib/drama/skills/short-drama-video-prompts/SKILL.md +10 -9
  34. package/lib/drama/skills/short-drama-video-prompts/references/camera-audio-continuity.md +17 -0
  35. package/lib/drama/skills/short-drama-video-prompts/references/minimax-h3.md +12 -38
  36. package/lib/drama/skills/short-drama-video-prompts/references/motion-recipe.md +4 -7
  37. package/lib/drama/skills/short-drama-video-prompts/references/performance-action-timing.md +8 -22
  38. package/lib/drama/skills/short-drama-video-prompts/references/production-prompt-grammar.md +6 -19
  39. package/lib/drama/skills/short-drama-video-prompts/references/seedance-2.0.md +2 -3
  40. package/lib/drama/skills/short-drama-video-prompts/references/seedance-2.5.md +34 -9
  41. package/lib/drama/skills/short-drama-video-prompts/references/stage-contract.md +2 -2
  42. package/lib/drama/skills/short-drama-write/SKILL.md +2 -4
  43. package/lib/index.js +289 -91
  44. package/lib/index.js.map +4 -4
  45. package/lib/novel-to-game/README.md +299 -59
  46. package/lib/novel-to-game/README_ZH.md +299 -56
  47. package/lib/novel-to-game/VERSION +1 -1
  48. package/lib/novel-to-game/examples/jin-ping-mei/build/BUILD_BRIEF.md +3 -1
  49. package/lib/novel-to-game/examples/jin-ping-mei/build/app/RUN.md +11 -3
  50. package/lib/novel-to-game/examples/jin-ping-mei/build/app/css/new-guofeng.css +397 -8
  51. package/lib/novel-to-game/examples/jin-ping-mei/build/app/css/style.css +0 -31
  52. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/data.js +71 -73
  53. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/engine.js +78 -89
  54. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/main.js +37 -14
  55. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/text.js +5 -5
  56. package/lib/novel-to-game/examples/jin-ping-mei/build/app/package.json +2 -1
  57. package/lib/novel-to-game/examples/jin-ping-mei/qa/README.md +11 -16
  58. package/lib/novel-to-game/examples/jin-ping-mei/qa/verification.json +11 -11
  59. package/lib/novel-to-game/examples/jin-ping-mei/qa/verify_playable_model.mjs +23 -0
  60. package/lib/novel-to-game/manifest.json +77 -87
  61. package/lib/novel-to-game/skills/game-art-direction/SKILL.md +7 -12
  62. package/lib/novel-to-game/skills/game-art-direction/references/art-direction-method.md +27 -106
  63. package/lib/novel-to-game/skills/game-build/SKILL.md +13 -14
  64. package/lib/novel-to-game/skills/game-build/references/blender-asset-workflow.md +24 -0
  65. package/lib/novel-to-game/skills/game-build/references/build-brief-contract.md +45 -82
  66. package/lib/novel-to-game/skills/game-build/references/generative-media-pipeline.md +14 -45
  67. package/lib/novel-to-game/skills/game-build/references/playable-model-contract.md +30 -65
  68. package/lib/novel-to-game/skills/game-build/references/tts-production-contract.md +13 -27
  69. package/lib/novel-to-game/skills/game-concept/SKILL.md +13 -15
  70. package/lib/novel-to-game/skills/game-concept/references/concept-method.md +28 -75
  71. package/lib/novel-to-game/skills/game-qa/SKILL.md +6 -7
  72. package/lib/novel-to-game/skills/game-qa/references/test-design-method.md +9 -5
  73. package/lib/novel-to-game/skills/game-world-design/SKILL.md +12 -16
  74. package/lib/novel-to-game/skills/game-world-design/references/narrative-design-method.md +23 -72
  75. package/lib/novel-to-game/skills/game-world-design/references/numeric-design-method.md +14 -48
  76. package/lib/novel-to-game/skills/game-world-design/references/world-design-method.md +36 -103
  77. package/lib/novel-to-game/skills/novel-game-analyze/SKILL.md +4 -10
  78. package/lib/novel-to-game/skills/novel-game-analyze/references/gameability-protocol.md +4 -4
  79. package/lib/novel-to-game/skills/novel-to-game/SKILL.md +9 -21
  80. package/lib/novel-to-game/skills/novel-to-game/references/intake-method.md +5 -4
  81. package/lib/novel-to-game/skills/novel-to-game/references/pipeline-contract.md +5 -8
  82. package/lib/oh-story/manifest.json +230 -185
  83. package/lib/oh-story/roles/chapter-extractor.md +177 -237
  84. package/lib/oh-story/roles/consistency-checker.md +4 -4
  85. package/lib/oh-story/roles/narrative-writer.md +24 -25
  86. package/lib/oh-story/roles/story-architect.md +5 -5
  87. package/lib/oh-story/roles/story-explorer.md +11 -11
  88. package/lib/oh-story/skills/story/SKILL.md +13 -7
  89. package/lib/oh-story/skills/story/VERSION +1 -1
  90. package/lib/oh-story/skills/story/references/author-memory.md +54 -24
  91. package/lib/oh-story/skills/story/scripts/author_memory_commit.py +934 -170
  92. package/lib/oh-story/skills/story-cover/SKILL.md +10 -1
  93. package/lib/oh-story/skills/story-deslop/SKILL.md +40 -53
  94. package/lib/oh-story/skills/story-deslop/references/anti-ai-writing.md +11 -10
  95. package/lib/oh-story/skills/story-deslop/references/author-memory.md +54 -24
  96. package/lib/oh-story/skills/story-deslop/references/deslop-gates.md +1 -1
  97. package/lib/oh-story/skills/story-deslop/scripts/author_memory_commit.py +934 -170
  98. package/lib/oh-story/skills/story-import/SKILL.md +77 -81
  99. package/lib/oh-story/skills/story-import/references/character-state-reverse.md +1 -1
  100. package/lib/oh-story/skills/story-import/references/state-tracking.md +4 -69
  101. package/lib/oh-story/skills/story-import/references/structure-mapping-long.md +10 -8
  102. package/lib/oh-story/skills/story-import/references/tracking-transaction.md +8 -6
  103. package/lib/oh-story/skills/story-import/scripts/check-outline-contract.js +34 -16
  104. package/lib/oh-story/skills/story-import/scripts/tracking_commit.py +210 -2
  105. package/lib/oh-story/skills/story-import/scripts/wordcount_core.py +3 -0
  106. package/lib/oh-story/skills/story-long-analyze/SKILL.md +91 -258
  107. package/lib/oh-story/skills/story-long-analyze/references/author-facing.md +245 -0
  108. package/lib/oh-story/skills/story-long-analyze/references/deconstruction-notes.md +2 -2
  109. package/lib/oh-story/skills/story-long-analyze/references/inspiration-library.md +105 -0
  110. package/lib/oh-story/skills/story-long-analyze/references/material-decomposition.md +113 -105
  111. package/lib/oh-story/skills/story-long-analyze/references/output-templates.md +169 -125
  112. package/lib/oh-story/skills/story-long-analyze/references/pipeline-ops.md +172 -64
  113. package/lib/oh-story/skills/story-long-analyze/references/semantic-acceptance-fixtures.md +84 -0
  114. package/lib/oh-story/skills/story-long-analyze/references/style-profile-generator.md +42 -132
  115. package/lib/oh-story/skills/story-long-analyze/references/style-profile-protocol.md +5 -5
  116. package/lib/oh-story/skills/story-long-analyze/scripts/build_chapter_index.py +466 -0
  117. package/lib/oh-story/skills/story-long-analyze/scripts/inspect_existing_assets.py +702 -0
  118. package/lib/oh-story/skills/story-long-analyze/scripts/inspiration_index.py +864 -0
  119. package/lib/oh-story/skills/story-long-analyze/scripts/manage_analysis_run.py +1106 -0
  120. package/lib/oh-story/skills/story-long-analyze/scripts/render_relation_chart.py +425 -0
  121. package/lib/oh-story/skills/story-long-scan/SKILL.md +4 -1
  122. package/lib/oh-story/skills/story-long-write/SKILL.md +38 -29
  123. package/lib/oh-story/skills/story-long-write/references/anti-ai-writing.md +11 -10
  124. package/lib/oh-story/skills/story-long-write/references/artifact-protocols.md +25 -20
  125. package/lib/oh-story/skills/story-long-write/references/author-memory.md +54 -24
  126. package/lib/oh-story/skills/story-long-write/references/benchmark-recall.md +3 -3
  127. package/lib/oh-story/skills/story-long-write/references/cross-book-recall.md +26 -0
  128. package/lib/oh-story/skills/story-long-write/references/dialogue-mastery.md +4 -0
  129. package/lib/oh-story/skills/story-long-write/references/emotional-methods.md +2 -2
  130. package/lib/oh-story/skills/story-long-write/references/long-chapter-quality.md +4 -13
  131. package/lib/oh-story/skills/story-long-write/references/outline-structure-theory.md +1 -1
  132. package/lib/oh-story/skills/story-long-write/references/project-files.md +9 -7
  133. package/lib/oh-story/skills/story-long-write/references/reader-contract-and-progression.md +12 -4
  134. package/lib/oh-story/skills/story-long-write/references/reference-index.md +1 -2
  135. package/lib/oh-story/skills/story-long-write/references/tracking-transaction.md +8 -6
  136. package/lib/oh-story/skills/story-long-write/references/workflow-chapter.md +86 -115
  137. package/lib/oh-story/skills/story-long-write/references/workflow-daily.md +55 -120
  138. package/lib/oh-story/skills/story-long-write/references/workflow-revision.md +15 -11
  139. package/lib/oh-story/skills/story-long-write/references/workflow-setup.md +66 -68
  140. package/lib/oh-story/skills/story-long-write/references/writer-prompt-fallback.md +3 -3
  141. package/lib/oh-story/skills/story-long-write/references/writing-craft.md +4 -12
  142. package/lib/oh-story/skills/story-long-write/scripts/author_memory_commit.py +934 -170
  143. package/lib/oh-story/skills/story-long-write/scripts/build_writer_prompt.py +139 -18
  144. package/lib/oh-story/skills/story-long-write/scripts/check-outline-contract.js +34 -16
  145. package/lib/oh-story/skills/story-long-write/scripts/outline_view.py +5 -3
  146. package/lib/oh-story/skills/story-long-write/scripts/storyctl.py +58 -0
  147. package/lib/oh-story/skills/story-long-write/scripts/tracking_commit.py +210 -2
  148. package/lib/oh-story/skills/story-long-write/scripts/wordcount_core.py +3 -0
  149. package/lib/oh-story/skills/story-review/SKILL.md +68 -85
  150. package/lib/oh-story/skills/story-review/references/anti-ai-writing.md +11 -10
  151. package/lib/oh-story/skills/story-review/references/author-memory.md +54 -24
  152. package/lib/oh-story/skills/story-review/references/dialogue-mastery.md +4 -0
  153. package/lib/oh-story/skills/story-review/references/review-quality.md +4 -10
  154. package/lib/oh-story/skills/story-review/references/tracking-transaction.md +8 -6
  155. package/lib/oh-story/skills/story-review/scripts/author_memory_commit.py +934 -170
  156. package/lib/oh-story/skills/story-review/scripts/tracking_commit.py +210 -2
  157. package/lib/oh-story/skills/story-review/scripts/wordcount_core.py +3 -0
  158. package/lib/oh-story/skills/story-setup/SKILL.md +50 -42
  159. package/lib/oh-story/skills/story-setup/references/agent-references/anti-ai-writing.md +11 -10
  160. package/lib/oh-story/skills/story-setup/references/agent-references/deslop-gates.md +1 -1
  161. package/lib/oh-story/skills/story-setup/references/agent-references/dialogue-mastery.md +4 -0
  162. package/lib/oh-story/skills/story-setup/references/agent-references/long-emotional-methods.md +2 -2
  163. package/lib/oh-story/skills/story-setup/references/agent-references/long-quality.md +1 -1
  164. package/lib/oh-story/skills/story-setup/references/agent-references/writing-craft.md +4 -12
  165. package/lib/oh-story/skills/story-setup/references/diagnostics.md +1 -1
  166. package/lib/oh-story/skills/story-short-analyze/SKILL.md +22 -3
  167. package/lib/oh-story/skills/story-short-analyze/references/material-decomposition.md +5 -1
  168. package/lib/oh-story/skills/story-short-scan/SKILL.md +5 -1
  169. package/lib/oh-story/skills/story-short-write/SKILL.md +6 -147
  170. package/lib/oh-story/skills/story-short-write/references/author-memory.md +54 -24
  171. package/lib/oh-story/skills/story-short-write/references/dialogue-mastery.md +4 -0
  172. package/lib/oh-story/skills/story-short-write/references/reference-index.md +2 -0
  173. package/lib/oh-story/skills/story-short-write/references/workflow-design.md +3 -2
  174. package/lib/oh-story/skills/story-short-write/references/workflow-draft.md +126 -0
  175. package/lib/oh-story/skills/story-short-write/references/workflow-revision.md +32 -0
  176. package/lib/oh-story/skills/story-short-write/scripts/author_memory_commit.py +934 -170
  177. package/lib/types/client/drama-production-view.d.ts.map +1 -1
  178. package/lib/types/client/file-activity.d.ts +19 -1
  179. package/lib/types/client/file-activity.d.ts.map +1 -1
  180. package/lib/types/client/index.d.ts.map +1 -1
  181. package/lib/types/client/production-prompts.d.ts +7 -0
  182. package/lib/types/client/production-prompts.d.ts.map +1 -1
  183. package/lib/types/client/production-runtime.d.ts +16 -0
  184. package/lib/types/client/production-runtime.d.ts.map +1 -1
  185. package/lib/types/drama-adapters.d.ts +5 -3
  186. package/lib/types/drama-adapters.d.ts.map +1 -1
  187. package/lib/types/native-hooks.d.ts +52 -0
  188. package/lib/types/native-hooks.d.ts.map +1 -1
  189. package/lib/types/role-identity.d.ts +17 -0
  190. package/lib/types/role-identity.d.ts.map +1 -0
  191. package/lib/types/role-tool.d.ts.map +1 -1
  192. package/lib/types/skill-provider.d.ts.map +1 -1
  193. package/package.json +45 -45
  194. package/lib/novel-to-game/skills/game-world-design/references/dialogue-design-method.md +0 -58
  195. package/lib/novel-to-game/skills/game-world-design/references/game-writing-craft.md +0 -53
  196. package/lib/novel-to-game/skills/novel-to-game/references/intake-benchmark-reference.md +0 -38
  197. package/lib/oh-story/skills/story-long-write/references/state-tracking.md +0 -108
@@ -23,7 +23,7 @@
23
23
  - 出点:3.40
24
24
  - 时长:2.50
25
25
  - 取舍:入点=弹窗动画已经展开过半,起势的静止两帧删掉;出点=弹窗完全展开且文字可读的最后一帧,之后画面开始整体提亮
26
- - 声音:保留原声,与上一段做 0.15 秒交叉淡入(两段底噪水平差 4 dB)
26
+ - 声音:保留原声;回听确认与上一段衔接
27
27
  - 字幕:无
28
28
 
29
29
  ## CUT-EP001-003 · 他念出那句话
@@ -33,7 +33,7 @@
33
33
  - 出点:7.00
34
34
  - 时长:5.00
35
35
  - 取舍:入点=按发声区间前推 0.3 秒余量,开头 1.5 秒的凝视与上一段蓄势重复,整段去掉;出点=句尾收音之后 0.4 秒,人物姿态尚未回弹
36
- - 声音:保留原声;音乐在 4.20 秒进入,台词发声区间内压低 9 dB,句尾停顿处恢复
36
+ - 声音:保留原声
37
37
  - 字幕:这条路我自己走
38
38
 
39
39
  ---
@@ -1,81 +1,38 @@
1
1
  # 入出点与镜序
2
2
 
3
- 可用带划完之后,剪辑要回答两个问题:**这一段从哪一帧进、到哪一帧出**,以及**这些段落按
4
- 什么顺序连起来**。两个问题都在带内解决;带外的帧不参与讨论。
3
+ ## 入出点
5
4
 
6
- ## 入点
5
+ 在素材可用区间内,按信息、表演与节奏选入出点。
6
+ 动作镜可以从动作已经开始的位置进入;反应、等待、揭示前停顿可以保留静止。
7
+ 出点要让观众读到本镜的结果,并避开后续漂移或无意重复。
7
8
 
8
- 入点取**动作已经在进行中**的那一帧,不取动作准备开始的那一帧。
9
-
10
- 观众补得上开头,补不上结尾。一个人伸手去拿东西,从「手已经在移动」进,观众自动知道他要拿;
11
- 从「手还放在桌上」进,前面那半秒只是在等。生成素材的起势帧几乎总是这半秒。
12
-
13
- 具体判断:从候选入点往后放,如果前 0.3 秒删掉之后这一段的信息没有减少,就删掉。反复这样问,
14
- 直到再删就丢信息为止。
15
-
16
- 例外是**需要一个静止起点的镜头**:反应镜、揭示前的停顿、有意的空拍。这些镜头的静止不是起势帧,
17
- 它本身就是内容。区别在于静止之后是否发生了它承诺的那件事——反应镜的静止之后有反应,
18
- 起势帧之后只是动作终于开始了。
19
-
20
- ## 出点
21
-
22
- 出点取**信息完成之后、缺陷开始之前**。这两个条件经常冲突,冲突时以缺陷为准:把一段拖进
23
- 漂移区,损失的不只是这一段,还有它后面那一刀的可信度。
24
-
25
- 信息完成的判断:这一镜要让观众知道的那件事,最后一次可见是哪一帧。之后的帧要么在重复,
26
- 要么在等下一件事。
27
-
28
- 有台词时出点由声音决定,不由画面决定。见下一节。
29
-
30
- ## 台词优先
31
-
32
- 有台词的段落,边界顺序是:
33
-
34
- 1. 先测这句话的实际发声区间(从第一个音到最后一个音收尾)。
35
- 2. 入点不晚于发声起点,出点不早于发声收尾——两端各留出一点余量,让句尾不被切得发干。
36
- 3. 在这个约束内,才轮到画面上的入出点判断。
37
-
38
- 切在字中间是结构缺陷。半个字听起来像技术故障,观众不会理解成风格。转写工具只用来**定位**
39
- 这句话在时间轴上的位置;字幕文字仍然逐字取自剧本原文。
40
-
41
- 一句台词跨越两段素材时,它属于其中一段——不要在句中换镜。确实需要在这句话上换镜时,
42
- 回上游把它拆成两句,或者接受这一镜承担完整的一句。
9
+ 对白先确定实际发声区间,保留完整的字音与需要的停顿。
10
+ 画面切换可以发生在一句台词中间,前提是音轨连续、说话人和叙事关系清楚。
11
+ 不要为了换画面把原台词改成两句。内置 render 只做同步切段;分离画面和声音的剪法
12
+ 需要先用外部剪辑工具完成,记录所用素材、声音区间和处理方式。
43
13
 
44
14
  ## 镜序与相邻关系
45
15
 
46
- 镜序默认跟随分镜。改变它是本阶段的权限,但要说明理由。
47
-
48
- 相邻两段检查三件事,不能三件同时相同:
49
-
50
- - **景别**(近 / 中 / 远)
51
- - **机位**(相对被摄主体的方位)
52
- - **运动方向**(推 / 拉 / 摇的方向,或静止)
53
-
54
- 三者全同的两段接在一起会被看成同一个镜头出了问题,而不是两个镜头。改法优先级:删掉其中一段
55
- (通常它们本来就在重复信息),其次调整镜序把别的段落插进来,最后才是回上游重新设计镜头。
56
-
57
- ## 重复信息
58
-
59
- 两段承担同一条信息时,删一段,不要两段各留一半。
60
-
61
- 各留一半是最容易做出的选择,因为它看起来两边都保住了。实际结果是两个都不完整的段落连在一起,
62
- 观众第二次看到同一件事、而且两次都没看清。选出更好的那一段,整段留下;另一段整段去掉。
16
+ 默认沿用分镜镜序。调整时检查动作因果、视线、空间关系、信息揭示和声音衔接。
17
+ 相近景别与机位之间的切换容易暴露跳动,可比较改变角度、插入反应或有意跳切的效果。
18
+ 是否保留由观众需要看到的信息决定,不把景别、机位和运动方向的组合设为禁令。
63
19
 
64
- ## 时长
20
+ 重复信息没有新增作用时可删;如果第二次增加反应、对照或重新解释,可以保留。
21
+ 拆取两段素材也可以,但要确认动作、台词和情绪仍连贯。
65
22
 
66
- **省下来的时间不要补到别处。**
23
+ ## 切点与转场
67
24
 
68
- 缩短一段之后,成片比目标时长短了,这时候很自然会想把这两秒加到别的段落上去。不要这样做。
69
- 其它段落的出点是按它们各自的信息和缺陷定的,加长它们只会把它们也推进重复区或漂移区。
70
- 成片短于目标时长是一个结果,不是一个需要填平的缺口。
25
+ 动接动、声音桥和切到不同主体都可帮助衔接,按本场叙事选择。
26
+ 若相邻镜头有生成漂移,先判断能否通过取舍或接镜校正解决;叠化等转场不能替代缺失的内容。
71
27
 
72
- 目标时长的作用是在**开始剪之前**约束镜头数量和信息密度。剪完之后它就只是一个用来对照的数字,
73
- 差多少写进报告,由创作者决定要不要回上游加内容。
28
+ 剧本的 `[转场]` 可能交代时空变化,也可能明确指定声音或画面效果,先读具体要求。
29
+ 可通过新镜头中的环境信息、声音桥、黑场或其他已接受效果实现。
30
+ 内置 render 只做硬切;需要声音桥或画面转场时使用外部工具,并记录处理参数。
74
31
 
75
- ## 什么时候停
32
+ ## 时长与完成
76
33
 
77
- 再剪一版能不能更好,几乎总是「能」。判断该不该继续的标准不是「还有没有可改的地方」,
78
- 而是**下一刀要动的是不是观众能看见的东西**。
34
+ 删短某段后,只有其他段落确实需要更多表演或阅读时间才延长,不机械补齐总秒数。
35
+ 目标时长若是创作参考,报告实际时长与差异;若是用户明确的交付限制,则继续调整或指出
36
+ 缺少哪些素材才能满足,不能把它自行降为参考值。
79
37
 
80
- 在成片里看不见的地方反复重出和微调,是本阶段最容易发生的浪费:一段素材最终只用了两秒,
81
- 却为它被丢掉的那四秒重出了三次。动手之前先确认,要修的这一帧到底在不在成片里。
38
+ 下一轮修改应针对成片里可见或可听的问题,优先修复影响理解、连续性和交付要求的部分。
@@ -1,58 +1,29 @@
1
1
  # 交付与验收
2
2
 
3
- 本阶段的验收只回答**可测的事实**。「这条片子好不好看」不在这里回答,也不能用这里的任何一项
4
- 数字去暗示它。
5
-
6
- ## 可测项
7
-
8
- 渲染完成后逐项测量并回报数字,不回报「通过」:
9
-
10
- | 项 | 怎么测 | 判据 |
11
- |---|---|---|
12
- | 成片时长 | 探测输出文件 | 等于各段时长之和;不等说明拼接或转码出了问题 |
13
- | 每一刀的位置 | 按剪辑单区间反查 | 与文档一致 |
14
- | 台词完整性 | 在成片上转写,逐句对剧本原文 | 每一句留下来的台词都能找到 |
15
- | 边界帧 | 抽剪辑点前后各一帧 | 没有黑场帧、白场帧或半渲染帧 |
16
- | 响度 | 测整片响度 | 落在交付规格声明的目标上 |
17
- | 字幕对齐 | 抽有字幕的段落的帧 | 字幕在发声区间内出现,位置没有压住画内文字 |
18
- | 画幅与帧率 | 探测输出文件 | 等于交付规格声明的值 |
19
-
20
- 任何一项测不了(缺工具、缺原文、素材不可读)就如实写「未测」和原因。**不要用相邻的、
21
- 测得到的那一项去替它作证**——渲染成功不能证明台词还在,时长对上不能证明没有黑场帧。
22
-
23
- 最容易漏的是字幕那一行:`verify` 返回一整屏数字,看起来已经查完了,但它测不了字幕长
24
- 什么样。本套件就这样发过一版字号被放大两倍的成片——改完样式只跑了 `verify`,没抽帧看。
25
- **改动只要影响画面,就必须抽帧看,不管数字多好看。**
26
-
27
- ## 报告什么
28
-
29
- 交付时给出四样东西:
30
-
31
- 1. **成片文件路径**,以及每段切好的中间文件路径。
32
- 2. **上表逐项的实测数字**,包括未测项和原因。
33
- 3. **目标时长与实际时长的差**,以及为什么是这个差。
34
- 4. **仍然存在的取舍选项**——还可以再剪的地方、可以回上游重出的地方,各自的代价。
35
- 列出来交给创作者选,不替他决定要不要再来一版。
36
-
37
- 不要报告的:任何形式的质量结论、「已经可以发布了」、把技术成功写成创作成功。
38
-
39
- ## 交回上游的东西
40
-
41
- 剪辑是第一次同时看到成片和意图的位置,所以它必然会积累一批只有在这里才看得见的发现。
42
- 这些发现不属于剪辑单,但属于本轮报告:
43
-
44
- - **某一镜的可用带远短于声明时长** → 视频提示词阶段的时长与动作负载不匹配。
45
- - **两镜信息重复** → 分镜阶段的切镜理由不成立。
46
- - **某句台词在成片上说不清** → 剧本层面的语速/字数问题,或声音生成的容量问题。
47
- - **成片整体缺少某种信息**(人物不立、地点没交代、转折没落地)→ 上游结构问题,
48
- 不是剪辑能补的。
49
-
50
- 逐条点名,写清是在哪一段、哪个时间点观察到的,交给对应 owner。不在剪辑阶段自行修改上游文档。
51
-
52
- ## 可继续精修的工程
53
-
54
- 成片是一次交付,不是终点。创作者通常还要在自己的剪辑软件里继续改。因此除了成片,
55
- 把切好的中间文件和剪辑单一起交出去——有了这两样,任何人都能在别的工具里复现这一版,
56
- 并从这一版继续。
57
-
58
- 只交一个成片文件,等于要求下一个人从头再剪一遍。
3
+ 检查实际交付文件,并区分实测结果、人工判断和未测项。
4
+
5
+ | 项 | 怎么核对 |
6
+ |---|---|
7
+ | 时长与切点 | 对照实际渲染区间、帧边界和用户时长要求 |
8
+ | 内容覆盖 | 对照分镜和视频提示词,必要内容有承载,未采用镜头有原因 |
9
+ | 台词 | 在成片上回听,必要时转写辅助,逐句对照剧本 |
10
+ | 边界帧 | 查看剪辑点前后,检查意外黑白帧、画面断裂和漂移 |
11
+ | 声音 | 回听接缝、对白清晰度与已声明静默;测量整片响度 |
12
+ | 字幕 | 检查逐字内容、发声时间、字号、折行和画内文字避让 |
13
+ | 画内文字 | 按剧本与视觉设定的文字政策检查载体、可读性和指定文字 |
14
+ | 画幅与帧率 | 探测输出文件,对照交付规格 |
15
+ | 接镜色彩 | 在同场景、同光态下比较可比区域,确认校正没有过冲 |
16
+
17
+ `verify` 只提供部分技术测量,不能替代回听与画面检查。
18
+ 分段色彩观测按当前剪辑单读取中间分段,报告平均亮度和蓝减红像素值;它不代表成片局部区域的
19
+ 接镜残差,也不要求各场景接近同一均值。改动剪辑单后先重新渲染,再测量并查看实际切点。
20
+ 发现有意黑场、静默或光态变化时按创作意图判断,不因数值异常直接判错。
21
+
22
+ ## 交付
23
+
24
+ 给出成片、剪辑单、可继续编辑的中间文件,以及外部混音或字幕工程(如使用)。
25
+ 说明是否满足用户要求、仍有哪些内容缺口和取舍;测不了的必要项目写明原因。
26
+
27
+ 需要补素材、改台词或改分镜时,指出对应镜头与发生时间并交给负责阶段。
28
+ 渲染成功只证明工具完成执行,成片的内容判断需要观看和回听;正式审查由
29
+ `$short-drama-review` 或创作者进行。
@@ -1,96 +1,54 @@
1
- # 生成素材的可用带
1
+ # 生成素材的可用区间
2
2
 
3
- 一段实拍素材通常整段可用,导演决定用哪里。一段生成素材通常**不是整段可用**:它有一条可用带,
4
- 带外的帧无论怎么剪都不成立。剪辑第一步不是选精彩瞬间,是先把这条带子划出来。
3
+ ## 先检查素材
5
4
 
6
- 先划带、再选点,顺序不能反。反过来做——先按剧本节奏定好入出点,再去素材里找——会得到一个
7
- 落在缺陷区里的边界,然后花很多时间在「这一刀是不是切得不对」上,而问题根本不在刀口位置。
5
+ 逐段播放素材,记录实际时长、可用区间,以及不能使用的部分及原因。
6
+ 重点检查起始等待、动作回弹、身份或道具漂移、异常提亮、重复表演和口型错位。
7
+ 静止、暗部和停顿是否可用,取决于它们是否符合镜头职责。
8
8
 
9
- ## 先看完整段
9
+ 需要比较画面变化时,可每 0.25–0.5 秒抽帧;在疑似缺陷附近加密到逐帧查看。
10
+ 亮度测量可以辅助发现缓慢漂移,身份、动作和局部细节仍需看画面。
10
11
 
11
- 每个文件从头看到尾一次,逐段记录三件事:
12
+ 可用区间短于计划时长时:
12
13
 
13
- 1. **这段素材实际有多长。** 供应商返回的时长和账号配置的时长经常不等;以文件测出来的为准。
14
- 2. **可用带的起止。** 画面稳定、动作在进行、身份和光线没有漂移的那一段。
15
- 3. **带外发生了什么。** 这条要具体:写「结尾 0.5 秒整体提亮到接近纯白」,不写「结尾不好」。
16
- 具体的记录能回到上游变成提示词修订;模糊的记录只能留在剪辑里被反复重看。
14
+ - 已完整承载信息和表演,可以缩短。
15
+ - 其他素材能够承接缺失信息,可以换镜或调整镜序。
16
+ - 必要动作、台词或反应仍缺失,列出缺口并请求补素材。
17
17
 
18
- ## 常见的带外形态
18
+ 不要只为避开画面缺陷而丢掉故事所需的信息。若画面不可用而对白完整,可评估保留声音、
19
+ 另配画面的剪法;外部混音与画面处理须记录在剪辑单中。
19
20
 
20
- 以下是本套件在实测中反复遇到的形态。它们是**该去素材里核对的清单**,不是任何模型的规格,
21
- 也不保证在你的模型和参数下同样出现;每一条都以你自己这一段素材的实测为准。
21
+ ## 把缺陷反馈给上游
22
22
 
23
- - **起势帧**:开头若干帧接近静止,动作还没开始。入点通常要晚于文件起点。
24
- - **结尾漂移**:动作完成后画面继续变化——人物姿态回弹、道具位置偏移、镜头继续推。
25
- - **结尾提亮**:末段整体亮度上抬甚至泛白。它在缩略图和逐帧对比里都很明显,但在正常速度
26
- 播放时容易被当成「一个亮结尾」放过去。
27
- - **重复表演**:同一个情绪或姿态在一段里演两遍。第二遍通常质量更差,也让这一段显得比实际长。
28
- - **口型与台词错位**:有声模型在同一次生成里出画面和声音,超出容量的台词会被赶或直接不发声。
29
- 边界必须按实际听到的声音定,不按提示词里写了几个字定。
23
+ 描述缺陷发生的时间和画面,再给出希望保留的状态,例如「结尾高光过曝,需保持桌面纹理可辨」。
24
+ 正面描述通常更容易说明目标;确有必要的排除条件可以保留,不按否定词数量判错。
25
+ 重出后比较同一处是否改善,不把某次生成结果当作所有模型的规律。
30
26
 
31
- ## 划带的具体做法
32
-
33
- 用抽帧对比,不要只靠播放。做法:
34
-
35
- 1. 按固定间隔抽帧(0.25–0.5 秒一帧足够定位大多数问题),拼成一张接触图。
36
- 2. 沿着接触图找第一次出现「和前一帧不属于同一个动作」的位置——那通常就是带的一端。
37
- 3. 在候选边界前后再按 0.1 秒抽一次,把边界收紧到可用的最后一帧。
38
-
39
- 亮度类问题额外测一遍逐帧平均亮度,因为眼睛对缓慢提亮不敏感。姿态与身份漂移则相反:数值不会
40
- 动,必须靠眼睛比对同一处细节(发际线、领口、手里的东西)。**两种方法各有各的盲区,
41
- 需要交叉验证的场合两种都用一次。** 只用其中一种得出的结论,其可靠程度取决于这个问题恰好
42
- 落在哪一边——而这一点事先并不知道。
43
-
44
- ## 带很短怎么办
45
-
46
- 可用带短于上游声明的时长是常态。三条路,按代价排序:
47
-
48
- 1. **接受更短的一段。** 一秒半能把信息说完就用一秒半。这是默认选择,也是成片总时长可以
49
- 低于目标的正当原因。
50
- 2. **换一段素材承担这条信息。** 别的镜头如果已经把这件事说清楚了,这一镜可以整段不用。
51
- 3. **回上游重出。** 只在前两条都不成立时走。重出前先把带外形态写具体——「结尾发白」比
52
- 「重生成一次」更可能真的换来一段能用的素材。
53
-
54
- 不要走第四条:把缺陷帧留在成片里,指望观众不注意。缺陷帧在竖屏全屏播放下比在工作监视器上
55
- 明显得多。
56
-
57
- ## 负面指令的边界
58
-
59
- 想避开某个缺陷时,直觉做法是在重出的提示词里写「不要发白 / 不要泛光」。本套件在实测中见过
60
- 这样的重出反而使该缺陷更重的情况(视觉质地类),也见过同样写法对具体物体不产生影响的情况
61
- (物体类)。样本很小,不足以下断言。
62
-
63
- 能确定的只有一条方法论:**把它写成正面的目标状态**——「保持中灰、暗部有细节、高光不过曝」,
64
- 而不是「不要发白」。这条在两类情况下都不会更差,所以作为默认写法。真要用负面写法时,
65
- 把它当成一次实验:重出后回来对比同一处的实测数字,别只凭印象说「这次好一点」。
27
+ ## 接镜与色彩一致性
66
28
 
67
- 上游把这一点写成规则的位置在视频提示词阶段(负面动作意图改写为可见的正面状态)。剪辑阶段
68
- 遇到时,报告回去,不要在剪辑里自己改提示词重投。
29
+ 先按同一场景、同一光态分组,再选择可比较的脸、衣物或中性表面作基准。
30
+ 全画面平均 RGB 会受景别、服装面积和背景影响,只用于筛查,不能单独决定校正量。
31
+ 夜景、日景和有意的冷暖对比不需要拉到全片同一均值。
69
32
 
70
- ## 接镜与色彩一致性
33
+ 相邻镜头有可见的曝光或白平衡偏差时,在对应 CUT 写:
71
34
 
72
- 逐镜生成的素材之间会漂移。同一个人坐在同一张桌子前的两条,回来可能差一档曝光、
73
- 半步白平衡——单看每一条都成立,接在一起就像剪错了。
35
+ ```text
36
+ - 画面:亮度 +0.06;色温 -6
37
+ ```
74
38
 
75
- 本套件实测过一集里的七镜:亮度从 97 到 131(0–255 均值),蓝红差从 −14.6 到 +4.9。
76
- 其中相邻的两镜(同一个人、同一张桌子、同一场戏)亮度差 15 点、色偏从 −5.5 翻到 +1.5,
77
- 在成片上是看得见的一跳。
39
+ - `亮度`:加法偏移,工具支持 −0.25…+0.25。
40
+ - `饱和`:倍数,工具支持 0…2。
41
+ - `色温`:工具的冷暖校正量,支持 −30…+30,正数提红压蓝;不是开尔文值。
78
42
 
79
- ### 怎么处理
43
+ 这些范围是内置工具的处理范围,不是画面质量标准。需要更大或更精细的校正时使用调色工具。
44
+ 先试小幅校正,再看渲染结果和相同区域的测量;不要用固定系数把整片均值差直接换算成校正量。
45
+ 人物身份漂移、错误光源或缺失动作应交回上游。
80
46
 
81
- 1. **先量,再看,两样都做。** 逐镜取整段的平均 RGB 与亮度,把数字排成一列;
82
- 再拼一张接触图用眼睛过一遍。数字会漏掉「只有暗部偏色」这种局部问题,
83
- 眼睛会漏掉缓慢的整体漂移——本套件在这两个方向上都栽过。
84
- 2. **选一条作基准,别求全组一致。** 通常选信息最重的那一镜(有台词的、有转折的)。
85
- 把明显偏离的那一两条拉向它,不要把七条都往中间挪——那会让原本对的镜也被动过。
86
- 3. **在剪辑单里写下来。** 在那一段写 `- 画面:亮度 +0.06;色温 -6`。
87
- 三项的含义:`亮度` 是 −0.25…+0.25 的加法偏移,`饱和` 是倍数,
88
- `色温` 是 −30…+30,正数偏暖(提红压蓝)。超出范围会被 `check` 拒绝——
89
- 那种幅度不是接镜,是重新调色,应该回上游重出或交给专门的调色工具。
47
+ 生成阶段仍应保持已接受的光线和色调;已有素材只差可校正的曝光或白平衡时,优先评估后期修正。
90
48
 
91
- ### 两条边界
49
+ ## 颗粒
92
50
 
93
- - **工具不会自己量一遍然后偷偷改。** 校正只来自剪辑单里写下来的那一行。
94
- 一个没被写下来的校正,没有任何 reviewer 能看见它改了什么、为什么改。
95
- - **接镜救不了错的镜。** 曝光差一档可以拉回来;人物身份漂了、光的方向变了、
96
- 该有的次级光整个没有——这些回上游重出,不要用色彩校正去盖。
51
+ 项目需要时,在交付规格写 `- 颗粒:6`;不写或写「无」就不加。
52
+ 内置工具支持 0–20 的动态噪点强度,在拼接后对整片统一应用。
53
+ 这是一种可选质感处理,不保证产生胶片效果,也不能修复身份、动作和光线错误。
54
+ 需要按场景区别处理时,使用外部调色工具并记录决定。
@@ -1,113 +1,60 @@
1
1
  # 声音、字幕与音乐
2
2
 
3
- 画面接缝靠取舍解决,声音接缝不会自己解决。逐镜生成的素材各自带着一整套声音,直接拼接会在
4
- 每一个剪辑点留下一道能听见的断层——即使画面切得干净。
3
+ ## 声音接缝
5
4
 
6
- ## 音床硬切
5
+ 在相邻镜头拼接后回听底噪、混响、环境声和音乐是否突然变化。
6
+ 可按需要采用音轨交叉淡入、连续环境底、对白与画面分离或补充音乐。
7
+ 保留有叙事作用的静默、音效和相对响度。
7
8
 
8
- 有声模型在生成画面的同一次里烧进环境声。两段素材各自的底噪、混响和环境层不同,拼接处就会
9
- 听到一次「换房间」的感觉。这个缺陷在逐镜审片时完全听不出来,只在成片上出现。
9
+ **内置工具范围**:`edit_tool.py render` 保留素材原声并可做整片响度标准化;
10
+ CUT 的 `声音` 行是剪辑说明,工具不解析它,不执行静音、交叉淡入、配乐进入或 ducking。
11
+ 需要这些处理时用 ffmpeg 或剪辑软件另行完成,记录命令或工程及实际输出;完成后再验收。
12
+ 不能把写下声音方案或 render 成功当成已经混音。
10
13
 
11
- 三条处理路径,按代价排序:
12
-
13
- 1. **在生成阶段避免。** 视频提示词阶段声明非叙事音乐不由单镜承载(对应该阶段的音乐规则),
14
- 让每段素材只带必要的叙事声音。这是最干净的做法,但要在生产之前决定。
15
- 2. **在剪辑点做短交叉淡入。** 只处理音轨,不动画面。适合底噪差异不大的相邻段。
16
- 3. **铺一层统一的环境底。** 把各段原声压低到统一水平,再补一条贯穿全片的环境层。
17
- 代价是丢掉一部分逐段的声音细节,且这是一个明显的创作决定,要写进剪辑单的「声音」行。
18
-
19
- 选哪条取决于差异有多大,先测再选:逐段测底噪水平,差异小的用第 2 条,差异大的才考虑第 3 条。
20
-
21
- ## 台词必须能听见
22
-
23
- 成片里每一句留下来的台词都要完整可听。检查方式是**在成片上**重新转写一遍,逐句对照剧本原文:
24
-
25
- - 少一句 → 某一刀切掉了它,或者它被别的声音盖住了。
26
- - 半句 → 边界切在了句中,回去按发声区间重定。
27
- - 转写结果和原文有出入 → 转写工具的误差,也可能是生成时口型/发音本身就不清楚。
28
- 分辨方法是听,不是看转写文本。转写只是筛子,不是判据。
29
-
30
- 转写做在成片上,不做在逐段素材上。逐段都对、拼起来丢了一句,正是这一步要抓的情况。
14
+ ## 响度
31
15
 
32
- ### 重出一条素材之后,绑在它上面的字幕时间全部作废
16
+ 两遍测量不保证归一化后恰好达到目标。线性增益会超过峰值或动态范围目标时,
17
+ `loudnorm` 会退回动态处理;短片和稀疏音效仍需测量编码后的实际 LUFS 与真峰。
18
+ 内置归一化输出使用 48 kHz,避免动态处理的内部升采样直接决定 AAC 采样率。
19
+ 不达标时按声音设计通过外部工具处理瞬态、限幅或混音,再核对成片;不要把目标值当实测值。
33
20
 
34
- 字幕时间是从**那一条**素材的发声区间反推出来的。重出之后——不管是因为画质、因为动作不对、
35
- 还是只想换个表演——新的一条发声位置几乎一定不同,而旧的窗口还留在剪辑单里。
21
+ ## 台词与时间
36
22
 
37
- 这件事没有任何别的环节会发现:数字仍然落在区间内,`render` 照常成功,成片上字幕就出现在
38
- 没有人说话的时刻。本套件实测过一次:重出后发声区间从素材内 0.90 秒挪到 2.51 秒,
39
- 字幕比口型早了 1.6 秒,是外部审片者看出来的,不是任何检查抓到的。
23
+ 先在源素材上定位发声区间,再在成片上逐句回听,核对留下的台词完整、可辨。
24
+ 转写可以辅助查漏和定位,最终文字按剧本核对,识别有出入时回听确认。
40
25
 
41
- 所以:**重出之后先重测发声区间,再改字幕时间,然后才重渲。**
42
- `check` 会在素材文件比剪辑单新时报出来——那是文件系统能看见的唯一一种陈旧,
43
- 不能代替你自己重测,但至少不让它无声地过去。
26
+ 重出素材会改变发声位置,应重测相关字幕时间并更新剪辑单。
27
+ `check` 会提示素材比剪辑单新;这个时间戳检查不能证明字幕已经重新对齐。
44
28
 
45
29
  ## 字幕
46
30
 
47
- 竖屏短剧默认硬字幕。
48
-
49
- 字幕文字**逐字取自 `剧本.md`**,不取自转写结果。转写只提供时间。标点可以按字幕排版惯例调整——
50
- 句末句号通常去掉——但一个字都不能改。这条是结构规则,不是偏好:
51
- 转写会把人名或成语听成同音的另一个词,一旦进了字幕,成片上就出现一句剧本里根本不存在的
52
- 台词,而且没有任何环节会再发现它。
31
+ 竖屏短剧默认硬字幕,服从用户的字幕选择。
32
+ 字幕文字逐字取自《剧本.md》,标点可按字幕惯例调整。转写仅辅助定位,不覆盖原文。
53
33
 
54
- 其它几条:
34
+ - 一句过长时可拆成多个先后显示的字幕条。
35
+ - 一镜有多句时使用 `字幕 1`、`字幕 2` 等编号,每句给出时间。
36
+ - 字幕时间相对本 CUT 的入点,不相对源素材起点;落在该段使用区间内。
37
+ - 累计成片位置使用渲染后各段的实际时长,避免帧边界取整产生漂移。
38
+ - 抽帧检查字号、折行、安全区和画内文字遮挡。
55
39
 
56
- - 一行的字数按可读性定,不按句子结构定;一句话太长就**断成几条字幕先后显示**,
57
- 不要让一条字幕在屏上堆成三行、挂五秒——那已经不是字幕,是字幕墙。
58
- - **一镜可以有好几句。** 一次三个来回的对话是一个过肩镜头,不是三个镜头;
59
- 剪辑单里用编号写法把每一句各自写下来并各自带时间。只写一条,另外两句在成片上就没有字幕,
60
- 而且没有任何一步会报错——观众听得见、看不见。
61
- - **字号写在画面像素里,不要再按画面高度乘一遍。** 字幕文件里的字号已经是相对
62
- `PlayRes` 的单位,渲染时会再缩放一次。本套件第一版按画面高度算了字号,于是放大了两次:
63
- 1344 高的竖屏上本该 46px 的字变成约 161px,字幕被推到画面中部,长句两端切掉。
64
- `edit_tool.py` 现在自己写 ASS 并把 `PlayRes` 声明成实际画幅,一个单位就是一个像素。
65
- - 字幕的出入时间跟随发声区间,不跟随剪辑点。
66
- - **字幕时间按实际渲染出来的分段累加,不按剪辑单里声明的时长累加。** 每段落在帧边界上,
67
- 比声明值长几毫秒;按声明值累加会一路漂移,八段之后能差三分之一秒,字幕于是在人还没说完时就消失。
68
- - 画内已有文字(屏幕、招牌、聊天记录)的位置要避开,不要让字幕压在需要看清的信息上。
69
- - 有画内文字要求的镜头,字幕位置在剪辑单的「字幕」行里写明。
40
+ 内置 ffmpeg 路线用实际画幅作为 ASS PlayRes,字号按该画幅像素计算。
41
+ 它采用全片统一样式,CUT 的字幕行不支持位置指令;需要逐镜避让或更复杂排版时,
42
+ 用外部字幕编辑器或修改 Remotion 字幕层,并对输出抽帧检查。
70
43
 
71
- ### 两条渲染路线
44
+ ### 渲染路线
72
45
 
73
- `edit_tool.py` 的 `--subtitles` 选哪一条:
74
-
75
- | | `ffmpeg`(默认) | `remotion` |
46
+ | 路线 | 适用范围 | 开销 |
76
47
  |---|---|---|
77
- | 依赖 | 无 | Node + 一次 `npm install`,工作区在项目外 |
78
- | 排版 | 白字黑描边,够用 | 字重、描边、行距、安全区、折行、入场动画都可调 |
79
- | 改样式 | 改 `edit_tool.py` 的 ASS 样式 | 改 CSS,`npx remotion studio` 当场可见 |
80
- | 开销 | 一次滤镜,秒级 | **成片每一帧都过一遍无头浏览器**,分钟级,吃内存 |
81
- | 许可 | — | Remotion 个人与小团队免费,超出规模需商业授权 |
82
-
83
- 两条都只渲染字幕层,画面本身不经过浏览器重绘。**默认走 `ffmpeg`**,长片尤其;只有排版
84
- 确实要求更多(加粗、描边层次、逐句入场)、而且片子不长时才换 `remotion`——它的叠层逐帧
85
- 过无头浏览器,并发默认压在 2,调高之前先量本机。装法与代价见
86
- [Remotion 字幕叠层](../assets/remotion/README.md)。
87
-
88
- 无论走哪条,字幕文字仍然逐字来自 `剧本.md`。
89
-
90
- ## 响度
91
-
92
- 成片统一做一次响度标准化,目标写在剪辑单开头的交付规格里。
93
-
94
- 逐段素材的响度差异很大,因为它们是分别生成的。不做统一的结果是观众在播放中途反复调音量,
95
- 而这件事在工作环境里几乎察觉不到——工作时是逐段听的,逐段听不出整体起伏。
96
-
97
- 标准化在最后一步做,做在已经拼接和混音完成的成片上。对逐段素材分别标准化会破坏段间本来
98
- 正确的相对关系(一段耳语和一段喊叫会被拉到同一响度)。
48
+ | `ffmpeg`(默认) | 统一的白字黑描边样式 | 需要带 libass 的 ffmpeg |
49
+ | `remotion` | 需要修改 CSS、字重、折行或入场动画 | Node 依赖,逐帧浏览器渲染;并发默认 2 |
99
50
 
100
- ## 时间线音乐
51
+ Remotion 安装与样式调整见 [字幕叠层](../assets/remotion/README.md)。
52
+ 两条路线都要在实际成片上检查字幕。
101
53
 
102
- 生产阶段把音乐的落点、循环、淡入淡出和对白 ducking 交给剪辑,因为供应商通常不能精确承诺
103
- 时长。到这里要做的是:
54
+ ## 响度与时间线音乐
104
55
 
105
- 1. 按视频提示词文档里已确认的音乐意图,决定进入点和退出点——通常对着一个画面事件,
106
- 不对着一个整秒。
107
- 2. 长度不够就循环,循环点选在乐句边界上,不选在剪辑点上。
108
- 3. 有台词的段落把音乐压低,在台词发声区间之外恢复。恢复时机跟着句尾停顿走,
109
- 不要在句子中间的换气处就抬起来。
110
- 4. 音乐不填补沉默。剪辑单里写明是沉默的段落就保持沉默——那是一个创作决定,不是待填的空白。
56
+ 在剪辑单写交付响度;混音完成后对整片标准化并测量输出。
57
+ 同时回听对白与环境的相对关系,整片响度达标不代表各句都清楚。
111
58
 
112
- 音乐素材本身不在本阶段生产。需要新的音乐回 `$short-drama-produce`,歌词与音乐意图回
113
- `$short-drama-video-prompts`。
59
+ 时间线音乐按已接受意图选择进入、退出、循环与对白压低区间。
60
+ 素材不足时回生产阶段补齐;具体混音通过外部工具执行,并在剪辑单留下可复现记录。
@@ -4,13 +4,8 @@
4
4
  `剧集/<EP>/制作成果/成片/` 的成片与中间文件。它继承镜序、镜头职责、台词原文和已生产的素材
5
5
  字节,不回写剧本、视觉设定、分镜或视频提示词。
6
6
 
7
- 剪辑单不是第六份创作文档。五文档回答「这一集是什么」,剪辑单只回答「已经拿到的这些素材,
8
- 哪些帧进成片」。因此它可以整镜不用、可以只取一段素材的中间三秒,但不能改变任何一镜的职责、
9
- 台词、起终状态或时长声明——那些改动必须回到拥有它们的上游文档,再重新进入生产。
10
-
11
- 素材与文档不一致是本阶段的正常输入,不是要修好才能开工的前置条件。上游写「三秒推进到特写」,
12
- 生成结果只有前一秒可用,剪辑记录下这个事实并做出取舍;把不一致原样报告回去,比在剪辑里假装
13
- 它不存在更有价值。
7
+ 剪辑单记录素材取舍、时间与后期处理。可以缩短、重排或省略素材,但不回写上游的台词、
8
+ 镜头职责和状态;确需改变故事内容时交由上游修订。
14
9
 
15
10
  ## 本阶段规则
16
11
 
@@ -21,20 +16,21 @@
21
16
  | EDT-01 | structural_invariant | Every `CUT-...` binds one existing `MOTION-...` and one currently readable media file; a cut with no material source cannot exist. |
22
17
  | EDT-02 | structural_invariant | 入点, 出点 and 时长 are self-consistent (`出点 - 入点 == 时长`), non-negative, and the 出点 does not exceed the source file's measured duration. |
23
18
  | EDT-03 | structural_invariant | Editing selects and orders existing frames. It never rewrites dialogue, shot purpose, start/end state, or any upstream declared duration; a needed semantic change is reported to the owning document instead. |
24
- | EDT-04 | structural_invariant | A dialogue line that survives into the cut survives whole. A cut boundary may not fall inside a spoken word, and a line's audible span is fixed before its picture in/out is chosen. |
25
- | EDT-05 | structural_invariant | Every line spoken in the cut gets its own subtitle cue — a shot carrying an exchange of three carries three, not one. Every character of a burned subtitle comes from the line as written in `剧本.md`; punctuation may follow subtitle convention (a trailing full stop is normally dropped) but not one character changes. Transcription locates a line in time; it never becomes the line. |
19
+ | EDT-04 | reviewed_invariant | Dialogue retained in the film remains audibly complete. Picture may cut during a line if the sound remains continuous and the narrative is clear. Separate picture and audio editing requires an external tool; the built-in renderer trims them together. |
20
+ | EDT-05 | structural_invariant | When subtitles are requested, every retained spoken line has a cue derived verbatim from the screenplay; punctuation may follow subtitle convention. Transcription locates speech but does not replace the source text. |
26
21
  | EDT-06 | structural_invariant | Two cuts drawn from the same source file do not overlap in source time. Deliberate repetition is declared as repetition and states why the second appearance still earns its place. |
27
22
  | EDT-07 | reviewed_invariant | Each cut's in-point and out-point land inside that material's usable band, and 取舍 names what is visible at each boundary rather than citing an abstract need for pace. |
28
- | EDT-08 | reviewed_invariant | Adjacent cuts do not share shot size, camera position and movement direction all at once; two cuts carrying the same information are resolved by dropping one, not by halving both. |
29
- | EDT-09 | reviewed_invariant | Time saved by trimming one cut is not redistributed to others to hit a target duration. A shorter film is a result, not a deficit to refill. |
30
- | EDT-10 | reviewed_invariant | Per-shot generated material carries its own ambience or music bed, so every join is checked for an audible sound-bed hard cut and handled by crossfade, common floor, or an upstream request for a music-free deliverable. |
31
- | EDT-11 | reviewed_invariant | Unused material is recorded with a reason that distinguishes a missing file from an unusable result; the two look identical in the document but route to different owners. |
23
+ | EDT-08 | craft_default | Check adjacent cuts for unintended visual jumps and duplicated information. Similar framing, deliberate repetition and jump cuts are valid when they serve the accepted narrative. |
24
+ | EDT-09 | craft_default | Do not mechanically redistribute trimmed time. Extend another beat only when its performance or readability benefits, and preserve explicit delivery-duration requirements. |
25
+ | EDT-10 | reviewed_invariant | Listen to joins for unintended changes in ambience or music. Use an appropriate documented audio treatment when needed; the built-in renderer does not execute prose mixing instructions. |
26
+ | EDT-11 | reviewed_invariant | Record unused shots with a reason: missing material, unusable quality, or an intentional narrative omission. |
32
27
  | EDT-12 | craft_default | The delivered film is loudness-normalized to one declared target, and burned subtitles are the default for vertical short drama. |
33
- | EDT-13 | craft_default | Target duration is intent. The report states the gap between target and actual and why, instead of cutting content to reach a round number. |
28
+ | EDT-13 | craft_default | Distinguish a reference target from a required delivery duration. Report the gap and satisfy a fixed requirement or identify the material needed to do so. |
34
29
  | EDT-14 | taste_option | Cut rhythm, whether a beat is held or clipped, and whether a moment repeats are creator choices; the suite records them and does not treat any of them as defects. |
35
30
  | EDT-15 | structural_invariant | Rendering, duration match and file existence are technical outcomes. None of them may be reported as a statement about whether the film is good; quality goes to review or to the creator. |
36
- | EDT-16 | reviewed_invariant | Generated shots drift in exposure and white balance, so adjacent cuts are compared before delivery and a visible mismatch is corrected. The correction is written in the cut list as a stated creator decision with explicit numbers; the tool never measures a clip and adjusts it on its own, because a correction nobody wrote down is one nobody can review. Shot-matching does not rescue a wrong shot — drifted identity, a changed light direction, or a missing secondary source goes back upstream rather than under a colour correction. |
37
- | EDT-17 | structural_invariant | Subtitle windows are reverse-engineered from one particular take's audio, so regenerating that material voids every window bound to it. Nothing else catches this: the numbers stay in range, the render succeeds, and the subtitle appears while nobody is speaking. Re-measure the spoken span, rewrite the windows, then re-render. `check` reports material newer than the cut list — the only staleness a file system can see — which does not replace re-measuring but stops it passing in silence. |
31
+ | EDT-16 | reviewed_invariant | Compare shots within the same scene and lighting state using comparable image regions. Record corrections, then inspect the output. Whole-frame averages alone do not establish a mismatch; intentional lighting changes are valid. |
32
+ | EDT-17 | structural_invariant | After material is regenerated, re-measure the spoken spans and update its subtitle windows before rendering. The material-mtime warning is a prompt to check, not proof of alignment. |
33
+ | EDT-18 | taste_option | Optional grain is declared once in the delivery spec and applied dynamically after assembly by the built-in renderer. Its supported range is a tool limit, not a quality standard; other treatments may use external grading tools. |
38
34
 
39
35
  规则分级由高到低:`structural_invariant`(结构缺陷,阻断)、
40
36
  `reviewed_invariant`(需证据判断)、`craft_default`(常用做法,可覆盖)、