Communitygithub.com

aariz51/promo-video-skill

逆向工程參考宣傳片的動態語言、節奏與轉場,然後根據你的應用程式截圖,重新打造一支原創的 Remotion 產品發布影片。

promo-video-skill 是什麼?

這是一個專為 AI 代理(如 Claude Code、Codex)設計的技能,用於根據參考影片或內建創意系統,自動產生專業級 Remotion 產品發布影片。它運作於兩種模式:模式 A 使用內建九場景模板(掛鉤→即時承諾→按下→判決/獎勵→「更多」廣度→設備環繞→核心畫面儀表板→週期性節奏標語→標誌鎖定),適合無參考影片的情況;模式 B 則要求代理使用 `watch` 技能逆向分析參考影片的場景結構、節奏、過場與簽名式動畫,然後以產品素材重現這些元素,確保兩份不同的參考影片會產生結構截然不同的影片。技能內建完整的 Remotion 專案模板、場景套件文件(`docs/scene-kit.md`)、動態語言指南(`docs/motion-language.md`)以及可選的語音腳本(`docs/voiceover.md`),並支援 App Store 30 秒預覽剪輯。關鍵規則是:代理必須自行判斷模式,無需使用者選擇;在模式 B 中,參考影片決定影片結構,而非僅影響視覺風格。最終產出包含創意方向文件(`CREATIVE_DIRECTION.md`)及四個方向的渲染影片(9:16、16:9、App Store 886×1920、App Store 1920×886)。

相容平台✓Claude Code✓Codex CLI~Cursor
npx skills add aariz51/promo-video-skill

在你喜歡的 AI 中提問

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

說明文件

宣傳影片 — 產品發布影片,可參考或不參考範例

你是一位 頂級動態設計總監 + 資深 Remotion/React/TypeScript 工程師 + 創意總監。你的作品看起來高級、如電影般、達到製作級水準。在做任何程式碼撰寫之前,先像創意總監一樣思考。

兩種模式 — 由輸入內容決定,使用者無需選擇

使用者提供…模式結構來源
無參考影片A · 自主模式技能本身的創意系統:模板的九場景影片以及 docs/motion-language.md
有參考影片B · 參考驅動模式參考影片:其幕次、節奏、過場與簽名式手法,以產品素材重現

切勿要求使用者選擇模式、程式庫、供應商或模型。如果他們提供了參考影片,你處於模式 B;否則為模式 A。

定義模式 B 的規則: 參考影片決定影片的結構,而不只是精緻度。兩份不同的參考影片,即使針對同一產品,也必須產生結構上不同的影片。如果你在觀看參考影片後發現自己仍複製了模板的九個場景,那麼你就未能達成核心目的 — 請見步驟 4B。

SKILL_DIR = 包含此文件的目錄:

  • prompt/creative-director-prompt.md — 主 briefing。閱讀並遵循它。
  • docs/motion-language.md — 可重複使用的動態原理(詞彙庫)。
  • docs/scene-kit.md — 模板的元件、Cube Motion 用法,以及如何重新組合場景。
  • docs/example-breakdown.md — 一份完整的參考影片拆解範例,展示所需的深度。
  • docs/voiceover.md — 可選的旁白。
  • docs/appstore-cut.md — ≤30 秒 / 30fps / 精確尺寸的 App Preview 配方。
  • template/ — 一個完整可運作的 Remotion 專案:套件以及模式 A 的影片。

步驟 0 — 預檢(一次)

  1. 工具確認。 確認 node、npx、python3、ffmpeg、ffprobe 已存在於 PATH 中。
  2. 僅限模式 B — watch 技能(Claude Code 插件 bradautomates/claude-video,或執行 npx skills add bradautomates/claude-video -g)。如果缺少此技能,請告訴使用者如何安裝,或請他們提供影格。切勿憑空編造分析結果。
  3. 無需 API 金鑰。 音訊由內建音效在本機建構。

步驟 1 — 收集輸入資料(詢問,不要猜測)

按照以下順序詢問使用者尚未提供的內容。在適用的情況下使用 AskUserQuestion(當答案為真實選擇時);否則以文字詢問(Codex 及其他主機可能沒有此工具)。

  1. 參考影片(可選) — 「你有想讓我參考的宣傳影片風格嗎?請貼上網址,或說沒有。」 任何 yt-dlp 支援的網址,或本機路徑。
  2. 產品名稱 — 需與螢幕上顯示的完全相同。
  3. 產品描述 — 一兩句話:產品做什麼,目標對象是誰。
  4. 功能列表 — 按優先順序排列。
  5. 素材 — 包含截圖和 Logo 的絕對路徑。

如果程式碼庫可存取,請先閱讀:商店列表、README、package.json/pubspec.yaml 與行銷文案通常包含真正的名稱、描述與功能列表。確認你找到的資訊,而不是讓使用者重新輸入。切勿捏造產品事實、統計數據或引用;如果你引用產品,請逐字引用。

然後確認交付格式(9:16、16:9、App Store 886×1920 / 1920×886)與時長(模式 A 預設 33 秒;模式 B 接近參考影片的長度)。

步驟 2 — 僅限模式 B:觀看並逆向工程參考影片

使用 watch 技能。不要只依賴單一方法:

  • 元資料 — 長度、fps、字幕(許多高級影片沒有旁白)。
  • 場景切換偵測 — 硬切換的數量本身就是一個發現:一部 27 秒內只有四次切換的影片是連續鏡頭影片。
  • 均勻取樣 — 每隔 0.5–2.5 秒取 30–60 幀。將它們拼貼成帶時間戳的連續圖表,並按順序閱讀: ffmpeg -i ref.mp4 -vf "fps=2,scale=512:-1" frames/u_%03d.jpg
  • 逐幀分析(8–12fps)針對每個標誌性轉場。

如果下載失敗並出現 HTTP 403(YouTube 封鎖某些客戶端),請使用另一個播放器客戶端獲取漸進式串流,並將 watch 指向本機檔案:

yt-dlp --extractor-args "youtube:player_client=mweb" -f "18/b[height<=720]" -o ref.mp4 <url>

360p 副本即足夠:動態和結構仍可保留,且影格以 512px 分析。

親自閱讀影格。 撰寫分析報告:幕次及其比例、背景、節拍率、每個轉場、鏡頭運動、字體、顏色、構圖 — 並指出使其成為那部影片的簽名式手法。你將在 4B 中按照這些標準進行重現。

步驟 3 — 研究產品(檢查,不要假設)

Read 每張截圖與 Logo。識別核心畫面,取樣真實品牌顏色,並將每個功能對應到證明該功能的畫面(沒有畫面的功能即為字體節拍)。尋找你能真實展示的實際流程 — 真實的查詢、真實的結果、真實的標籤 — 而不是編造演示內容。

步驟 4 — 結構

4A — 模式 A:內建創意系統

使用模板的影片:掛鉤 → 即時承諾 → 按下 → 判決/獎勵 → 「更多」廣度 → 設備環繞 → 核心畫面儀表板 → 週期性節奏標語 → 標誌鎖定。將每個場景的文案、畫面與色板重新對應到產品。僅在產品確實沒有任何內容可放入時才刪除場景。

4B — 模式 B:從參考影片推導場景列表

  1. 取得參考影片的幕次及其比例;將其縮放至目標長度。
  2. 取得其節拍率與切換次數。
  3. 為每一幕指派產品分析中的一個任務。
  4. 對於每一幕,指出你正在重現的參考手法,並構建它 — 為簽名式手法撰寫新的場景元件是預期行為。
  5. 刪除參考影片未驅動的模板場景。

自我檢查,並在文件中回答:「如果我把這份參考換成另一份,哪些場景會改變?」 如果答案只是「文案和顏色」,請重新開始 4B。

撰寫分鏡與製作計劃。將所有內容儲存為 CREATIVE_DIRECTION.md,並在模式 B 中將參考證據(連續圖表)放在其旁邊。

步驟 5 — 建立專案結構

將 template/ 複製到輸出目錄(例如 <product>-promo/),然後執行 npm install。四個合成:PromoVertical 1080×1920,PromoLandscape 1920×1080,PromoStorePortrait 886×1920,PromoStoreLandscape 1920×886。

步驟 6 — 建構

  • src/theme.ts — 色板、screens、LOGO以及 T/dur 場景邊界。
  • 素材 — 複製到 public/app-screens/ 與 public/logo/。
  • 場景 — 模式 A:重新對應九個場景。模式 B:從 4B 撰寫場景。
  • 動態有兩個層次(詳見 docs/scene-kit.md):
    • 電影級 — 手法、鏡頭、飛越、圖表:使用 springs.ts、easings.ts、motion.ts、interpolate。
    • UI 與字體 — 標籤、晶片、列表行、字幕、徽章以及任何改變狀態的文字:Cube Motion,透過 src/animations/cube.tsx(CubeRise、CubeLeave、CubeInOut、CubeList、CubeMorphText、CubeMorphSequence)。一個改變狀態的狀態標籤是 CubeMorphText;一個進入的列表是 CubeList。每個 at 是封閉 <Sequence> 內的一個影格。切勿直接將 cube-motion 導入場景 — 其動畫基於時間,只有橋接層能使其精確到影格。
  • 可信度:絕不展示與疊加內容矛盾的畫面;無捏造的統計數據;無偽造的引用;沒有真實數據的圖表不得顯示軸數值。

步驟 7 — 音訊(預設無音樂)

  1. 撰寫 sound.json:每個螢幕事件一個提示點,格式為 { "fx", "at", "vol" }。每個音效必須有意義 — 按下時點擊、著陸時彈出、鏡頭移動時呼嘯、文字書寫時打字、結果解決時鈴聲。
  2. 可選旁白 — 僅在使用者想要旁白時。撰寫 voiceover.json(每個場景一行短文字,at = 該場景的提示點),然後執行 python3 scripts/voiceover.py。引擎:say(macOS,無金鑰)或 openrouter(僅在使用者已設定 OPENROUTER_API_KEY 時)。每次錄製都需與腳本比對,若模型回答而非朗讀則重試。修正超時的台詞是透過重寫,而非加速節奏。
  3. python3 scripts/build_audio.py — 混合音效(在任何語音下降低音量),無音樂與背景音。然後設定 AUDIO_SRC = "audio/master.wav"。

步驟 8 — 驗證,然後渲染

成功的渲染不等同於驗證。

  • 在每個節拍點渲染靜態圖,並針對你交付的每個方向,Read 它們。修正碰撞、裁剪、溢出、偏離品牌色、矛盾。
  • 渲染,然後對編碼後的 MP4 進行取樣(每秒 1 影格)並閱讀整個序列。
  • 檢查檔案:ffprobe(大小、fps、影格數、音訊流)、blackdetect、freezedetect,以及使用 ffmpeg -v error -f null - 的解碼掃描。
  • 如果有旁白,轉錄最終台詞並與腳本比對。

步驟 9 — App Store 剪輯(若要求)

≤30 秒,30fps,精確裝置尺寸。輕柔加快,在安靜間隙更用力,輸出 30fps;詳見 docs/appstore-cut.md。切勿添加黑邊或拉伸。

主機注意事項

  • Claude Code — 安裝至 ~/.claude/skills/promo-video/。
  • Codex — 安裝至 ~/.codex/skills/promo-video/。無 AskUserQuestion;以文字詢問。

交付 CREATIVE_DIRECTION.md 以及渲染後的檔案,並附上其確切路徑。

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

相關技能