一鏡到底白模預演 Skill
一句話定位:使用者給圖或給話,本技能出白模影片;白模定稿之後再寫提示詞,白模影片當運動參考一起丟進影片模型。 長運鏡不靠玄學提示詞,靠先把相機怎麼走算清楚、讓使用者親眼看過確認。
0. 運行方式(對外永遠只講這三步)
- 使用者給一張參考圖,或者給一句描述(「10 秒,從我背後繞到側前方,桌上東西先飄起來」)。
- 技能出 3D 白模運鏡預演影片,雙方一起改,直到使用者說「就是這感覺」。
- 定稿後交兩樣東西:白模預演影片 + 詳細影片提示詞,一起丟給 Seedance 2.5 出成片。
內部怎麼算(場景、座標、校驗)是技能的事,不要拿技術細節去要求使用者。完整入口規則、必問項、大白話翻譯表見 references/00-flow-intake-iteration.md,那是本技能的流程總綱,每次觸發先讀它。
1. 六階段主流程(順序不可顛倒)
| 階段 | 使用者做什麼 | 你必須交付什麼 | 過關條件 |
|---|---|---|---|
| ① 接需求 | 給參考圖 / 一句話描述 | 3 句話複述「我理解的一幕」,含主體、運鏡方向、是否漂浮失重 | 使用者說「對」或改一句;畫幅時長確認 |
| ② 探環境 | 二選一(裝 / 不裝) | check_blender.py 探測結果 + 一句話路線說明 | 路線明確,進入 A 或 B |
| ③ 首版白模影片 | 看片 | 能播放的 mp4/webm + 3–4 張關鍵幀 + 「哪裡不對直接說」 | 影片真實出片並交付。只給座標表 = 違約 |
| ④ 對話式迭代 | 用大白話提意見 | v2/v3… 新版本影片 + 1 行變更說明 | 每輪只改一處;使用者明確認可 |
| ⑤ 定稿 + 寫詞 | 確認感覺對了 | 四項校驗 RESULT: PASS + 六欄目提示詞 | 校驗未 PASS 不允許寫詞 |
| ⑥ 出片交付 | 拿走素材去出片 | 白模影片 + 提示詞 + 上傳口徑(影片1=運動參考、圖片1=畫面參考) | 提示詞座標全部來自實測 JSON |
階段 ③④ 允許來回多輪,這是本技能的主體價值:把運鏡問題在 3D 裡改掉,而不是在影片模型裡抽卡。
2. 六條鐵律
- 順序鐵律:建場景 → 白模影片 → 使用者確認 → 再寫提示詞。 片子沒被使用者看過就寫詞,等於廢稿。
- 提示詞只以使用者參考圖為畫面依據。 白模不是畫面參考,只用於鎖定運動、時序、座標;畫質、造型、光影、配色一律回到參考圖。
- 運鏡單向連續。 旋轉角必須單調遞增或遞減,禁止左右折返;折返即失敗,重調曲線。
- 主體永不出畫。 逐幀投影校驗,主體 NDC 必須留在安全框內;主體升空時鏡頭同步上搖。
- 零穿模。 任意兩組運動物體在任意幀的間距小於閾值即失敗;靠「先讓位再升空」「先飛輕物後飛重物」的順序解決,不靠堆密度硬湊。
- 使用者只講人話。 使用者說「再高點」「椅子撞腿了」,你翻譯成參數並只改這一項;不向使用者解釋極角、NDC、AABB。
3. 環境探測與路線選擇(Tip 1:探測建模)
check_blender.py
├─ 已安裝 → 分支 A(Blender,精度最高,可導出逐幀實測資料)
├─ 未安裝
│ ├─ 使用者同意安裝 → 引導可攜版(05-blender-setup.md)→ 分支 A
│ ├─ 使用者已有其他版本/路徑 → 填路徑 → 分支 A
│ └─ 使用者拒絕安裝(或環境無權限、時間緊)→ 分支 B(Three.js 網頁白模)
└─ 分支 B 同樣走完整六階段,只拿「運動參考」,校驗與寫詞口徑完全一致
安裝引導的說話方式——一次只給一個決策點,不寫長文:
當前沒有 Blender,兩條路: 1)我裝可攜版(約 300MB,裝非系統碟,不寫註冊表、不佔 C 碟,可整體刪除)——精度最高,能導出逐幀實測座標; 2)不裝,我用 Three.js 在瀏覽器裡生成白模運鏡影片——幾分鐘能看到鏡頭,座標精度略低。 選哪個?
使用者選 1 → 按 references/05-blender-setup.md;選 2 → 按 references/06-threejs-fallback.md。
4. 階段細則
① 接需求
讀 references/00-flow-intake-iteration.md §1–§3:判斷輸入是圖、是描述、還是兩者都有。必問項只三個(時長畫幅、主體朝向、運鏡意圖),能推斷就推斷,其餘用 knowledge/kb-levitation-office.md 的模板數值兜底。使用者說「隨便你」時直接用預設值出第一版,讓他看片挑毛病。
③ 首版白模影片(Tip 3:先出白模預演)
先建靜態白模並標定世界座標(1 單位 = 1 米,原點在地面)→ 參數化相機軌跡 → 480P 低取樣渲染 → 出片 + 關鍵幀。此階段不寫提示詞。驗收:能播放、無黑幀、主體在框內、房間牆體地板靜止。
④ 對話式迭代
按 00 §4 的翻譯表把使用者的話翻成參數,一次只改一項,出新版本並寫 1 行變更說明(v2:半徑 3.45→2.95,主體在收尾幀更滿)。版本命名規範見 00 §5。
⑤ 定稿校驗與寫詞(Tip 2 自動檢查 + Tip 4 對著白模寫詞)
四項校驗(極角單調 / 主體出畫 / 跨組穿模 / 穿頂)必須 RESULT: PASS,再導出逐幀實測 JSON,然後按六欄目寫詞。提示詞裡的每個座標只能來自這份 JSON,禁止手填估算。 寫作規範見 references/04-prompt-format.md。
⑥ 出片交付(對接 Seedance 2.5)
按 00 §6 的口徑交付:白模影片標註為運動/機位/時序參考,參考圖標註為畫面唯一參考,提示詞首句強調「嚴格復刻參考影片的相機運動與起飛順序」,時長與白模對齊,運鏡按 2~3 秒拆段。
5. 分支 A:Blender 執行手冊
- 場景與座標規範:
references/01-scene-spec.md - 運鏡設計規範:
references/02-camera-motion.md - 分層失重與防穿模時序:
references/03-levitation-timing.md - 安裝與連接:
references/05-blender-setup.md - 腳本:
scripts/build_scene_template.py— 空白模場景骨架(房間、桌、雙螢幕、椅、人物塊面)scripts/render_previs.py— 低取樣 480P 預演渲染(EEVEE、無材質)scripts/export_cam_data.py— 導出逐幀 cam / 注視 / 仰角 / 物體 z 到 JSONscripts/validate_trajectory.py— 四項校驗(單調 / 出畫 / 穿模 / 穿頂)
命令列序列(本機已跑通,$BLENDER 為 blender.exe 絕對路徑,路徑按專案替換):
# 1 探測
python scripts/check_blender.py --json
# 2 建場景 + 寫入環繞軌跡與分層失重動畫(--orbit 1),並導出座標清單
"$BLENDER" -b --python scripts/build_scene_template.py -- \
--orbit 1 --center 0.0 0.15 --dur 10 --fps 24 \
--a0 186 --a1 300 --r0 3.45 --r1 2.45 --z0 0.78 --z1 1.20 --l0 1.05 --l1 1.45 \
--out "Z:/project/scene.blend" --csv "Z:/project/coords.csv"
# 3 四項校驗(定稿前必跑),必須 RESULT: PASS
"$BLENDER" -b "Z:/project/scene.blend" --python scripts/validate_trajectory.py -- \
--center 0.0 0.15 --ceiling 2.75 \
--keys Person_Head,Person_Torso,Desk_Top,Monitor_H_Body \
--moving Minion_,Monitor,PC_Case,Keyboard,Mouse,Person_,Desk_,Chair_
# 4 導出逐幀實測資料(寫詞只准用這裡的資料)
"$BLENDER" -b "Z:/project/scene.blend" --python scripts/export_cam_data.py -- \
--out "Z:/project/cam.json" --center 0.0 0.15 --keys Person_Head,Desk_Top,Chair_Seat
# 5 預演渲染:先 16 幀小樣驗管線,再跑全片
"$BLENDER" -b "Z:/project/scene.blend" --python scripts/render_previs.py -- \
--out "Z:/project/previs.mp4" --res 960x540 --samples 4 --start 1 --end 240
迭代修改只需重跑第 2 步(改參數)→ 第 5 步(出片),定稿後再補第 3、4 步。
--keys 只填主體關鍵點(頭、軀幹、桌面、主螢幕);低於主體 1m 的附屬物(椅座等)納入會必然出畫,屬鏡頭物理結果。
--moving 只填會位移的物件前綴,不填則不做穿模檢測;物件按名字首段分組,同組內接觸不計。
6. 分支 B:Three.js 網頁白模
- 方案與限制:
references/06-threejs-fallback.md - 可直接運行:
scripts/threejs_previs.html(單檔案,CDN 引入 three,含軌跡播放、透視/頂視切換、導出 JSON、錄 webm) - 限制:人物用塊面近似、材質全白,只能驗證運動方向、構圖關係、時序,不能驗證光照與質感。
- 輸出:webm + 關鍵幀截圖,座標由頁面同一套參數導出。
7. 提示詞交付規範(Tip 4)
固定六欄目,缺一不可:【Generation Unit】 【參考】 【連續性】 【旁白和聲音】 【時間軸·帶座標】 【反向提示詞】。
三條硬要求:
- 對著白模寫,不瞎猜:每條運鏡句都能回指白模時間碼,形如「0–2.5s 起於主體背部左後方,機位高 0.78m,半徑 3.45m,極角 186°,仰角 3.7°」。
- 參考角色分清:白模影片只鎖運動,參考圖鎖畫面,兩句都要寫實。
- 防穿模寫成因果順序句,而不是「注意不要穿模」。
寫作技巧、句式、反面寫法、常見失效原因見 references/04-prompt-format.md;專案實測參數見 knowledge/kb-levitation-office.md(可直接複用為模板數值)。
8. 常見故障速查
| 現象 | 根因 | 處理 |
|---|---|---|
| 鏡頭左右鬼畜、來回擺 | 極角曲線非單調 / 插值回彈 | 單調參數化 + 一階差分符號檢查 + LINEAR 插值 |
| 主體中途出畫 | 主體升空而鏡頭未跟隨 | 相機 z 與注視點 z 按跟隨係數 0.8–0.95 同步 K 幀 |
| 桌椅與人穿模 | 人與座椅同時起飛 | 人先飛,座椅延後 0.4–0.7s,且先水平讓位再升空 |
| 設備與桌面相撞 | 設備與桌體同時起飛 | 設備先升約 1.3m 懸停,桌體延後 2–3s |
| 房間跟著飄 | 注視點或父級關係寫錯 | 只對主體組做 z 位移,牆地窗靜止 |
| 成片人物轉身、正臉崩壞 | 未鎖朝向 | 【參考】寫死背向/側背向;反向詞補轉身、回頭、人臉特寫 |
| 成片像 3D 灰模 | 白模被當成畫面參考 | 【參考】明確「白模僅參考運動」;畫風鎖定寫實攝影 |
| 模型完全無視參考影片 | 首句沒強調復刻 | 首句寫「嚴格復刻參考影片的相機運動與起飛順序」,運鏡按 2–3s 拆段 |
| 提示詞座標對不上畫面 | 用了估算座標 | 回第 ⑤ 階段從實測 JSON 取值,禁止手填 |
9. 高品質交付清單
- 使用者給過參考圖或描述,且已確認「我理解的一幕」
- 首版白模影片真實出片並交付過(不是只給座標)
- 迭代版本有編號與變更說明,最終版經使用者明確認可
- 四項校驗
RESULT: PASS - 參考圖在提示詞裡指定為 @圖片1,白模影片指定為運動參考
- 時間軸按秒分段,每段有「起手機位 → 結束機位 + 注視點 + 仰角 + 半徑」
- 分層時序寫明誰先飛、誰後飛、升起高度、最終分層高度
- 防穿模邏輯寫成因果句
- 反向提示詞涵蓋:人物朝向與五官、設備增減與朝向、穿模與掉落、房間飄移、鏡頭折返、風格跳變、字幕浮水印
- 交付時說明「預演只校驗運動,畫面以參考圖為準」,並給出上傳口徑
10. 腳本參數速查
| 腳本 | 關鍵參數 | 說明 |
|---|---|---|
check_blender.py | --json | 唯讀探測;輸出 found/path/source/version |
build_scene_template.py | --orbit 1 --center cx cy --dur --fps --a0 --a1 --r0 --r1 --z0 --z1 --l0 --l1 --out --csv | 無 --orbit 只出靜態場景;有則逐幀寫入相機與失重關鍵幀(LINEAR) |
validate_trajectory.py | --center --ceiling --keys --moving --margin --tol | 退出碼 0=PASS 1=FAIL;四項檢查 |
export_cam_data.py | --out --center --keys | 輸出 [{f,cam,rad,ang,pitch,對象:[x,y,z]}] |
render_previs.py | --out --res --samples --fps --start --end --engine | 先 16 幀小樣,再全片 |
install_blender.ps1 | -TargetDir -Version -Mirror auto|official|aliyun|tuna -DryRun | 鏡像自動回退;建 portable 目錄;寫 BLENDER_PATH |
參數一律放在 -- 之後傳給 Python 腳本。
11. 對外介紹口徑(回答「這技能能幹嘛」時用)
給它一張參考圖,或者一句描述,它先把你的運鏡搭成 3D 白模跑一遍給你看,不對就改,改到滿意再寫提示詞,白模影片和提示詞一起丟給 Seedance 2.5 出片。探測建模、四項自動校驗、白模預演、對著運鏡寫詞,全在裡面。不管是環繞、升空還是失重,畫面絲滑且不會突然穿模變形。有了這個一鏡到底的 Skill,長運鏡穩得可怕——做 AI 影片,還需要花大把時間學那些玄學提示詞嗎?
12. 本技能自檢狀態
| 環節 | 結果 |
|---|---|
| 探測 Blender | 通過(4.5.15 LTS 可攜版,D 碟) |
| 建場景 + 軌跡 + 失重動畫 | 通過(240 幀 @24fps,座標 CSV 落盤) |
| 四項校驗 | PASS:出畫 0(960 次 NDC 檢測)、新增穿模 0、穿頂 0、三項單調全 True |
| 導出逐幀資料 | 通過(240 幀 JSON) |
| 預演渲染 | 通過(EEVEE_NEXT,16 幀小樣 mp4 正常) |
| 安裝腳本 | 通過(-DryRun 實測:官方 403 → 阿里雲 4.5.16,約 380MB) |
模板預設參數見 knowledge/kb-levitation-office.md,可直接作為新專案起點。