Communitygithub.com

motion-film:用代码做片

用程式碼製作動態影像:產品宣傳片(真實頁面截圖 + 2.5D 運鏡 + 卡點 + 音效)、各類 MG/風格短片(扁平向量、手繪沸騰線、綜藝花字、HUD、包浩斯、水墨等)、單個動效鏡頭。用戶要做影片/短片/宣傳片/動畫/片頭/花字/卡點片,或要把網頁/前端專案做成產品影片,或要設計一種新的動態風格時使用。

motion-film:用代码做片 是什麼?

此技能讓開發者透過程式碼(HTML/CSS/JS)逐幀渲染合成 MP4 影片,適用於產品宣傳片、風格短片及單一動效鏡頭。支援的真實平台包括 Claude Code、Cursor、Codex 等具備執行 Puppeteer 與 ffmpeg 能力的 AI 代理或開發環境。核心原理是「render(t) 純函數」設計:每一幀僅依賴時間 t,確保可平行、亂序、重複渲染,並用統一的 Cue 表驅動鏡頭、字幕、音效與音樂卡點。工作流程分為 Brief(一次問完關鍵資訊)、Treatment(撰寫腳本與節拍圖)、定樣(2–3 張風格幀)、逐鏡頭實現、聲音製作、自檢、獨立評審與交付。提供輕量工具集:render.mjs(渲染器,支援子幀運動模糊與豎屏)、motion.js(緩動、關鍵幀、錯峰等函式庫)、sfx.py(程式化擬音與混音)、beat_grid.py(節拍分析)、capture.mjs(產品截圖與元素切圖)以及一個完整的 9.6 秒範例專案(templates/starter/)供複製起手。特別強調 10 條核心原則,例如:畫面是時間的純函數、一條時間線驅動一切、一個鏡頭只講一件事、運動像生命不像機器、聲音是半部片、克制特效、先以最便宜的產物定方向、自己先看再交獨立評審。交付物包含 MP4、字幕 SRT、Treatment 說明、Credits 授權清單與單指令建置腳本。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/joker124zx/motion-film/tree/main/plugins/motion-film/skills/motion-film

在你喜歡的 AI 中提問

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

說明文件

motion-film:用程式碼做片

畫面、動畫、字幕、音效全部由程式碼生成,逐幀渲染成 MP4。不用影片生成模型。 這份 skill 是方法 + 一套輕量工具,不帶素材庫;素材按片子現找、現合成,並登記授權。

先判斷是哪條路線

路線典型請求主讀
A. 產品宣傳片把網站/App/前端專案做成宣傳片、功能示範片references/product-promo.md
B. 風格短片「用 XX 風格做一支 30 秒的片子講……」、MG 動畫、花字、片頭references/style-atlas.md + references/style-spec.md
C. 單鏡頭/單動效「做一個標題飛入」「做個鎖定框動效」直接按下方原則做,讀 references/aesthetic-rules.md 相關條

兩條主線共用:references/directing.md(導演)、references/timing.md(節奏)、 references/sound.md(聲音)、references/tech.md(渲染)、references/review.md(評審)。 使用者給了 BGM 要卡點:references/beat-sync.md,先分析音樂再分鏡。

開工前只問一次

把定不了的事合成一條訊息問完,之後不再追問;其餘用預設值並在 treatment 裡寫明:

  • 主題裡只有使用者知道的事(產品重點、目標受眾、發布平台、必須出現的內容);
  • 有沒有自己的素材:logo、品牌色/字型、配音、音樂、參考片;
  • 要不要先看分鏡/風格幀再做成片(要看就停一次;不要就一路做完)。

預設:30–60 s(單鏡頭 3–8 s);1920×1080;產品片 30 fps、風格片按風格定(24/30); 字幕與配音跟使用者語言;響度 −14 LUFS、真峰值 ≤ −1 dBTP。 使用者明確說「你定」「直接做」,就不問,按預設推進。

十條核心原則(四個來源反覆印證的經驗)

  1. 畫面是時間的純函數。 render(t) 對同一個 t 永遠畫出同一幀;禁 Date.now()、無種子 Math.random()、跨幀累積狀態。隨機一律 mulberry32/hash 固定種子。任何幀可單獨、亂序、並行渲染。
  2. 一張時間線驅動一切。 鏡頭邊界、關鍵動作、字幕、音效、音樂命中點都從同一份 cue 表派生;改時長只改一處,聲音自動跟隨。卡點片用拍號寫(beatF(n)),不用裸幀號。
  3. 為觀眾計時,不為程式碼計時。 每個鏡頭列出觀眾要讀懂的資訊點(reads),一次只給一個;動作可以快,含義要停住。第一版幾乎總是太快——預設放慢一檔。公式見 timing.md。
  4. 一個鏡頭只講一件事;一種手法全片只當一次主角。 開場只給一個主角 + 一條完整動作弧(起—承—落)。重複的鏡頭、重複的標語一律刪。
  5. 運動像生命,不像機器。 不用線性插值;預備 → 動作 → 跟隨;部件錯峰,避免「雙胞胎」(左右對稱、群體同步);落地要彈的緩動必須過衝。
  6. 視覺語言從題材/產品自身長出來。 產品片的字型、色板、圓角、材質從產品設計系統提取;風格片遵守該風格的「本質與它不是什麼」。不另套一層無關的「宣傳片皮膚」。
  7. 克制特效。 光效不群發,只給主角一次且裁進圓角;產品片預設不加手持抖動;整畫面級衝擊(震屏/閃幀/整體 scale 泵)全片 ≤ 3 處。
  8. 聲音是半部片。 環境 + 擬音 + 音樂三層;可見動作都有聲音;高潮前留真正的靜音;聲音在畫面鎖定後做。
  9. 先用最便宜的產物定方向。 treatment(文字)→ 風格幀(真實繪製程式碼出的靜幀)→ 低解析度預覽 → 正式渲染。方向性爭論不進昂貴階段。
  10. 自己先看,再交獨立評審。 每輪修改都自己出接觸印樣/動作條/裁切放大來看;交付前交給一個沒參與製作的評審(乾淨上下文的 subagent,或另開會話)按 review.md 打分挑錯,只修一輪。

工作流

  1. Brief:上面那一輪問題;產品片額外做一次唯讀的產品檢查(定位、功能、頁面狀態、設計 tokens、資料風險)。
  2. Treatment(寫 TREATMENT.md,寫任何畫面程式碼之前):三個候選結構選一;logline 與弧線;參考作品「學什麼 / 不拿什麼」;鏡頭表(景別、機位、運鏡、時長、理由);逐秒節拍;cue map;聲音設計表;字幕與字型設計。模板見 directing.md。
  3. 定樣:2–3 張風格幀(有角色加 model sheet),用真實繪製程式碼渲出,自己對照風格說明檢查。
  4. 逐鏡頭實現:先擺關鍵姿態當靜幀檢查,讀得懂再補中間運動。每鏡頭寫死 2 個驗收時刻,完成即出靜幀自檢。
  5. 聲音:畫面時間線鎖定後,從 cue 表生成音樂、擬音、字幕;混音、母帶。
  6. 自檢:接觸印樣(每 0.5–1 s 一幀)、關鍵動作 0.1–0.2 s 動作條、文字/邊緣全解析度裁切;全速帶聲看一遍。按 aesthetic-rules.md 逐條過。
  7. 獨立評審 + 一輪修復:review.md。小問題同輪修完;大問題交付時一句話說明。
  8. 交付:見下。

工具(scripts/,按需複製到專案)

檔案作用
scripts/render.mjs渲染器:HTML 頁面暴露 renderAt(t) → 靜幀 / 接觸印樣 / 動作條 / 裁切 / MP4,支援多 worker、運動模糊(子幀累積)、直立螢幕
scripts/motion.js頁面內用的純函數工具:種子隨機、緩動族、關鍵幀、彈簧、過衝、錯峰、拍號、速度曲線
scripts/sfx.py程式化擬音與混音:whoosh / impact / riser / pop / click / sparkle / tick,從事件表合成 mix.wav
scripts/master.sh混流 + 兩遍 loudnorm(−14 LUFS / −1 dBTP)+ 黑幀檢測 + 時長/規格報告
scripts/beat_grid.pyBGM 節拍網格擬合(含 2x / 0.5x / 3:2 誤判糾正)+ kick/snare/hihat 分類 + 能量結構,輸出 beat_data.json
scripts/capture.mjs產品片素材三件套:全頁 2x 截圖、元素切圖(可透明、可 4x)、空底板、layout.json 座標表
templates/starter/可直接跑的 9.6 s 示範專案(時間線、renderAt、音效事件、字幕、build.sh 一條指令出片),新片從這裡複製起步

render.mjs 把 /lib/ 對應到本 skill 的 scripts/ 目錄,頁面用 <script src="/lib/motion.js"> 即可引用工具函數。 新專案:複製 templates/starter/ → 在專案裡 npm i puppeteer-core → 改時間線和鏡頭 → MF=<本 skill 路徑> sh build.sh。

產品片若用 Remotion:方法同樣適用(tech.md 有對照說明);注意 Remotion 對公司使用者可能需要付費授權,開工前提醒使用者。

依賴:Node 18+、ffmpeg、Chrome/Chromium(render.mjs 自動尋找,或設 CHROME_PATH);npm i puppeteer-core 裝在專案裡。Python 3 + numpy/scipy(音訊);librosa 只在卡點分析時裝,裝進專案自己的 venv。不替使用者安裝系統軟體,缺了就在那一輪問題裡說。

交付

專案資料夾裡:

  • <name>.mp4(和 poster.jpg);配了 BGM 的產品片另出一版無 BGM(保留音效)方便後期換樂;
  • <name>.srt(有字幕/旁白時);
  • TREATMENT.md;
  • CREDITS.md:每一個第三方素材(字型、圖片、音樂、取樣、TTS 引擎)的來源與授權;
  • 原始碼與一條指令的 build.sh。

告訴使用者:成片在哪、CREDITS.md 列了授權、使用者自己提供的素材由使用者負責授權。不附任何推廣、署名請求或「去哪裡發布」的建議,除非使用者問。

紅線

  • 參考作品只學語法(構圖、節奏、運鏡、配色邏輯),不抄角色、設計、旋律、具體鏡頭、logo、字型。
  • 片中不出現真實品牌/作品/角色,除非使用者擁有或確認有權使用;品牌名、產品名用虛構的。
  • 素材只用 CC0 / 公有領域 / OFL / CC BY(需署名)/ 明確免費商用;"no known restrictions"不算。其他開放授權先向使用者說明條款。
  • 產品片裡的客戶、個人、內部、密鑰、即時資料一律先虛構或脫敏再截圖。
  • 不自動從網上拉程式碼執行、不自動更新本 skill;需要下載素材時先告訴使用者下什麼、從哪、什麼授權。

相關技能