Angles 是做什麼的?
撰寫一個小型的 JSON 規格檔,執行一個命令,然後讀回一行 JSON 輸出。不要打開或編輯工作室;規格檔足以涵蓋所有可製作的內容,並會拒絕任何它無法製作的東西。
node <this folder>/angles.mjs check spec.json # ~5秒,不產生影片:一張 sheet,每個變體一排 4 格畫面
node <this folder>/angles.mjs make spec.json # 產生 mp4(寬度 1920,每秒影片約需 4 秒運算)以及一張 sheet
- 先檢查再製作。 把你正在考慮的選項放進
variants。一次check會將它們全部顯示為有標籤的列,在一張小圖片上。查看這張 sheet,挑選一列,然後將該列的欄位合併進規格檔(並移除variants),再執行一次make。不要為了比較外觀而多次渲染影片。 - 只看 sheet,不要看 mp4。 讀取它印出的
sheet路徑。這就足夠判斷構圖、角度和對焦了。 - 當
ok: false時,只修正warnings提到的項目。 它們會列出有效的選擇。執行node angles.mjs schema會印出所有可用的選項。不要隨意猜測。
{ "source": "~/Desktop/demo.mov", "out": "~/Desktop/angles", "trim": { "in": 2, "out": 8 },
"look": "bright", "background": "mist", "shadow": "soft",
"variants": [{ "style": "close", "level": "gentle" }, { "style": "raking" }, { "style": "float" }] }
| 欄位 | 值 |
|---|---|
source | 錄影檔(.mov .mp4 .webm)或截圖(.png .jpg)。錄影檔會先被拆分成幀並快取(--fresh 會強制重新處理)。 |
style | close、raking(近距離真實角度);float、angle、flyby、focus、push、reveal、rise、tiltshift |
level | still、whisper(預設)、gentle、lively、bold。每個都是一個速度預算,運鏡會縮小以符合它。speed ≤ budget 會感覺平緩。 |
trim、loop、aspect | { "in": s, "out": s };true 會將結尾淡出到開頭;16:9(預設)、1:1、9:16、任何 W:H |
beats | 在同一個片段中串接多種風格:[{ "at": 0, "style": "float" }, { "at": 4, "style": "close" }] |
look、lookAmount | bright、crisp grain、glossy、sunlit、pixel macro、cool studio、film print、none;0–1 |
background、shadow | mist linen sky sage blush dusk 或 #hex;none soft close float |
focus | { "at": s, "u": 0–1, "v": 0–1, "size": 30 }。省略 u/v 會自動對焦在畫面變化的區域。 |
overlays | [{ "at": 1, "dur": 1.5, "keys": ["⌘", "K"] }] 或 { "text": "…" }:在鏡頭上方的徽章 |
ease、dir、travel | steady soft settle constant;left right;0–2(預設 .8) |
品味:微妙取勝(使用 whisper 或 gentle),每個片段一個想法(一種風格,或兩三個 beats),剪輯長度 3–8 秒,結束在動作點。
需要 Chrome、ffmpeg、Node.js 18+ 以及安裝了 numpy 和 pillow 的 python3;在此目錄下執行 npm i 一次即可。它會在本機連接埠 8790 啟動服務(設定 ANGLES_PORT 可更改連接埠)。