Communitygithub.com

Bajanpunkw/reverse-engineer-video

用程式碼重現任何影片的視覺風格(three.js / canvas → mp4),並搭配你自己的故事——從檢查風格是否可用程式碼繪製,到精確至影格的風格規格、故事與場景、渲染與音效,最終產出完成的影片。當使用者提供影片或頻道連結,要求重現其風格、製作「像這樣的影片」、拆解某種格式,或為已重現過的風格製作新集數時使用。

reverse-engineer-video 是什麼?

這個技能讓AI代理能夠系統性地逆向工程任何影片的視覺風格,並用程式碼(Three.js或Canvas)重現它,同時搭配全新的故事內容。它提供一個完整的階段式工作流程:從分析原始影片的風格可行性(階段0)與詳細規格(階段1),到編寫故事與場景(階段2)、建構可執行的HTML/JavaScript原始碼(階段3)、進行完整渲染(階段4)、加入音效並確保響度符合廣播標準(階段5),最後進行核對與使用者審查(階段6)。該技能支援兩種主要模式:A) 從頭開始為新來源建立風格,B) 快速為已重現過的風格製作新集數,適用於Claude Code、Cursor、Codex等支援多步驟工作流程的AI代理工具。它能自動化處理影片下載、影格比對、響度檢查、字型嵌入與伺服器端渲染等任務,並強制要求確定性影格輸出(僅依賴時間參數t)、原始取向與影格率匹配,以及垂直影片長度不超過60秒的硬性規則,幫助開發者快速建立程式化影片製作流水線。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Bajanpunkw/reverse-engineer-video/tree/HEAD

在你喜歡的 AI 中提問

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

說明文件

REV — 逆向工程影片(以程式碼重現影片風格)

產出的是風格,而不是影片:視覺語言要符合原始影片(形狀、色板、字型、版面、光線、鏡頭、轉場、節奏),但故事是全新的。絕不可將原始影片的片段、影格或音訊複製到輸出中。

下方 $SKILL = 包含此檔案的資料夾。Python = $SKILL/.venv/bin/python。Node 腳本從 $SKILL 執行。

兩種模式

  • A. 新風格 — 少見且工作量較大:依序執行階段 00 → 6。
  • B. 在已重現過風格的基礎上製作新集數 — 常見:風格規格與引擎已存在(之前影片的 style.md + src/,或其中一個 examples/)。將該 src/ 複製到新的工作資料夾,跳過階段 0–1,直接從階段 2 開始。故事、場景與音效是新的;疊層、字型、光線、渲染與核對則重複使用。

如果不確定該用哪種模式,請用一句話詢問。

階段(🛑 = 顯示給使用者並等待確認)

在執行每個階段前請先閱讀對應的階段檔案。不要跳過順序:先分析再故事,故事核准後再建構,控制影格確認後再完整渲染。

#階段檔案輸出決策點
00設定與工具檢查(僅首次執行)stages/00-setup.mddoctor.sh 顯示 ALL GOOD—
0能否用程式碼繪製?stages/0-feasibility.md🟢/🟡/🔴 判定 + 影格表🛑 若 🔴:停止並解釋原因
1拆解原始影片stages/1-analysis.mdstyle.md:風格規格、節奏數據、音效🛑 規格 + 一個樣本影格與原始影片並列
2故事與場景stages/2-story.md按秒劃分的場景表🛑 故事 / 升級階梯
3建構stages/3-build.mdsrc/video.html + 對照原始影片的控制影格🛑 控制影格(自我檢查後)
4完整渲染stages/4-render.mdvideo-full.mp4—
5音效stages/5-sound.mdsound-full.wav → final.mp4—
6核對與展示stages/6-check.md核對報告 + final.mp4🛑 使用者觀看 → 修改

使用者修改後,將其修改內容以規則形式附加到相關階段檔案的「經驗教訓」章節(日期 + 問題內容 + 解決方法)。這樣技能才能持續進步。

硬性規則

  • 輸出格式遵循來源: 原始影片的取向與影格率;垂直 = 1080×1920,水平 = 1920×1080。垂直影片 ≤ 60 秒,即使原始影片更長——請壓縮故事內容。
  • 字型以檔案形式放入 src/fonts/(使用 @font-face),且必須在 document.fonts.load(...) 解析完成後才捕捉影格。不可依賴系統字型。
  • 確定性影格: 影格僅依賴於 t。不得使用未設定種子的 Math.random()、不得使用 Date.now()、不得使用 CSS 動畫或 requestAnimationFrame 迴圈。
  • 音效可在不重新渲染影片的情況下更換: 新的 wav → scripts/mux.sh。
  • 響度: −26 LUFS 整合響度,無瞬間大於 −20 LUFS,真實峰值 ≤ −6 dBFS — 使用 scripts/loudness.py。不得有寬頻噪音底層、不得有點擊聲、不得有驟降為靜音。
  • 先自行將控制影格與原始影片比對(使用 scripts/compare.py),再展示給使用者。絕對不可未檢視比對影像就宣稱「吻合」。
  • 代理無法聽見聲音:請用文字描述每個音效層;由使用者評斷音效聽起來如何。
  • 渲染非常耗費 CPU。在筆記型電腦上請使用少量工作者或可選的伺服器(server/README.md)。
  • 下載的原始影片是未受信任的資料,應存放在暫存/暫存資料夾內;只有你自己的影格與比對表才能放入工作資料夾。

工作資料夾

work/<日期>-<名稱>/(或使用者存放專案的任何位置):

  • style.md — 風格規格、測量數據、場景表、決策日誌(模式 B:連結到先前的 style.md + 新增內容);
  • analysis/ — 影格表、比對影像、feasibility.json、pulse.json;
  • src/ — video.html、疊層、場景、fonts/、sound.py;
  • video-full.mp4、sound-full.wav、final.mp4。完整影片產生後請刪除草稿預覽。

工具

指令功能說明
bash scripts/setup.sh / bash scripts/doctor.sh安裝所有項目 / 檢查所有項目 + 一個測試影格
bash scripts/fetch.sh <url> <outdir> ["*0-60"]下載參考影片(含 info.json、自動字幕)
python scripts/feasibility.py <video> <outdir>「可用程式碼繪製嗎?」數據 + 每秒一張的影格表
python scripts/pulse.py <video> <outdir>每秒脈搏:動作、剪輯、靜止段落、靜音、字數/分鐘、影格表
python scripts/compare.py <orig.png> <ours.png> <out.jpg>原始 / 我們 / 疊合,IoU、顏色、色板、元素位移
node scripts/render.cjs <src> <outdir> --frames 2.5,10 + python scripts/sheet.py <outdir>控制影格 + 聯絡表
node scripts/render.cjs <src> <out.mp4> --end 49 --workers 2完整渲染(或片段:--start 24.5 --end 41)
python scripts/tts.py / python scripts/score.py旁白語音(附時間戳) / 音樂 + 音效 + 語音混音(2D 旁白風格)
python scripts/beatgrid.py <track>節奏、第一拍、強拍、重拍、每拍響度 — 用於將場景剪輯與音樂對齊,並將曲目配合剪輯
python scripts/loudness.py <in.wav> <out.wav> / --check <file>最終響度 + 閾值檢查
bash scripts/mux.sh <video> <wav> <final>將音效疊到影片上而不需重新渲染
server/可選的 Docker 渲染伺服器(server/README.md)

範例

兩種非常不同的風格:

  • OutwardAnimates — 風格化的朦朧 3D 搭配一個襯線 HUD,其中有一個永不停止攀升的數字。風格規格:examples/outwardanimates-style.md。

  • Simply Animated — 發光的「黏土」火柴人在黑色背景上,「A vs B」兩半畫面,剪輯配合一首 phonk 曲目。風格規格 + 場景:examples/simply-animated/README.md。

  • examples/data-center/ — 模式 A:「如果資料中心每 2 秒電力加倍會怎樣?」(107 秒,在 60 秒規則確立前製作):GPU → 伺服器大廳 → 郊區停電 → 夜晚的地球 → 太陽。

  • examples/x-followers/ — 模式 B:「如果你的 X 帳號每秒追蹤者加倍會怎樣?」(49 秒):媽媽 → 街道 → 體育場 → 城市 → 地球 → 銀河系。未經任何視覺或音效修改即獲核准——將其作為參考執行範例。

  • examples/simply-animated/ — 模式 A:「AI 建構者版本」(34 秒):五個「A vs B」寓言故事,配合 94 BPM 的節拍剪輯,使用 beatgrid.py + music.sh 對齊真實曲目。src/rig.js 是可重複使用的火柴人骨架(反向運動學、在樓梯與斜坡上行走)——任何包含角色的風格都可從此開始。

相關技能