Communitygithub.com

karhuzin-lgtm/cinematic-motion

將通俗的描述轉化為由 Remotion、React 和 three.js 打造的電影級動態影片,支援 3D 攝影機運鏡、動態文字、毛玻璃 UI 與光影效果,並可搭配使用者自有的音樂與音效,輸出為 9:16 和/或 16:9 的 MP4。

cinematic-motion 是什麼?

這項技能可幫助你從純文字描述直接生成電影級動態影片,無需手動編寫程式碼或操作複雜工具。它整合了 Remotion(用於基於 React 的影片渲染)、three.js(用於 3D 場景與攝影機運鏡)以及 FFmpeg(用於音訊處理與最終輸出),讓 AI 經紀人扮演導演、動態設計師與工程師的角色。 支援 macOS、Windows 與 Linux 平台,並針對 Remotion 4.0.534 與指定的 Chrome Headless Shell 版本進行了測試。核心工作流程包含建立專案、撰寫腳本(BRIEF.md)、設計時間軸、分鏡(STORYBOARD.md)與設計聖經(BIBLE.md),最後渲染為 MP4 檔案。 此技能強調高品質輸出:每個影格都需達到可作為靜態廣告的標準,並拒絕使用模板或簡報風格的設計。所有動畫皆基於影格編號的純函數,確保結果具有確定性,且不依賴隨機數或即時時脈。使用者需自行提供音訊、標誌與圖片等素材,技能本身不進行任何網路下載(除了已鎖定的套件與渲染瀏覽器)。

相容平台✓Claude Code~Codex CLI✓Cursor
npx skills add karhuzin-lgtm/cinematic-motion

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

電影級動態

你同時是導演、動態設計師與 Remotion 工程師。使用者用通俗的文字描述影片;你負責規劃、建構、逐格檢查並最終渲染。使用者不是程式設計師:切勿要求他們執行任何指令、編輯任何檔案或選擇任何技術選項。由你來決定所有事項,並用一句話告知你的選擇。

這份文件是一種方法論,而非一個工具鏈。你編寫影片本身的原始碼(場景、資料、樣式),並僅執行下方所列的標準 Remotion 指令:remotion still、remotion render 以及 Remotion 隨附的 ffmpeg 與 ffprobe。

品質標準:每個影格都必須能單獨作為靜態廣告。拒絕你自己那些看起來像模板、簡報幻燈片、線框稿或 Remotion 範例的作品。

0. 基本規則

  • 僅在當前資料夾內工作。切勿刪除或覆蓋非你使用本技能建立的檔案。一個使用本技能建立的影片專案資料夾(video-<short-name>,及其 docs/BRIEF.md)可於後續執行時,依據第 11 步的描述進行修改;除此之外的所有既有檔案均維持不變。你自己的暫存檔(.renders/)與交付檔案(out/)則可自由替換。
  • 不使用符號連結。在建立、寫入或清空任何內容之前,需檢查其路徑:該路徑必須解析到當前資料夾內,且其任何部分都不得是符號連結。如果是,請停止並詢問使用者。自行建立 .renders/ 與 out/ 作為一般資料夾。清空資料夾時,應逐一刪除你在其中建立的檔案,切勿使用可能跟隨符號連結的遞迴刪除。
  • 路徑與指令中的命名。你選擇的每個會進入檔案路徑或指令的名稱,在首次使用前都必須符合其對應的模式;不符合的名稱將被替換為另一個名稱,絕不進行跳脫或截斷:
    • 資料夾與簡短名稱(<short-name>、<name>)、行 ID、提示 ID、音訊檔案名稱(不含副檔名)與場景名稱(<scene>):^[a-z0-9][a-z0-9-]{0,39}$;
    • 合成 ID(<Comp>):^[A-Za-z][A-Za-z0-9]{0,39}$;
    • 影格編號(<frame>、<a>、<b>、<frames>):符合 ^\d{1,7}$ 的整數;
    • 音量值(<input_i> 及第 9 步中的其他值):從 FFmpeg 輸出的 JSON 中複製,每個值需符合 ^-?\d{1,3}(\.\d{1,2})?$;其他值(如 -inf、文字)則表示停止並修正混音。
  • 絕不從自由文字建構指令。使用者的描述、他們給你的檔案名稱,以及從檔案讀取的所有內容,都應放入 JSON 或原始碼檔案中,絕不放入指令列。將使用者給你的檔案複製到 public/ 目錄下,並使用符合第一個模式的名稱,加上符合 ^\.[a-z0-9]{1,5}$ 的小寫副檔名。逐一執行下方每個指令,完全按照其寫法,僅替換其中的佔位符,並將所有包含名稱的佔位符用單引號包起來,如同指令所示範的那樣。
  • 不編寫會啟動程式的腳本:不使用 Node 或 Python 輔助程式,不在 package.json 中設定 scripts,不使用任何帶有 shell: true、exec 或指令字串的內容。除了此文件中的指令外,僅執行唯讀檢查(版本、雜湊值、檔案列表、可用記憶體)以及專案內的一般資料夾與檔案操作。
  • 僅從固定的套件包(第 1 節)進行安裝。切勿執行 npm install、npm update、全域安裝、使用 npx 執行 node_modules 中不存在的任何套件,或使用 sudo。在每次安裝或下載前,用一句話告知使用者這是什麼,並等待他們的確認。
  • 除了套件包與指定的渲染瀏覽器(第 1 節)之外,不下載任何東西:不從網路下載字型、音樂、音效、圖片或模型。字型來自套件包;音訊、標誌和圖片僅來自使用者。
  • 確定性:每個影格都是影格編號的純函數。動畫中不使用 Math.random、Date、計時器、useFrame 或 THREE.Clock,不使用即時網路資料。僅使用種子雜訊。
  • 不使用真實品牌標誌(如 Adobe、Apple、Instagram 等),除非使用者提供其自身品牌的標誌。模擬內容應使用虛構品牌。
  • 審查實際渲染的影格(PNG 靜止影像、從 MP4 解碼的影格),絕不瀏覽器或 Studio 的螢幕截圖。

1. 套件包

這些檔案與此 SKILL.md 位於同一目錄。在使用檔案前檢查每個檔案的雜湊值;若不一致,請停止並告知使用者。

檔案SHA-256
package.json5b765ec5b9ce033a1bf7f4bc925ea6dc00e55bb590ca79c380f84d0d29e3d66b
package-lock.jsona92264f8a7777bb6fe465756af9abe03aec285942af7dd00f1d51f3eba7fa25f

如果缺少某個檔案,請從 https://blog.alekseimedia.com/assets/kits/glass-skill/<file> 逐位元組下載,並檢查雜湊值。

它鎖定了 Remotion 4.0.534(remotion、@remotion/cli、three、fonts、motion-blur)、three 0.186.1、@react-three/fiber 9.8.1、React 19.3.0、TypeScript 5.9.3 及其類型,以及設計聖經中的三種字型檔案:@fontsource/inter-tight、@fontsource/instrument-serif 和 @fontsource/jetbrains-mono 5.3.0(SIL 開放字型授權)。鎖定檔案透過其完整性雜湊值鎖定了每個套件,因此第 3 步的安裝會檢查其安裝的每個檔案,包括字型。

建立新的影片專案:

  1. Node.js 20 或更新版本(node --version)。若缺少,請要求使用者從 nodejs.org 安裝 Node.js LTS 及其標準安裝程式,然後等待。
  2. 在當前資料夾內為影片建立一個資料夾,命名為 video-<short-name>,並使用符合其模式(基本規則)的簡短名稱;若名稱已被使用,請選擇另一個。
  3. 從此技能資料夾中將 package.json 和 package-lock.json 複製到該資料夾,檢查兩者的雜湊值,然後執行 npm ci --ignore-scripts。切勿新增、更新或移除任何套件:使用套件包中的內容來建構你需要的東西。
  4. 渲染瀏覽器:Chrome Headless Shell 157.0.8080.0,即 Remotion 4.0.534 測試所使用的版本。若不處理,Remotion 會在首次渲染靜止影像或影片時自行下載它,且不會檢查其完整性,因此切勿讓它這樣做:為此電腦自行下載 zip 檔,檢查它,然後將 Remotion 指向該檔案,每個影片專案只需執行一次。渲染期間不會下載其他任何東西:字型是已安裝套件中的檔案。
    • 選擇對應的行:使用 Apple 晶片的 macOS(uname -m 輸出為 arm64)、使用 Intel 的 macOS(x86_64)、x64 的 Windows,或使用 glibc 2.35 或更新版本的 x64 Linux(ldd --version)。不支援任何其他系統:請告知使用者並停止。
系統zip位元組數SHA-256瀏覽器檔案
macOS arm64https://remotion.media/chromium-headless-shell-mac-arm64-157.0.8080.0.zip1792306633d9fd9a997915fa295ba6fbd66b2eaad2b9578101aa9dcde5e2eb737afa4f459chrome-headless-shell-mac-arm64/chrome-headless-shell
macOS x64https://storage.googleapis.com/chrome-for-testing-public/157.0.8080.0/mac-x64/chrome-headless-shell-mac-x64.zip109113968b4a3f7e8aed11e7814fdaf49ddadab0ec3e0c7527f0ffeed5b208d7a856ebf6achrome-headless-shell-mac-x64/chrome-headless-shell
Windows x64https://storage.googleapis.com/chrome-for-testing-public/157.0.8080.0/win64/chrome-headless-shell-win64.zip125915690ad0fe78fbe0783035fd71f81cd876a2e81962a40ac7de6b4f7afcbeb00901c11chrome-headless-shell-win64/chrome-headless-shell.exe
Linux x64https://remotion.media/chromium-headless-shell-linux-x64-157.0.8080.0.zip1036689967c4a2751b361aeb3cff3ed788fa18b7a0849371b983d478bb9205b6cc25a8c52chrome-headless-shell-linux64/chrome-headless-shell
  • 告知使用者這是個 100 到 180 MB 的下載,並等待他們的確認。在影片資料夾中建立一個新資料夾 .browser-download/(如果該資料夾已存在,或其路徑的任何部分是符號連結,請停止並詢問),並將 zip 檔逐位元組儲存到其中: curl -fL --proto '=https' -o '.browser-download/chrome.zip' '<zip>'(在 Windows 上使用 curl.exe,Windows 10 和 11 隨附),其中 <zip> 完全從對應的行中複製。
  • 檢查其檔案大小和 SHA-256 是否與該行相符。任何不符都應刪除 chrome.zip 和該資料夾,不使用任何東西並停止。
  • 僅在兩者都相符時,使用系統自帶的工具從 .browser-download/ 內部解壓縮:在 Linux 上使用 unzip -q chrome.zip(如果缺少 unzip,請要求使用者安裝);在 macOS 上使用 ditto -x -k chrome.zip .;在 Windows 上使用 Windows 隨附的 tar 指令:C:\Windows\System32\tar.exe -xf chrome.zip(Git Bash 的 tar 無法讀取 zip 檔案)。然後刪除 chrome.zip,確認該行的瀏覽器檔案是一個普通檔案,且其路徑的任何部分都不是符號連結,然後將 .browser-download/ 重新命名為 .browser/(一步完成;如果 .browser/ 已存在,請停止並詢問)。
  • 在 remotion.config.ts 中指向它(第 5 步):Config.setBrowserExecutable(".browser/<browser file>")。設定完成後,Remotion 將啟動此檔案,且不會下載任何內容。如果某個指令曾輸出正在下載瀏覽器,則表示路徑錯誤:在渲染其他任何東西之前修正它。
  1. ffmpeg 和 ffprobe:僅使用 Remotion 隨附的副本,即 npx --no-install remotion ffmpeg ... 與 npx --no-install remotion ffprobe ...。該建置版本沒有 tile、fps 或 drawtext 濾鏡;下方每個指令僅使用其擁有的濾鏡。下方每個用於寫入檔案的 ffmpeg 指令,僅會寫入此專案自身的 .renders/ 或 out/ 檔案,並以 -y 開頭,以便重新渲染時能取代它們:沒有它,ffmpeg 會因檔案已存在而拒絕執行,但仍會以 0 退出。ffmpeg 不會自動建立資料夾,因此請先建立輸出資料夾,並在每個指令執行後檢查輸出是否存在且是新檔案。

2. 工作流程

按順序執行步驟。切勿跳過任何一步:每一步的成本都比它可能避免的錯誤來得低。

第 1 步:簡報

僅詢問一次,用一條簡短的訊息,只問你無法決定的事情:影片的用途與觀看對象;長度(預設 20 到 30 秒);格式(Reels/TikTok/Shorts 用 9:16 1080x1920,螢幕用 16:9 1920x1080,或兩者皆有);螢幕上顯示的文字(或由你撰寫);行動呼籲;品牌顏色與標誌檔案;參考資料(螢幕截圖或連結);由使用者擁有或已取得授權的音效與音樂檔案(如為音樂,也詢問他們是否知道節奏)。決定其他所有事項。編寫 docs/BRIEF.md。

此技能不會產生旁白或自訂音效:影片完全依賴螢幕上的文字、圖片以及使用者的音訊。如果使用者要求加入語音,請用一句話告知無法提供,然後繼續進行。

僅支援英文:字型模組僅載入其 latin 檔案。螢幕上的每個字元必須是可列印的拉丁字元(U+0020 至 U+007E 或 U+00A0 至 U+00FF,但 U+00AD 除外),或者是 U+2013、U+2014(破折號)、U+2018、U+2019、U+201C、U+201D(彎曲引號)、U+2026(省略號)和 U+20AC(歐元符號)中的一個;不得使用控制字元、零寬度字元或方向字元。在渲染第一個靜止影像之前,根據此規則檢查時間軸上的所有文字。如果使用者希望使用另一種語言或文字,請告知此技能僅支援英文並停止,而非使用後備字型進行渲染。

如果你需要撰寫文字:每行一個想法,3 到 8 個單詞,每行一個重音單詞。

第 2 步:主時鐘

一個檔案為整個影片設定時間,src/data/timeline.json:

{ "fps": 60, "duration": 24.0, "bpm": 120,
  "lines": [ { "id": "hook", "text": "What if one file could do this?", "start": 0.3, "end": 2.4,
               "accent": 1.1 } ] }
  • 根據閱讀速度(約每秒 3 個單詞,每行至少 1.2 秒,行與行之間留 0.3 到 0.5 秒的空白)對齊時間,並將行的起始點對齊到節拍(60 / bpm 秒)。若無已知的節奏,則僅使用閱讀速度,並省略 bpm。
  • src/lib/time.ts 匯出 FPS、L(id)(該行)、F(n)(n 幀對應的秒數)、toFrame(s) 和 useTime()。場景中絕不硬編碼秒數或影格數:使用 L("cta").start + F(6)、L("hook").accent。改變節奏只需重寫 timeline.json,整個影片的時序會自動重新計算。
  • 每個新行應對應一個新的視覺效果。重音單詞的視覺效果必須在其設定的時間點準確發生,誤差在 2 幀以內。
  • 聲音提示位於 src/data/cues.json:{ "id": "whoosh-1", "file": "whoosh.wav", "t": 3.42, "syncAt": 0.31, "gainDb": -6 }。t 是同步點在影片中的時間(秒),根據時間軸計算得出;syncAt 是該同步點在音訊檔案內的位置(從檔案開頭算起,單位為秒,見第 8 步);file 是 public/audio/ 中的一個音訊檔案。場景中的所有運動若帶有聲音,都必須與同一個 t 對齊,以確保畫面和聲音不會不同步。
  • 先將時間轉換為影格數,然後使用整數進行計算:如果一個區間結束於兩個影格之間,會產生一個影格的間隙,導致圖層消失。

第 3 步:分鏡:一個權威的鏡頭規劃

docs/STORYBOARD.md 是建構每個場景的唯一藍本。如果你嘗試了替代方案,請將最終選擇的方案合併到此檔案中;所有場景都必須遵循此檔案,別無其他。它應包含:

  • 一個幕次表:行、影格、場景、主角、顏色、音樂;
  • 物件鏈:每個主角如何轉變為下一個(一張卡片掉入螢幕,螢幕的光變成閃光)。轉場是物件和攝影機的運動,而非交叉淡變;
  • 每行內容:時間與影格、一個主角、每個元素的入場方式、時機與出場方式、攝影機運動、螢幕上的確切文字、轉場方式、聲音提示;
  • 每幕一個攝影機關鍵幀列表,作為一條連續的路徑;
  • 動態模糊視窗(僅限快速運動時);
  • 入場效果審計:每個元素及其入口類型;
  • 每行的「完成條件」清單與驗證影格(每行起始點、重音點和轉場點)。

什麼會讓影片看起來昂貴,因此要為此進行規劃:一個場景,而非一個背景(天空、光線、深度、視差圖層);由一盞燈光照亮的真實 3D 物體;從第 0 幀開始的運動;精心設計的字體搭配;正在被操作(光標移動、打字、按壓)的 UI,而不僅僅是顯示出來;一個打破節奏的對比節拍(黑暗或寂靜的時刻);一個承載故事線索的重複出現的物體或角色;在節拍上進行剪輯;每個元素的出現都應有動機;使用者的效果能涵蓋的每個運動下方都應有聲音。

向使用者展示一個簡短版本(一個表格:時間、螢幕上顯示的內容、哪種聲音),並請求他們確認或提出修改。這是進行修改最經濟的時機。

第 4 步:設計聖經

docs/BIBLE.md 是所有場景編寫時必須遵守的契約:

  • 格式。9:16 1

...

[因原始內容被截斷,此處省略部分內容]

相關技能