@wji.ai/cli 0.7.1 → 0.8.0

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.
@@ -0,0 +1,447 @@
1
+ ---
2
+ title: "電影/短劇混音指引(Film & Short-Drama Sound Mixing Guideline)"
3
+ subtitle: "AI 短劇製作版:WJI + Seed Audio(配樂)× Seedance(影片連內置聲音)"
4
+ date: "2026-10-11"
5
+ ---
6
+
7
+ # 0. 點樣用呢份指引
8
+
9
+ - 每一節都按「**定義 → 場景例子 → 點用 → 幾時用/幾時唔好用**」寫。
10
+ - 所有響度(loudness)同電平數字都有標明出處,用 **[S#]** 表示,對應文末〈參考來源〉。**如果唔同來源講法唔同,會直接寫明。** 冇正式來源嘅地方(例如 ducking 要壓幾多 dB),會寫明「冇標準數字,靠耳朵判斷」,唔會作數字出嚟。
11
+ - 標示「**建議(推論)**」嘅位置,係根據已引用標準推出嚟嘅做法,唔係任何平台嘅官方規格。
12
+
13
+ ---
14
+
15
+ # 1. 聲軌結構(Stem Structure)
16
+
17
+ 業界把聲音分成三大類 **D / M / E**:Dialogue(對白)、Music(音樂)、Effects(效果)。Netflix 要求 5.1 原語言版本交 Dialog、Music、Effects 三條 stems,**三條加埋要等於 5.1 混音**;Atmos 物件同 bed 要標成 “Dialog”、“Narration”、“Group ADR”、“Music”、“Effects”、“Backgrounds”、“Foley” 等組別 [S1]。
18
+
19
+ ## 1.1 DX — 對白(Dialogue)
20
+
21
+ - **定義**:所有台詞,包括現場收音(production dialogue / PFX 裡面嘅對白)、ADR(後期配音)、旁白(narration / VO)、Group ADR(群眾配音)。
22
+ - **場景例子**:茶餐廳兩個人吵交,兩句主要台詞+背景另一枱人講嘢(後者屬 group/walla)。
23
+ - **點用**:DX 係全片嘅「錨」(anchor)。美國 ATSC A/85 同 AES 都建議長片用「錨元素(Anchor Element,通常係對白)」嚟量度響度 [S7][S8];Netflix 亦用對白門控(dialog-gated)量度 [S1]。所以混音一定**先定對白位置,其他聲音圍住佢擺**。
24
+ - **幾時唔好**:唔好將對白同音樂、效果混埋一條無法分拆嘅軌(AI 影片內置聲音就有呢個問題,見第 9 節)。
25
+
26
+ ## 1.2 MX — 音樂(Music)
27
+
28
+ | 類型 | 中文 | 定義 | 例子 |
29
+ |---|---|---|---|
30
+ | BGM (Background Music) | 背景音樂 | 亞洲製作常用講法,泛指襯底音樂;英文業界多講 score / underscore | 男女主對望時嘅鋼琴襯底 |
31
+ | Score / Underscore | 配樂、原創配樂 | 為該片作曲、角色聽唔到嘅非劇情音樂(non-diegetic) | 追逐戲嘅弦樂 |
32
+ | Source music / Diegetic music | 現場音樂、劇情內音樂 | 聲源喺故事世界入面(收音機、酒吧樂隊)[S12] | 酒吧電視播緊嘅流行曲 |
33
+ | Needle drop | 授權現成歌曲 | 直接用一首現成錄音(commercial track),可以係 source 亦可以係 score 用途 | 結尾 montage 放一首廣東歌 |
34
+
35
+ - **點用**:source music 要「放入空間」——跟住畫面位置、加房間殘響、透過門牆時削高頻。iZotope 舉例「隔離屋傳嚟嘅音樂」:削高頻、推低頻 [S11]。Score 則通常乾淨、闊、唔跟空間。
36
+ - **幾時唔好**:需要聽清楚對白嘅位置唔好用人聲歌(有歌詞嘅 needle drop 同對白會「打交」);Netflix 亦把有可辨認歌詞嘅片段列為 M&E 嘅 optional 處理 [S2]。
37
+
38
+ ## 1.3 FX — 效果(Effects)
39
+
40
+ 包括 Hard FX、Foley、Backgrounds(BGs)、Design FX 等,詳見第 3 節。Netflix 將 “Effects”、“Backgrounds”、“Foley” 列為可獨立標示嘅組別 [S1]。
41
+
42
+ ## 1.4 M&E(Music & Effects)
43
+
44
+ - **定義**:除咗對白之外嘅所有聲音,用嚟做外語配音版。
45
+ - **Netflix 要求**:要「fully filled」——原本藏喺對白軌入面嘅環境聲同 Foley 都要補返(fill),「主混音入面任何非對白聲音都要喺 M&E 出現」;音樂電平完全唔准改 [S1][S2]。帶語言嘅 walla、角色嘅呼吸/喘氣、唱歌人聲等放 **Optional Tracks** [S2]。
46
+ - **場景例子**:街市戲,現場收音裡面有叫賣聲(有語言)同人群雜聲;M&E 要用冇語言嘅 walla 補返人群感,叫賣聲放 optional track。
47
+ - **幾時用**:要賣海外、要出普通話/英文配音版,就一定要做。純粹只出一個廣東話版本上社交平台,可以唔做,但**保留分軌工程檔**都係好習慣。
48
+
49
+ ## 1.5 Mix Stems 與 Printmaster
50
+
51
+ - **Mix stems**:最終混音按 D / M / E(或更細)分開輸出,每條已經帶齊混音處理;**全部 stems 加埋=printmaster** [S1]。
52
+ - **Printmaster(PM)**:最終完整混音母帶。Netflix 嘅 printmaster、M&E、stems 可以帶標準 8 秒 Academy leader 同 2-pop [S1]。
53
+ - **例子**:一集 2 分鐘短劇,交:`EP01_PM_2.0.wav`、`EP01_DX.wav`、`EP01_MX.wav`、`EP01_FX.wav`、`EP01_ME.wav`。
54
+ - **規格參考**:Netflix 原語言 mix/M&E/stems 要 48 kHz / 24-bit、無壓縮 LPCM WAV/BWAV [S1]。
55
+
56
+ ---
57
+
58
+ # 2. BGM vs BGE:亞洲製作用語
59
+
60
+ | 縮寫 | 全寫 | 中文 | 對應英文業界用語 |
61
+ |---|---|---|---|
62
+ | BGM | Background Music | 背景音樂、配樂 | Score / underscore / music |
63
+ | BGE | Background Effects(亦有人讀作 Background Environment) | 背景音效、環境聲 | Backgrounds (BGs)、Ambience、Atmos |
64
+ | SE | Sound Effect(s) | 效果音、音效 | SFX / FX |
65
+
66
+ - **重要說明**:**BGE 唔係國際標準術語**,冇任何標準組織(EBU、AES、SMPTE)正式定義。佢係日本、中國內地、香港製作現場、音效庫分類同 cue sheet 常見嘅習慣寫法,意思大致等於英文嘅 **Backgrounds / Ambience**。日本相關用語可作旁證:日本遊戲工具 RPG Maker 將「BGS」定義為「背景音(環境音)」(雨聲、街道嘈雜聲、火燒聲)[S19];日本作曲學校解釋「環境音(アンビエンス)係效果音嘅一種,製造場所嘅空氣感」[S20]。我搵唔到一個權威來源專門定義「BGE」,所以同外國團隊溝通時,**請改用 BGs / Ambience**,避免誤會。
67
+ - **BGE 底下包含**:
68
+ - **Ambience / Atmos(環境聲)**:持續嘅空間聲——風、雨、冷氣機、街道車聲、蟬叫。
69
+ - **Room tone(房間底噪)**:「冇人講嘢時」嗰個房間本身嘅聲,用嚟填補對白剪接之間嘅空隙,令剪接位唔會突然靜晒 [S21]。
70
+ - **Walla(人群雜聲)**:聽唔清內容嘅群眾低語。Netflix 規定冇語言嘅 walla 留喺 M&E 主體,有可辨認語言嘅放 optional track [S2]。
71
+ - **Backgrounds (BGs)**:英文後期對以上整類嘅統稱。
72
+ - **場景例子**:深夜醫院走廊——BGM=低沉 pad;BGE=冷氣機 hum+遠處監察儀嘀嘀聲+偶爾護士站 walla。
73
+ - **點用**:BGE 決定「觀眾覺得自己喺邊」。每個場景至少一層 BG loop;轉場換 BG 就等於換地方。
74
+ - **幾時唔好**:BGE 唔好大聲到搶對白頻段;情緒高峰(例如表白)可以刻意抽走 BGE 做「主觀靜」效果。
75
+
76
+ ---
77
+
78
+ # 3. SFX — 效果聲
79
+
80
+ | 類別 | 定義 | 場景例子 | 幾時用 | 幾時唔好用 |
81
+ |---|---|---|---|---|
82
+ | Hard effects(硬效果) | 同畫面動作逐格對位嘅具體聲:關門、車門、槍聲、手機震 | 女主「啪」一聲合上手提電腦 | 每個觀眾會「期待聽到」嘅動作 | 畫面已有 AI 內置同一聲時,唔好再疊一層(會 phasing/雙響) |
83
+ | Design effects(設計效果) | 現實中唔存在或經誇張處理嘅聲:超自然、回憶閃回、時間停頓 | 重生穿越一刻嘅「嗡——」 | 類型片、奇幻、情緒放大 | 寫實對白戲,太多會好假 |
84
+ | Foley(擬音) | 跟住畫面重新錄製嘅日常聲:footsteps 腳步、cloth/moves 衣服摩擦、props 道具 [S20][S21] | 高跟鞋行入辦公室、西裝摩擦、放低咖啡杯 | 令角色「有重量」、M&E 必須補齊 [S2] | 遠景、或配樂主導嘅 montage 可以省略 |
85
+ | Sound design(聲音設計) | 整體構思並創作聲音世界嘅工作,唔只係一粒聲 | 為「霸總」角色設計一套低頻、厚實嘅出場聲標記 | 建立風格、角色主題 | — |
86
+ | Whoosh(呼嘯聲) | 物件/鏡頭快速移動嘅風聲 | 快速 swish pan、文字飛入 | 動態轉場、鏡頭運動 | 每個 cut 都加會好廉價 |
87
+ | Riser(升調音效) | 音高/音量逐步上升,製造期待 | 揭曉身世前 3 秒 | 鋪墊 reveal、cliffhanger | 連續用會麻木 |
88
+ | Impact / Hit(撞擊) | 短促、重低頻嘅「咚」 | 巴掌、真相揭曉、標題出現 | 情緒重拍、剪接重拍 | 對白中間(會蓋過字) |
89
+ | Stinger(刺點音效) | 一兩秒嘅短音樂/音效,標記戲劇時刻 | 「你居然係我親生仔?!」後一下 stinger | 劇情轉折、喜劇 punchline | 每句都加 |
90
+ | Transition(轉場音效) | 連接兩場戲嘅聲音(whoosh、reverse cymbal、tape stop) | 由回憶跳返現在 | 時空轉換 | 寫實、平靜嘅剪接 |
91
+
92
+ ---
93
+
94
+ # 4. 劇情內/劇情外聲音(Diegetic / Non-diegetic / Meta-diegetic)
95
+
96
+ - **Diegetic(劇情聲)**:聲源屬故事世界,角色聽得到,可以喺畫內(on-screen)或畫外(off-screen)——對白、物件聲、劇中收音機音樂(source music)[S12]。
97
+ - 例子:角色開收音機,播出情歌。
98
+ - **Non-diegetic(非劇情聲)**:聲源喺故事世界之外,角色聽唔到——旁白、情緒配樂、為戲劇效果加嘅音效 [S12]。
99
+ - 例子:表白時嘅弦樂 swell。
100
+ - **Meta-diegetic(後設/主觀劇情聲)**:學者 Claudia Gorbman 喺 *Unheard Melodies*(1987)提出,指只存在於某角色腦海嘅聲音——回憶、幻想、幻聽 [S13]。
101
+ - 例子:女主聽到男友把聲(其實係回憶),周圍環境聲逐漸消失。
102
+ - **點用**:FilmSound.org(摘自 Bordwell & Thompson《Film Art》)指出,玩弄劇情/非劇情界線可以製造驚嚇(恐怖片)或意外(喜劇)[S12]。常見技巧:音樂由「劇情內收音機」平滑變成「全闊配樂」(source → score),表示角色投入情緒。
103
+ - **處理差別**:diegetic 要跟空間(加 reverb、跟 pan、隔牆削高頻);non-diegetic 通常乾淨、闊、唔跟畫面位置;meta-diegetic 常用濾波、殘響、壓走環境聲嚟表達「主觀」。
104
+
105
+ ---
106
+
107
+ # 5. 混音技巧(Mix Techniques)
108
+
109
+ ## 5.1 Ducking 與 Sidechain
110
+
111
+ - **定義**:Ducking=有對白時自動壓低音樂/BGE。Sidechain=用另一條軌(對白)嘅訊號觸發壓縮器。
112
+ - **例子**:BGM 一路播,角色開口時 BGM 自動降低,講完回升。
113
+ - **點用**:iZotope 文章做法:喺音樂 bus 放 sidechain compressor,由對白 bus 送訊號觸發,「等對白自己控制音樂電平」[S11]。進階:只壓音樂嘅 1.5–4 kHz 頻段(多頻段壓縮,sidechain 由對白觸發),即係「只在有對白時挖走語音清晰度頻段」[S11]。
114
+ - **壓幾多 dB?** 冇標準數字,按耳朵:對白清楚、而音樂唔會明顯「抽動」(pumping)為準。
115
+ - **幾時唔好**:音樂本身係情緒主角(冇對白嘅 montage)時唔好 duck;動作快嘅對白戲如果 duck 太快會聽到音樂一上一落,改用手動 automation。
116
+
117
+ ## 5.2 EQ carving(為對白挖頻)
118
+
119
+ - **定義**:喺音樂/效果度削低同對白相撞嘅頻段。
120
+ - **來源數據**:iZotope 指出通常係削音樂嘅 **1–4 kHz**,而語音清晰度集中喺 **1.5–4 kHz** [S11]。
121
+ - **問題**:靜態削 EQ 會令冇對白時音樂發悶,所以用上面嘅動態(sidechain 多頻段)做法更好 [S11]。
122
+
123
+ ## 5.3 壓縮(Compression)
124
+
125
+ - iZotope 建議:「呢個唔係搖滾」,壓縮唔好多過約 **-6 dB gain reduction**;bus limiter 唔多過約 **-2 dB** [S11]。對白對過度壓縮特別敏感,句尾變細聲可用 clip gain 逐句扶起 [S11]。
126
+ - Netflix 建議 dialog LRA(響度範圍)≤ 10 LU、全片 LRA 4–18 LU 播放效果最好 [S1]——即係對白要相對平穩,但全片可以有起伏。
127
+
128
+ ## 5.4 Reverb/空間匹配(Space matching)
129
+
130
+ - **定義**:令 ADR、AI 生成對白、Foley 聽落同畫面空間一致。
131
+ - **例子**:iZotope 例子:籃球場嘅 ADR 要加 reverb 先夾到畫面 [S11]。電話聲、廣播聲用 EQ/失真做「futz」[S11]。
132
+ - **幾時唔好**:旁白(VO)通常保持乾淨,唔加場景殘響。
133
+
134
+ ## 5.5 Panning 與 LCR 規則(對白放中間)
135
+
136
+ - **規則**:主要對白放 **Center(C)聲道**。Dolby 解釋:只用 center 喇叭可以令每個座位嘅觀眾都聽到穩定嘅中央聲像;phantom center(L/R 平均)就要求觀眾坐正中,家中同車上好難做到;可以把 center 嘅 reverb 擴散到 L/R,避免太窄 [S10]。
137
+ - **立體聲(2.0)**:對白 L/R 等量=正中;Netflix 要求 2.0 Lo/Ro 要「mono compatible」[S1]。
138
+ - **幾時例外**:畫外角色喺畫面最左右邊緣、或刻意製造方位感時可輕微偏 pan,但短劇(手機)建議對白一律正中。
139
+
140
+ ## 5.6 Surround 與 LFE 基本
141
+
142
+ - **LFE(.1)**:專門嘅低頻效果聲道;Dolby Digital 嘅 LFE 頻寬 3–120 Hz [S10];校準時 LFE 每個 1/3 倍頻帶比全頻喇叭高 **10 dB** [S10];consumer 低音管理分頻點要求 80 Hz [S10]。Dolby 亦提醒 LFE「未必係唯一或最好嘅重低音手段」[S10]。
143
+ - **5.1 → 2.0 縮混(Netflix)**:Center -3 dB 放入 L、R;Surround 最少 -3 dB 摺入對應 L/R;LFE 可選以 -8 至 -12 dB 加入,並 200 Hz 或以下低通 [S1]。Netflix Best Practices 亦指 ITU-R BS.775-1(LFE 靜音)係國際標準縮混 [S1]——**兩個做法對 LFE 處理唔同,交貨前要問清楚**。
144
+ - **短劇**:手機外放基本冇低頻,**唔好將重要資訊只放喺 LFE/超低頻**。
145
+
146
+ ## 5.7 Automation(自動化)
147
+
148
+ - 逐句、逐場畫 fader 曲線。iZotope 指 automation 配合適度動態處理可以補償大量電平變化 [S11]。
149
+ - 例子:BGM 喺對白前 0.5 秒先開始下降,對白完後慢慢回升(比 sidechain 更自然)。
150
+
151
+ ## 5.8 Crossfade(交叉淡化)
152
+
153
+ - 剪接位兩段聲重疊淡入淡出,避免「咔」聲。BGE 換場用較長 crossfade;對白剪接用極短 crossfade+room tone 填底。
154
+
155
+ ## 5.9 J-cut、L-cut、Pre-lap、Sound bridge
156
+
157
+ - **Split edit(分離剪接)**:聲畫唔同時切換。Apple Final Cut Pro 說明:J-cut=下一場聲音先出現,L-cut=上一場聲音延續到下一個畫面 [S15]。
158
+ - **Pre-lap**:即 J-cut 嘅用法——下一場對白/聲音提早出現。例子:仲見緊男主喺辦公室,已經聽到下一場女主喺醫院嘅一句「醫生點講?」
159
+ - **Sound bridge(聲音橋)**:用一段聲(音樂、環境、對白)連住兩場戲,令觀眾感覺連續;通常用 J/L-cut 實現。
160
+ - **幾時唔好**:喜劇 punchline、驚嚇位通常要硬切(hard cut)先夠力。
161
+
162
+ ## 5.10 Hard cut to silence 與對比(Contrast)
163
+
164
+ - **定義**:喺最大聲嗰刻突然完全靜音,或者由靜突然大聲。
165
+ - **例子**:車禍前一刻所有聲突然消失,只剩心跳;或者 cliffhanger 最後一個字出完即黑畫+靜。
166
+ - **點用**:「靜」要靠前面嘅「滿」嚟襯托;靜音時建議保留極低 room tone 以免觀眾以為壞機(純數碼零聲喺某些平台會好突兀)——但刻意全靜都可以,係創作選擇。
167
+ - **幾時唔好**:唔好喺每集重複同一招。
168
+
169
+ ---
170
+
171
+ # 6. 響度與電平(Loudness & Levels)
172
+
173
+ ## 6.1 基本概念
174
+
175
+ - **LUFS / LKFS**:兩者相同,都係 ITU-R BS.1770 嘅響度單位;EBU 用 LUFS,ITU 用 LKFS [S3][S6]。1 LU=1 dB 差距。
176
+ - **Integrated loudness(整體響度)**:成個節目平均響度,BS.1770 量度設有門控:絕對門限 -70 LKFS、相對門限低於平均 10 LU [S18](EBU 2011 年將相對門限由 -8 改為 -10 LU [S3])。
177
+ - **True Peak(dBTP,真峰值)**:用超取樣估計樣本之間嘅真實峰值;BS.1770 定義算法 [S6]。
178
+ - **Dialogue-gated loudness(對白門控響度)**:只計有對白時段嘅響度。Netflix 用 BS.1770-1 dialog-gated [S1];ATSC A/85 長片用「錨元素」(通常對白)量度 [S7][S18]。
179
+ - **LRA(Loudness Range)**:響度起伏範圍(EBU Tech 3342)。
180
+
181
+ ## 6.2 主要標準與平台數字(全部有出處)
182
+
183
+ | 用途 | 響度目標 | 真峰值上限 | 量度方式 | 來源 |
184
+ |---|---|---|---|---|
185
+ | 戲院(Theatrical) | **冇 LKFS 要求**;以 85 dB SPL 參考監聽電平混音 | 可到 0 dBTP | 校準:粉紅噪音參考電平時前方每聲道 85 dBC、film 房 surround 82 dBC | Netflix [S1];Dolby [S10] |
186
+ | Netflix 串流(near-field 5.1/2.0/Atmos) | **-27 LKFS ±2 LU**(對白門控) | **-2 dBTP**(建議 limiter 設 -2.3) | BS.1770-1 dialog-gated,全片量度;監聽 79 或 82 dB SPL | [S1] |
187
+ | Netflix:對白少於 15% 嘅節目 | -24 LKFS ±2 LU(全節目) | -2 dBTP | BS.1770-3/-4 | [S1] |
188
+ | 歐洲廣播 EBU R128 | **-23.0 LUFS ±0.5 LU**(直播 ±1 LU) | **-1 dBTP** | 全節目 | [S3] |
189
+ | 電影內容上廣播/串流(EBU R128 s4) | 預設全節目 -23 LUFS;或對白錨定最高 -23 LUFS(全節目可因此高至約 -18 LUFS) | -1 dBTP | 全節目或對白錨定 | [S5] |
190
+ | 美國電視 ATSC A/85 | **-24 LKFS**(約 ±2 dB 量度誤差可接受) | 低於 **-2 dBTP** | 長片:錨元素(對白) | [S7] |
191
+ | 日本(AES 表列) | -24 ±1 LKFS | -1 dBTP | 全節目 | [S8] |
192
+ | OTT/網上影片(AES TD1006) | 跟所在地區廣播規格;**最大響度建議 -16 ±1 LUFS** | -1 dBTP | — | [S8] |
193
+ | 串流(EBU R128 s2) | 首選照 -23 LUFS 播出;如冇 metadata,過渡期可用 **-20 至 -16 LUFS** | (跟 R128) | — | [S4] |
194
+ | 純音頻串流(AES TD1008,非影片) | 有語音內容約 -18 LUFS;音樂 -16 LUFS | — | — | [S9] |
195
+ | YouTube | **官方未公佈目標**;只會調低過大聲嘅影片,唔會推高過細聲嘅;可喺 “Stats for nerds” 睇 content loudness | — | 自家算法 | [S16] |
196
+ | TikTok/抖音/Reels/小紅書 | **搵唔到官方公佈嘅響度規格**(查閱 TikTok 開發者上載指引時未見響度要求) | — | — | [S22] |
197
+
198
+ **來源之間嘅差異(要留意):**
199
+
200
+ 1. 串流目標由 **-27(Netflix 對白門控)** 到 **-23/-24(歐美廣播)** 到 **-16(AES OTT 上限、EBU s2 過渡上限)**,相差超過 10 LU——**量度方法唔同(對白門控 vs 全節目)都會令數字唔可直接比較**。
201
+ 2. 真峰值:EBU/AES 用 -1 dBTP [S3][S8];ATSC 同 Netflix 用 -2 dBTP [S7][S1]。ATSC 解釋 -2 dBTP 係為下游有損編碼留空間 [S7];EBU 亦指出不同發行系統同低碼率可能需要更低峰值 [S3]。
202
+ 3. 戲院冇響度目標,靠校準監聽電平(85 dB SPL)控制 [S1][S10];家用 near-field 用 79/82 dB SPL [S1]。Dolby 指電視混音參考 79–82 dBC,因為家居平均收聽電平約 70–75 dBC [S10]。
203
+
204
+ ## 6.3 建議(推論):交貨版本
205
+
206
+ > 以下係根據上表推出嚟嘅實務建議,**唔係任何平台官方規格**。
207
+
208
+ | 版本 | 建議目標 | 依據 |
209
+ |---|---|---|
210
+ | 社交平台直版短劇(抖音/TikTok/Reels/Shorts) | Integrated 約 **-16 LUFS**,True Peak **≤ -1 dBTP**(想多啲有損編碼安全空間可用 -2 dBTP) | AES TD1006 OTT 上限 -16 ±1/-1 dBTP [S8];EBU R128 s2 過渡範圍 -20 至 -16 [S4];ATSC 對有損編碼留空間嘅理由 [S7] |
211
+ | 交電視台(香港/海外) | **向播映方索取規格**;冇規格時:歐洲 -23 LUFS/-1 dBTP,美國 -24 LKFS/-2 dBTP | [S3][S7] |
212
+ | 交 Netflix 類串流 | -27 LKFS ±2 LU 對白門控,-2 dBTP | [S1] |
213
+
214
+ **實務提醒**:先做一個「有動態、對白穩定」嘅 master,再按平台輸出不同響度版本,**唔好用一個極大聲嘅版本通殺**——YouTube 等平台會將過大聲嘅片調低,大聲版本只會失去動態而唔會更大聲 [S16]。
215
+
216
+ ---
217
+
218
+ # 7. 工作流程次序(Workflow Order)
219
+
220
+ 參考 Boom Box Post(美國動畫後期公司)嘅流程 [S14] 同 iZotope [S11],加入電影常見步驟:
221
+
222
+ | # | 步驟 | 做乜 | AI 短劇對應 |
223
+ |---|---|---|---|
224
+ | 1 | Picture lock(剪接定稿) | iZotope:未鎖定剪接唔好開始混音 [S11] | Seedance 片段剪好、唔再改長度 |
225
+ | 2 | Spotting session(定點會議) | 同導演/監製睇一次,逐場傾聲音要求、每個時刻要乜 [S14] | 自己睇一次,列 cue sheet:邊度要 BGM、stinger、靜 |
226
+ | 3 | Dialogue edit(對白剪輯) | 揀 take、清噪、補 room tone、標記要 ADR 嘅句子 | 檢查 AI 對白:口型、字錯、音質爆裂(Seedance 官方承認仍有偶發失真)[S17] |
227
+ | 4 | ADR(後期配音) | 重錄唔可用嘅對白,並配合場景空間 [S11] | 用 TTS/重新生成,或真人配音覆蓋 |
228
+ | 5 | Foley | 腳步、衣服、道具 | 只補 AI 冇生成或生成得差嘅 |
229
+ | 6 | SFX edit(效果剪輯) | Hard FX、BGs、design FX | 加 stinger、whoosh、impact;**避免重複** AI 已有嘅聲 |
230
+ | 7 | Music edit(音樂剪輯) | 剪 BGM 長度、對準剪接點、做 swell/ending | Seed Audio BGM 剪成每場一段,對準情緒點 |
231
+ | 8 | Premix / Pre-dub(預混) | 先各自平衡 DX、MX、FX;Boom Box Post 形容係「洗車」,大部分功夫喺呢度 [S14] | 分別處理 AI 原聲 bus、BGM bus、SFX bus |
232
+ | 9 | Final mix(終混) | 精修、按客戶意見調整 [S14];iZotope 建議實時播放輸出而唔係 offline bounce,以便全程聽一次 [S11] | 全集由頭聽到尾,手機+耳機各一次 |
233
+ | 10 | QC(品質檢查) | 響度、真峰值、同步、爆音、靜音位、縮混 | 用響度表量 integrated/TP |
234
+ | 11 | Deliverables(交付) | Printmaster、stems、M&E、不同響度版本 | 社交版+存檔分軌 |
235
+
236
+ ---
237
+
238
+ # 8. 短劇專用章節(Short-Drama Specific)
239
+
240
+ ## 8.1 直版 9:16 與手機外放
241
+
242
+ - **現實**:大部分觀眾用手機外放或耳機、喺嘈雜環境睇。AES 嘅流動裝置初步測試發現:-24/-20/-16 LKFS 三個目標喺安靜環境都聽得清,但嘈雜環境下「某種動態範圍控制係需要嘅」[S8]。EBU 亦提到流動裝置增益同 headroom 不足係串流用較高響度嘅原因 [S4]。
243
+ - **做法**:
244
+ 1. **對白優先、動態收窄**:對白要穩(參考 Netflix dialog LRA ≤10 LU 嘅精神 [S1]),社交短劇可以再窄啲(推論,冇官方數字)。
245
+ 2. **唔好靠低頻表達重點**:手機外放細喇叭重播唔到深低頻;impact 要加中高頻「頭」(click/transient)先聽到。
246
+ 3. **單聲道兼容(mono compatible)**:Netflix 要求 2.0 要 mono compatible [S1];手機外放、藍牙喇叭好多時接近單聲道,寬立體聲效果(相位處理)可能抵消。用 mono 監聽檢查。
247
+ 4. **字幕唔等於可以犧牲對白**:好多人靜音睇,但開聲嘅觀眾一聽唔清就滑走。
248
+
249
+ ## 8.2 喜劇節奏(Comedy hit timing)
250
+
251
+ - **Punchline sting**:笑位一句講完**之後**先入 sting(短促音效/音樂),唔好蓋住最後一隻字。
252
+ - **Rimshot**(「咚咚—嚓」):老派、自嘲式笑位;短劇用嚟做「冷笑話」效果。
253
+ - **常見手法**:笑位前一刻把 BGM 抽走(record scratch/tape stop),製造真空,punchline 後再入一個搞笑 BGM。
254
+
255
+ ## 8.3 愛情 Swell(Romance swell)
256
+
257
+ - **定義**:音樂喺情緒高峰(擁抱、表白、對望)逐漸加大、加樂器層次。
258
+ - **做法**:swell 嘅高峰對準動作(kiss/擁抱)或剪接點;對白期間 BGM 要壓低,講完先爆出嚟。可配合 BGE 抽走(主觀化)。
259
+ - **幾時唔好**:對白仲講緊時唔好 swell 到頂。
260
+
261
+ ## 8.4 Cliffhanger:Sting+靜音
262
+
263
+ - 每集最後一句(「其實……我先係你親生媽媽。」)→ 0.2–0.5 秒停頓 → impact/stinger → 黑畫/靜(或只留尾音殘響)。秒數係常見做法參考,冇標準,按節奏調整。
264
+ - 前面 2–3 秒可用 riser 推高張力,然後**硬切到靜**(hard cut to silence),令觀眾想撳下一集。
265
+
266
+ ## 8.5 中式短劇常見聲音套路(Tropes)
267
+
268
+ | 套路 | 典型聲音處理 |
269
+ |---|---|
270
+ | 霸總出場 | 慢動作+低頻 impact+厚重 BGM(常見 trap/epic 鼓),腳步 Foley 放大 |
271
+ | 打臉/逆襲 | 巴掌 impact+短 stinger+BGM 突然轉調或爆出 |
272
+ | 身份揭曉(真千金、戰神歸來) | riser → impact → 靜 → 主題 BGM 入 |
273
+ | 重生/穿越 | design FX(嗡鳴、倒轉、心跳)+濾波、殘響(meta-diegetic 處理) |
274
+ | 回憶殺 | 環境聲淡出、對白加殘響/濾波、柔和鋼琴 BGM |
275
+ | 心動瞬間 | 心跳聲+風鈴/閃光音效+romance swell |
276
+ | 震驚反應鏡頭 | 「當!」stinger 或 whoosh+zoom 同步 |
277
+ | 喜劇反差 | record scratch、烏鴉叫、rimshot |
278
+
279
+ ## 8.6 對應 AI 流程:Seedance 內置聲音+Seed Audio BGM
280
+
281
+ **背景**:Seedance 2.0 官方說明佢採用「音畫聯合生成」架構,輸出雙聲道(立體聲)聲音,支援背景音樂、環境音效同角色配音「多軌並行輸出」並對齊畫面節奏;官方亦承認仍有「偶發音頻失真」[S17]。實際你攞到嘅檔案可能係**已混埋嘅一條立體聲**,要先確認你嘅平台/版本能否分開下載各軌(我未能核實你用嘅介面)。
282
+
283
+ **建議流程(推論):**
284
+
285
+ 1. **生成時控制**:喺 Seedance prompt 寫明「無背景音樂」(no background music),只要對白+環境聲(Seedance 官方示例亦有 “no background music” 嘅寫法 [S17])。咁 BGM 全部由 Seed Audio 控制,避免兩層音樂打交。
286
+ 2. **軌道結構**:
287
+ - Bus A — **AI 原聲(DX+BGE)**:Seedance 輸出。
288
+ - Bus B — **BGM**:Seed Audio(WJI)生成嘅配樂床(bed)。
289
+ - Bus C — **加料 SFX**:stinger、whoosh、impact、補 Foley。
290
+ 3. **Duck BGM**:Bus B 放 sidechain compressor(或多頻段 1.5–4 kHz),key input=Bus A [S11]。**注意**:Bus A 入面有環境聲,環境聲都會觸發 ducking——如果 BGE 太大聲,BGM 會成日被壓。解決:用 automation 手畫,或用語音分離工具抽出對白做 sidechain 源。
291
+ 4. **避免重複 SFX(doubling)**:加任何 SFX 前,先 solo 聽 AI 原聲有冇已經生成咗(關門、腳步、雨聲)。兩個唔完全同步嘅同一聲會變「雙響」或相位抵消。原則:**AI 有而且夠好 → 唔加;AI 有但弱 → 輕輕疊一層同步嘅加強;AI 冇 → 補。**
292
+ 5. **場與場之間嘅一致性**:每段 Seedance 片(最長 15 秒 [S17])嘅環境聲同對白音色可能唔同。做法:(a) 每段之間 crossfade BGE;(b) 全場鋪一條統一嘅 BG loop 喺 AI 原聲之下,遮蓋接駁位;(c) 對白 bus 用一致嘅 EQ/壓縮令音色統一。
293
+ 6. **BGM 剪接**:Seed Audio BGM 要按場景剪,情緒點(揭曉、表白)對準音樂重拍或 swell;cliffhanger 前 BGM 硬停。
294
+ 7. **最後**:量響度(見第 6.3 節),手機外放+耳機各聽一次。
295
+
296
+ ---
297
+
298
+ # 9. 詞彙表(Glossary)
299
+
300
+ | Term | 中文 | 一句解釋 |
301
+ |---|---|---|
302
+ | DX / Dialogue | 對白 | 所有台詞(現場、ADR、旁白) |
303
+ | MX / Music | 音樂 | 配樂、現場音樂、授權歌曲 |
304
+ | FX / SFX | 效果聲 | 所有非對白、非音樂嘅聲 |
305
+ | D/M/E | 對白/音樂/效果 | 三大分軌類別 |
306
+ | Stem | 分軌 | 某類聲音嘅獨立混音輸出 |
307
+ | M&E | 音樂及效果版 | 冇對白嘅完整版本,用嚟配外語 |
308
+ | Optional track | 可選軌 | 帶語言、配音時可能要換嘅聲(walla、呼吸、歌聲) |
309
+ | Printmaster (PM) | 最終混音母帶 | 完整終混檔 |
310
+ | BGM | 背景音樂 | 亞洲用語,襯底配樂 |
311
+ | BGE | 背景音效/環境聲 | 亞洲習慣用語,非國際標準,約等於 BGs/Ambience |
312
+ | BGs / Backgrounds | 背景聲 | 英文後期對環境聲類嘅統稱 |
313
+ | Ambience / Atmos | 環境聲、氛圍聲 | 持續空間聲(風、車、冷氣) |
314
+ | Room tone | 房間底噪 | 空房間本身嘅聲,用嚟填對白空隙 |
315
+ | Walla | 人群雜聲 | 聽唔清內容嘅群眾低語 |
316
+ | Group ADR | 群眾配音 | 後期錄製嘅群眾聲 |
317
+ | Score / Underscore | 原創配樂 | 為片創作、角色聽唔到嘅音樂 |
318
+ | Source music | 現場音樂 | 劇情內有聲源嘅音樂 |
319
+ | Needle drop | 授權歌曲 | 直接使用現成錄音 |
320
+ | Hard effects | 硬效果 | 同動作逐格對位嘅具體聲 |
321
+ | Design effects | 設計效果 | 誇張或虛構嘅聲音 |
322
+ | Foley | 擬音 | 跟畫面重錄嘅腳步、衣服、道具聲 |
323
+ | Footsteps | 腳步聲 | Foley 主要一類 |
324
+ | Cloth / Moves | 衣服摩擦聲 | Foley 一類 |
325
+ | Props | 道具聲 | Foley 一類(杯、鎖匙、紙) |
326
+ | Sound design | 聲音設計 | 構思及創作整體聲音世界 |
327
+ | Whoosh | 呼嘯聲 | 快速移動/轉場風聲 |
328
+ | Riser | 升調音效 | 逐漸上升製造期待 |
329
+ | Impact / Hit | 撞擊聲 | 短促重拍 |
330
+ | Stinger / Sting | 刺點音效 | 標記戲劇時刻嘅短聲 |
331
+ | Rimshot | 鼓邊笑點聲 | 「咚咚嚓」喜劇標記 |
332
+ | Transition | 轉場聲 | 連接兩場戲嘅效果 |
333
+ | Swell | 音樂漸強 | 情緒高峰嘅音樂推高 |
334
+ | Diegetic | 劇情聲 | 角色聽得到嘅故事內聲音 |
335
+ | Non-diegetic | 非劇情聲 | 角色聽唔到(配樂、旁白) |
336
+ | Meta-diegetic | 主觀劇情聲 | 只存在角色腦海嘅聲音 |
337
+ | On-screen / Off-screen | 畫內/畫外 | 聲源喺唔喺畫面內 |
338
+ | Ducking | 避讓壓低 | 有對白時壓低音樂 |
339
+ | Sidechain | 側鏈 | 用另一條訊號觸發處理器 |
340
+ | EQ carving | 挖頻 | 削走相撞頻段 |
341
+ | Compression | 壓縮 | 收窄動態範圍 |
342
+ | Limiter | 限幅器 | 防止超過峰值上限 |
343
+ | Reverb | 殘響 | 模擬空間反射 |
344
+ | Futz | 失真化處理 | 電話、對講機效果 |
345
+ | Panning | 聲像定位 | 左右/環繞位置 |
346
+ | LCR | 左中右 | 前方三聲道 |
347
+ | Phantom center | 幻象中置 | L/R 等量產生嘅中間聲像 |
348
+ | LFE | 低頻效果聲道 | 5.1 嘅 .1 |
349
+ | 5.1 / 7.1.4 / Atmos | 環繞聲格式 | 多聲道/物件式格式 |
350
+ | Lo/Ro | 立體聲縮混 | 一般立體聲 fold-down |
351
+ | Downmix / Fold-down | 縮混 | 多聲道縮成少聲道 |
352
+ | Automation | 自動化 | 記錄推子/參數變化 |
353
+ | Crossfade | 交叉淡化 | 兩段聲重疊過渡 |
354
+ | J-cut | J 型剪接 | 聲音早過畫面出現 |
355
+ | L-cut | L 型剪接 | 聲音延續到下一畫面 |
356
+ | Pre-lap | 預先入聲 | 下一場聲音提前出現 |
357
+ | Sound bridge | 聲音橋 | 用聲音連接兩場戲 |
358
+ | Hard cut to silence | 硬切靜音 | 突然完全靜 |
359
+ | LUFS / LKFS | 響度單位 | BS.1770 響度量度單位 |
360
+ | LU | 響度單位差 | 1 LU=1 dB |
361
+ | Integrated loudness | 整體響度 | 全節目平均響度 |
362
+ | Dialogue-gated | 對白門控 | 只計對白時段 |
363
+ | Anchor element | 錨元素 | 量度響度嘅參考元素,通常對白 |
364
+ | True Peak (dBTP) | 真峰值 | 樣本間真實最高電平 |
365
+ | LRA | 響度範圍 | 節目響度起伏 |
366
+ | dBFS | 數碼滿刻度分貝 | 0 dBFS=數碼最高 |
367
+ | dB SPL / dBC | 聲壓級 | 監聽校準用 |
368
+ | Near-field | 近場 | 家用規模監聽 |
369
+ | Spotting session | 定點會議 | 逐場決定聲音要求 |
370
+ | ADR | 後期配音 | 重錄對白 |
371
+ | Premix / Pre-dub | 預混 | 各類聲音先行平衡 |
372
+ | Final mix | 終混 | 最後整體混音 |
373
+ | Re-recording mixer | 終混混音師 | 負責終混嘅人 |
374
+ | QC | 品質檢查 | 交貨前技術檢查 |
375
+ | Deliverables | 交付物 | 要交嘅檔案清單 |
376
+ | 2-pop / Leader | 同步嗶聲/片頭 | 對位用 |
377
+ | Picture lock | 剪接定稿 | 畫面唔再改長度 |
378
+ | Cue sheet | 音樂/聲音清單 | 記錄每段聲音位置 |
379
+
380
+ ---
381
+
382
+ # 10. 一頁混音檢查清單(Quick Mix-Pass Checklist)
383
+
384
+ **開工前**
385
+ - [ ] 畫面已 lock;session 幀率=影片幀率 [S11];48 kHz / 24-bit [S1]
386
+ - [ ] 分好 bus:DX(AI 原聲)/BGE/MX(BGM)/SFX/Foley
387
+ - [ ] 做咗 spotting:列出每個 stinger、swell、靜音、cliffhanger 位置
388
+
389
+ **對白(DX)**
390
+ - [ ] 每句對白清楚,手機外放都聽得明
391
+ - [ ] 對白放正中(2.0 L/R 等量;5.1 放 C)[S10]
392
+ - [ ] 壓縮適度(約 ≤ 6 dB GR)[S11];句尾冇跌失
393
+ - [ ] AI 對白冇爆音、失真、錯字 [S17]
394
+
395
+ **音樂(MX)**
396
+ - [ ] BGM 有 duck 或 automation 避開對白 [S11]
397
+ - [ ] 冇兩層音樂同時播(Seedance 已設 no BGM)
398
+ - [ ] Swell/sting 對準情緒點,冇蓋住 punchline 最後一隻字
399
+
400
+ **效果(FX/BGE)**
401
+ - [ ] 冇重複 AI 已生成嘅 SFX(solo 檢查)
402
+ - [ ] 每段 15 秒片之間環境聲冇斷層(crossfade/BG loop)
403
+ - [ ] Impact 有中高頻,手機都聽到
404
+
405
+ **空間與轉場**
406
+ - [ ] ADR/補錄對白殘響同畫面空間一致
407
+ - [ ] J-cut/L-cut/sound bridge 用得其所;笑位驚嚇位用硬切
408
+ - [ ] Cliffhanger:riser → 最後一句 → sting → 靜
409
+
410
+ **技術 QC**
411
+ - [ ] 量 Integrated loudness 同 True Peak:社交版建議(推論)約 -16 LUFS、≤ -1 dBTP [S4][S8];其他平台按 6.2 表
412
+ - [ ] Mono 檢查冇抵消 [S1]
413
+ - [ ] 手機外放+耳機+(如有)喇叭各聽一次
414
+ - [ ] 頭尾冇爆音、冇 click、冇意外靜音
415
+ - [ ] 實時播放一次全集(唔只睇波形)[S11]
416
+
417
+ **交付**
418
+ - [ ] Printmaster+DX/MX/FX stems(加埋=PM)[S1]
419
+ - [ ] 如要海外配音:fully filled M&E+optional tracks [S2]
420
+ - [ ] 檔名有版本、響度標記(例:`EP01_PM_2.0_-16LUFS_v2.wav`)[S11]
421
+
422
+ ---
423
+
424
+ # 參考來源(Sources)
425
+
426
+ - **[S1]** Netflix, *Sound Mix Specifications & Best Practices*(OC-1-6, 2024-10-29)— https://partnerhelp.netflixstudios.com/hc/en-us/articles/360001794307-Netflix-Sound-Mix-Specifications-Best-Practices-v1-5
427
+ - **[S2]** Netflix, *M&E Creation & Delivery Guidelines* — https://partnerhelp.netflixstudios.com/hc/en-us/articles/115006122187-M-E-Creation-Delivery-Guidelines
428
+ - **[S3]** EBU, *R 128 – Loudness Normalisation and Permitted Maximum Level of Audio Signals*(V5, Nov 2023)— https://tech.ebu.ch/docs/r/r128.pdf
429
+ - **[S4]** EBU, *R 128 s2 – Loudness in Streaming*(2023)— https://tech.ebu.ch/files/live/sites/tech/files/shared/r/r128s2.pdf
430
+ - **[S5]** EBU, *R 128 s4 – Loudness Normalisation of Cinematic Content*(2023)— https://tech.ebu.ch/files/live/sites/tech/files/shared/r/r128s4.pdf
431
+ - **[S6]** ITU-R, *BS.1770-5 – Algorithms to measure audio programme loudness and true-peak audio level*(11/2023)— https://www.itu.int/rec/R-REC-BS.1770
432
+ - **[S7]** ATSC, *A/85:2013 Techniques for Establishing and Maintaining Audio Loudness for Digital Television*(with Corrigendum No. 1)— https://www.atsc.org/wp-content/uploads/2025/06/A85-2013-with-Corrigendum-No-1.pdf ;ATSC 於 2026-07 發佈修訂版,見 https://www.atsc.org/atsc-documents/a85-techniques-for-establishing-and-maintaining-audio-loudness-for-digital-television/ (本指引數字取自 2013 版本文;交美國電視前請核對新版)
433
+ - **[S8]** AES, *TD1006.1.17-10 Loudness Guidelines for OTT and OVD Content* — https://aes.org/wp-content/uploads/2024/01/AESTD1006_1_17_10.pdf
434
+ - **[S9]** AES, *TD1008.1.21-9 Recommendations for Loudness of Internet Audio Streaming and On-Demand Distribution* — https://aes.org/community/technical-council/technical-document-aestd1008/ ;摘要:Production Expert — https://www.production-expert.com/production-expert-1/aes-update-loudness-recommendations-for-audio-only-streaming
435
+ - **[S10]** Dolby Laboratories, *5.1-Channel Production Guidelines* — https://www.associationdesmixeurs.fr/wp-content/uploads/2015/10/Dolby-5.1-Channel-Production-Guidelines.pdf
436
+ - **[S11]** iZotope, *Mixing Audio for Video, Part 4: Mixing Techniques*(2018)— https://www.izotope.com/en/learn/mixing-audio-for-video-part-4-mixing-techniques
437
+ - **[S12]** FilmSound.org, *Diegetic and non-diegetic sounds*(摘自 Bordwell & Thompson, *Film Art*;Reisz & Millar, *The Technique of Film Editing*)— https://www.filmsound.org/terminology/diegetic.htm
438
+ - **[S13]** Claudia Gorbman, *Unheard Melodies: Narrative Film Music*(Indiana University Press, 1987);相關討論:Kučinskas, *Diegetic Ambiguity of Film Music*(LMTA *Ars et Praxis*)— https://xn--urnalai-cxb.lmta.lt/wp-content/uploads/2020/04/Ars-et-praxis-VI_Kucinskas.pdf
439
+ - **[S14]** Boom Box Post, *Step-By-Step Audio Post-Production Workflow*(2022)— https://www.boomboxpost.com/blog/2022/4/26/step-by-step-audio-post-production-workflow
440
+ - **[S15]** Apple, *Create split edits in Final Cut Pro for Mac* — https://support.apple.com/en-gb/guide/final-cut-pro/ver1632d82c/mac
441
+ - **[S16]** Ian Shepherd / Production Advice, *YouTube Stats For Nerds – volume normalization values* — https://productionadvice.co.uk/stats-for-nerds/
442
+ - **[S17]** ByteDance Seed, *Seedance 2.0 Official Launch*(2026-02-12)— https://seed.bytedance.com/en/blog/seedance-2-0-official-launch
443
+ - **[S18]** TV Technology, *Measuring Content for CALM Compliance* — https://www.tvtechnology.com/opinions/measuring-content-for-calm-compliance
444
+ - **[S19]** RPG ツクールMV 用語(BGM/BGS/ME/SE)— http://tkoolmv.blogspot.com/p/terms.html
445
+ - **[S20]** JBG音楽院, 効果音 (SE) の作り方(環境音=アンビエンス、フォーリー)— https://jbg-ongakuin.com/staff-blog/20250628/
446
+ - **[S21]** Tools for Film, *Audio Glossary*(room tone、Foley)— https://www.toolsforfilm.com/glossary/audio
447
+ - **[S22]** TikTok for Developers, *Media Transfer Guide*(上載格式指引;查閱時未見響度要求)— https://developers.tiktok.com/docs/en/content-posting-api-media-transfer-guide
@@ -0,0 +1,89 @@
1
+ # Score and mix the edited video (default: BGM + BGE + Ambience + Sound design)
2
+
3
+ Use for every episode of a project in `params.audioTrack: post` (the default) once its clips are edited into a locked cut, and whenever the user hands over a finished or rough-cut video and asks to "add a mix / 加混音 / 配樂". The clips are generated without music, segment by segment, so music and sound design are made here, once, over the whole edit — that is the only place a cue can carry across a cut. AI video (Seedance with audio on) already carries **dialogue, Foley and diegetic SFX**, so the default job adds only the layers the video lacks.
4
+
5
+ **With a project on disk**, start from the planned spotting sheet: `$SD prompt <project> score E01` (SMPTE rows for the scene beds, every line, each segment's music cues, the `post: true` sound design, the sfx already in the clips, the hook / turns / 爽点 / cliff, and the ≤120 s sections). Then conform it to the edit in Step 1 — trims and re-timed clips move every row after them. Full theory, loudness standards and sources: `film-mixing-guideline.md` (sections 2, 5, 6, 8).
6
+
7
+ ## Default layer policy
8
+
9
+ | Layer | 中文 | Default | Notes |
10
+ | --- | --- | --- | --- |
11
+ | BGM / score | 配樂 | **ADD** | Non-diegetic music, one intent per story section, ducked under dialogue |
12
+ | BGE / BGs | 背景環境聲 | **ADD** | Location bed (city, office HVAC, KTV corridor bass, rain). Continuous; covers clip seams |
13
+ | Ambience / room tone | 環境底/房間底噪 | **ADD** | Fills dead air and 15 s clip joins; matches the space |
14
+ | Sound design | 聲音設計 | **ADD** | Non-literal: risers, whooshes, stingers, impacts, drones, hits, reverses, silence drops |
15
+ | Dialogue (DX) | 對白 | **KEEP from video** | Never regenerate or cover |
16
+ | Foley | 擬音 | **KEEP from video** | Do not double footsteps, cloth, props |
17
+ | Hard SFX | 實體音效 | **KEEP from video** | Add only if the user asks, or a story hit is clearly missing in the video (note it as an exception) |
18
+
19
+ Rule: if the video already has it, don't add it again. Listen first and list what the video already carries before writing a single cue.
20
+
21
+ ## Step 1. Analyse the video (local, free; no WJI)
22
+
23
+ ```bash
24
+ V=input.mp4
25
+ ffprobe -v error -show_entries format=duration:stream=codec_type,r_frame_rate,codec_name -of json "$V"
26
+ # shot cuts (tune 0.3–0.4)
27
+ ffmpeg -i "$V" -vf "select='gt(scene,0.35)',showinfo" -an -f null - 2>&1 | grep -oE 'pts_time:[0-9.]+'
28
+ # existing audio loudness + where it goes quiet
29
+ ffmpeg -i "$V" -af ebur128=peak=true -f null - 2>&1 | tail -15
30
+ ffmpeg -i "$V" -af silencedetect=n=-40dB:d=0.4 -f null - 2>&1 | grep -E 'silence_(start|end)'
31
+ ```
32
+
33
+ Then get a beat map: who speaks when, what happens, where the jokes, turns and cliff land (watch the video with the video-analysis helper, or read the locked script and storyboard if the project has them). Note dialogue spans: BGM must duck there.
34
+
35
+ Conforming the planned sheet: match each `segment` row to the detected cut where that clip starts in the edit, shift every row of that segment by the difference, drop rows that fell in trimmed frames, and re-snap music cues and `post` hits to the nearest detected cut (±2 frames).
36
+
37
+ ## Step 2. Story structure 起承轉合 → music map
38
+
39
+ | Part | 作用 | Typical sound move |
40
+ | --- | --- | --- |
41
+ | 起 Setup | establish place, tone | BGE + ambience first, BGM **enter** soft or late; establish the theme |
42
+ | 承 Development | build, complicate | BGM **swell** gradually; add pulse/drone layers; comedy: pizzicato, duck-and-sting |
43
+ | 轉 Turn / twist | reversal, reveal, 打臉 | **drop** or **silence** 0.3–1.5 s, then **stinger / impact / riser hit** exactly on the reveal frame |
44
+ | 合 Resolution / cliff | payoff or cliffhanger | romance: swell + resolve; comedy: button sting; cliff: near-silence + one iconic hit, unresolved chord, hard **out** |
45
+
46
+ Short-drama grammar: hit the 爽點 on the frame, keep one music intent per section, contrast beats loudness (silence before a hit makes it land), and the mix must read on a phone speaker (dialogue intelligible, low end not relied on).
47
+
48
+ ## Step 3. Timecode cue sheet (SoT)
49
+
50
+ Format every cue with **both** SMPTE timecode `HH:MM:SS:FF` at the video's frame rate and seconds to 0.1 s (Seed Audio's dialogue timing precision is ~100 ms). Frame = round(seconds × fps). Snap hits to detected cut times.
51
+
52
+ ```
53
+ Project: <name> Video: <file> Duration: 00:02:19:00 (139.0 s) FPS: 24 Section split for Seed Audio: ≤120 s
54
+
55
+ | # | TC in | TC out | sec in–out | 起承轉合 | Layer | Action | Description |
56
+ |---|------------|------------|---------------|---------|--------------|---------|-------------|
57
+ | 1 | 00:00:00:00| 00:01:06:00| 0.0–66.0 | — | BGE | bed | neon KTV booth, muffled corridor bass, low hum |
58
+ | 2 | 00:00:00:12| 00:00:10:00| 0.5–10.0 | 起 | BGM | enter | light comedy pizzicato, tipsy wobble |
59
+ | 3 | 00:00:10:00| 00:00:25:00| 10.0–25.0 | 承 | BGM | duck | duck under dialogue (amount by ear) |
60
+ | 4 | 00:00:46:01| 00:00:46:12| 46.0–46.5 | 轉 | Sound design | silence | music drop to silence before reveal |
61
+ | 5 | 00:00:46:12| 00:00:48:00| 46.5–48.0 | 轉 | Sound design | sting | SPECIAL: sharp impact + glass-ring sting on reveal frame |
62
+ | 6 | 00:02:15:00| 00:02:19:00| 135.0–139.0 | 合 | BGM | out | cliff: unresolved chord, hard out on last frame |
63
+ ```
64
+
65
+ Actions: `enter | swell | duck | drop | silence | sting | riser | whoosh | out | bed`. Mark hero moments `SPECIAL:` so QC can find them.
66
+
67
+ ## Step 4. Seed Audio prompts (Operator runs them)
68
+
69
+ - One Seed Audio job per ≤120 s section; split at a scene change or a music silence, never mid-phrase. Local time 0 = section start; write the offset in the header.
70
+ - **Bed mode, no voices**: "No dialogue, no vocals, no lyrics, no Foley, no footsteps, no hard sound effects already in the picture."
71
+ - Write timeline lines `[start s:end s]` from the cue sheet: BGE/ambience continuous first, then BGM cues, then sound-design hits. Leave dialogue spans quiet ("music ducks under dialogue").
72
+ - Default model `seed-audio-1.0` (confirm live). Prompt ≤2048 chars. Package for the Operator: prompt files, durations, section offsets, credit estimate.
73
+ - If the user only wants BGM, drop BGE/ambience/sound-design lines and say "instrumental BGM only".
74
+
75
+ ## Step 5. Mix spec (for whoever lays it under the video)
76
+
77
+ - Dialogue is the anchor: centred; everything sits under it.
78
+ - BGM ducks under dialogue via sidechain from the video's audio (or automation on the dialogue spans from Step 1). No standard fixes the dB; judge by ear.
79
+ - BGE/ambience low and continuous; crossfade across clip seams.
80
+ - Targets: social / mobile vertical ≈ −16 LUFS integrated, true peak ≤ −1 dBTP (a recommendation derived from AES TD1006 / EBU R128 s2, not a platform rule). Netflix-style long form: −27 LKFS dialogue-gated, ≤ −2 dBTP. Broadcast EBU: −23 LUFS, ≤ −1 dBTP. See `film-mixing-guideline.md` §6.
81
+
82
+ ## Step 6. Soft-QC
83
+
84
+ - Duration matches section; offsets align with timecode (check the hits against the cut list, ±2 frames).
85
+ - No accidental vocals or dialogue (use spectrogram; ASR on music hallucinates, ignore nonsense text).
86
+ - No doubled Foley or SFX against the video.
87
+ - 起承轉合 arc audible; every `SPECIAL:` hit present at its timecode.
88
+ - Loudness measured with `ffmpeg -af ebur128=peak=true` on the final mix.
89
+ FAIL → Producer before any paid regen.
@@ -20,7 +20,7 @@ node {baseDir}/scripts/short-drama.mjs <cmd> {project} …
20
20
  | `checkup` | `short-drama.mjs checkup {project}` — same, but prints the passing and skipped rows too |
21
21
  | `seed` | `short-drama.mjs seed {project} script --ep N [--force]` · `… seed {project} storyboard --ep N [--force]` |
22
22
  | `render` | `short-drama.mjs render {project} outline \| guideline \| character C01 \| scene S01 \| prop P01 \| script --ep N \| dialogue --ep N \| segment E01-01` |
23
- | `prompt` | `short-drama.mjs prompt {project} segment E01-01 [--json]` · `… prompt {project} audio E01-01 [--full\|--bed]` · `… prompt {project} voice C01` |
23
+ | `prompt` | `short-drama.mjs prompt {project} segment E01-01 [--json]` · `… prompt {project} audio E01-01 [--full\|--bed]` · `… prompt {project} score E01 [--fps 24] [--json]` (post soundtrack spotting sheet) · `… prompt {project} voice C01` |
24
24
  | `manifest` | `short-drama.mjs manifest {project} [--stage <stage>] [--ep N] [--json]` — exit 2 while anything is unbound |
25
25
  | `bind` | `short-drama.mjs bind {project} [--ep N] <path> <value>` — record a WJI id in the JSON |
26
26
 
@@ -64,7 +64,8 @@ All commands accept either the directory or the `project.json` path.
64
64
  | `maxVideoRefs` / `maxAudioRefs` | per mode | how many clip / voice references the model takes; set them lower to tighten, never higher |
65
65
  | `lookPhraseZh` | empty | the same look phrase in the drama's language, gated in a **Chinese** prompt (`wan`) where the English `lookPhrase` would be both out of place and extra length for the content filter to judge |
66
66
  | `speechLeadSeconds` | 0.5 | added to a cut's dialogue seconds before the fit check — the mouth opens after the cut starts; also where a line starts in the `full` soundtrack prompt |
67
- | `audioTrack` | `bed` | the Seed Audio node per segment: `bed` (ambience + sfx + timed music, no voices), `full` (the bed plus every line in the connected `@Audio1..3` voices — at most three speakers), `none` |
67
+ | `audioTrack` | `post` | where the soundtrack is made. **`post`** (the default): the clips carry dialogue, ambience and in-picture sfx but **no music** (`No music.` / `non_diegetic_music: N/A` / `无配乐`) and no `post: true` sfx — music and sound design cannot carry across separately generated segments, so they are made once over the **edited episode**, on its timecode (`prompt score E01`, then `../short-drama-sound/reference/mix-over-video.md`); no per-segment audio node. `bed` (ambience + sfx + timed music, no voices) / `full` (the bed plus every line in the connected `@Audio1..3` voices — at most three speakers): a Seed Audio node per segment, music in the clip prompt. `none`: no soundtrack work |
68
+ | `scoreFps` | 24 | frame rate `prompt score` writes SMPTE `HH:MM:SS:FF` at (`--fps` overrides); set it to the edit's real fps |
68
69
  | `subtitles` | false | `true` drops the subtitles-off sentence requirement from the prompts |
69
70
  | `maxFrameChars` | 900 | frames longer than this are flagged as padding (advisory) |
70
71
  | `composition` | picked by `init` from the genre (`standard` unless it says 艺术 / 文艺) | what the frame is built for, `COMPOSITION_STYLES`: `standard` or `art-first` (艺术优先: every cut names its devices, ≥ 50 % negative space / symmetry / monumental scale, a wide per segment, a `Composition:` line); a segment may override it with its own `composition`; see `composition-art-first.md` |
@@ -320,7 +321,8 @@ Duration: `Σ lines (chars ÷ charsPerSecond) + Σ actions × actionSeconds`.
320
321
  | `prompt` | the video prompt, shape by `params.video` (below); gate `prompt-hygiene` (no `…`, no ids / paths / notes, subtitles off unless `params.subtitles`, H3 lips-closed clause, sheets-mode `@imageK` per shot) |
321
322
  | `segments[].axis` | `{ between: [C01, C02], workingSide, screenLeft, screenRight }`, required when two or more people appear in the segment |
322
323
  | `segments[].grammar` / `exceptions` | `grammar` (a string or an array) says how the segment is cut — `drama` · `action` · `faceslap` · `comedy`; missing, it is `params.grammar`; the old `action: true` means `action`. Each grammar's rules apply (gates `grammar`, `action`, `faceslap`, `comedy`; advisory `action-advice`, `grammar-advice`) and the prompt carries each grammar's line. `exceptions: [{ rule, reason }]` waives one rule for this segment when the user asks — rules `open-wide` `one-move` `impact-reaction` `no-graphic` `reveal-insert` `reaction-chain` `punchline-reaction` `setup-first` (the old `actionExceptions` still works) |
323
- | `segments[].sound` | `{ ambience, sfx: [{ cut, event }], music }` — ambience identical across a scene's segments; `music` is `N/A`, an intent string, or `{ intent, cues: [{ at: <cut number \| "10.5s">, do: enter \| swell \| duck \| drop \| silence \| out, note }] }` — gate `sound`. `prompt audio E01-01` derives the segment's Seed Audio soundtrack prompt from it (timecoded `[start s:end s]` ambience / sfx / music, plus the lines with `--full`) — gate `audio-track` |
324
+ | `segments[].sound` | `{ ambience, sfx: [{ cut, event, post? }], music }` — ambience identical across a scene's segments; `music` is `N/A`, an intent string, or `{ intent, cues: [{ at: <cut number \| "10.5s">, do: enter \| swell \| duck \| drop \| silence \| out, note }] }` — gate `sound`. An sfx with `post: true` is **sound design outside the story world** (stinger, riser, whoosh, impact hit, reverse cymbal) — never in the clip prompt, made over the edit. In `audioTrack: post` the `music` is the **spotting intent** for the episode score: it never enters the clip, and `prompt score E01` lays it, the post sfx, the lines and the scene beds on the episode timeline. In `bed` / `full`, `prompt audio E01-01` derives the segment's Seed Audio soundtrack prompt from it (timecoded `[start s:end s]` ambience / sfx / music, plus the lines with `--full`) — gate `audio-track` |
325
+ | `wji.assets.edit` / `wji.assets.mix` (episode) | `audioTrack: post` only — the locked edit of the episode (clips cut together, no music) and the final mixed episode (edit + score + sound design). `manifest` asks for the edit once every clip is bound, then for the mix |
324
326
  | `storyboard.visualPlans[]` | `{ sceneIndex, turn, alignment, pressure, progression, rhythm, landing, sound }` for the 爽点 scene and the cliff scene (seeded) — gate `visual-plan` |
325
327
  | `props[].textPolicy` | optional `{ mode: readable \| symbolic \| blank, text }` — gate `text-policy` |
326
328
 
@@ -187,8 +187,8 @@ sample line and its acting direction into the readable 声线 section of `conten
187
187
 
188
188
  **The sample is a dry voice.** Seed Audio is an audio-scene generator — asked for a line it will
189
189
  happily add a room, a score and a coffee machine — so the composed prompt ends its parenthetical
190
- with `干声,无配乐无音效`. The same model makes the segments' soundtrack beds in stage 5
191
- (`prompt audio`), where the room, the score and the coffee machine belong.
190
+ with `干声,无配乐无音效`. The same model makes the episode score over the edit (or the per-segment beds) in stage 5
191
+ (`prompt score` / `prompt audio`), where the room, the score and the coffee machine belong.
192
192
 
193
193
  ### What the voice asset is for
194
194