Communitygithub.com

polachp/motion-video

從腳本製作動態圖形影片,從短 Reels 到最高 4K 的長影片:設定、腳本、可播放預覽的分鏡表、檢查、渲染、音訊、發布文字和縮圖。在 Petr 想要影片、Reel、短片、解說、腳本或分鏡表時使用。

motion-video 是什麼?

這個 AI 代理技能將文字腳本轉換為動態圖形影片,支援從短 Reels 到 4K 解析度長影片的各種格式。它採用結構化工作流程,分階段進行:專案設定、腳本開發、可播放的 HTML 分鏡表、品質檢查、渲染和音訊混合,最後是社群媒體發布文字和縮圖生成。該技能適用於 Claude Code 和其他支援的工具,會維護一個統一的專案設定檔 (VIDEO.md),驅動品牌、色彩、音樂和語調。核心技術是將場景渲染為帶有確定性時間軸的 HTML 頁面,然後使用 Python 腳本進行檢查,並使用 FFmpeg 和 Whisper 進行音訊混合與語音同步,從而實現精確的逐字字幕和音訊同步。

相容平台✓Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/polachp/claude-skill-motion-video/tree/HEAD

在你喜歡的 AI 中提問

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

預覽

來自技能 README

說明文件

從腳本製作動態圖形影片

從腳本製作動態圖形影片(動畫文字、圖表、螢幕截圖、即時網頁錄製、圖示、地圖) 從 HTML 渲染。品牌、語調、色彩、鈴聲和音樂等專案設定儲存在專案設定檔 VIDEO.md 中,而非此處。 腳本和範本:儲存庫 C:\Mydrive\Claude Projects\motion-video\ (scripts/, templates/)。

語言: 與 Petr 用捷克語交談。我們建立的所有檔案(程式碼、註解、文件、設定檔、README)必須使用英文(簡單英文、短句)。 影片中出現的文字(字幕、標題)使用設定檔中的影片語言,通常是捷克語。分鏡表和播放器 UI 可以透過 storyboard.json 中的 labels 進行本地化。

0. 專案設定檔

  • 首先找到並讀取專案設定檔:專案資料夾中的 VIDEO.md 或 brand/video-profil.md, 或 claude.ai 專案中的文字副本 (claude/video-profil.md)。
  • 設定檔會覆蓋此技能的預設值(色彩、字型、標誌、鈴聲、音樂、語調、受眾、 措辭、主題標籤、安全區域、範例位置)。
  • 沒有設定檔:詢問品牌和受眾,並從 templates/VIDEO.md 建立一個。

1. 設定(單一事實來源)

腳本頂部的一個固定區塊。場景時間由此衍生。

項目範例
主題MultiModel in Meteoblue
預設reel / video / feed 4:5 / square
格式與設計解析度9:16 1080×1920 / 16:9 1920×1080 / 4:5 1080×1350 / 1:1 1080×1080
最終渲染1080p,或 4K (--scale 2 for 16:9)
長度60–75 秒 / 8 分鐘 / …
影片語言cs
旁白無 / 自行錄製(逐字同步)
字幕內嵌 / 逐字 / SRT
鈴聲、音樂來自設定檔(檔案 + 授權)
音效是 / 否
即時網頁錄製否 / 是(哪些網站和步驟)

格式預設

預設格式長度內容適應
reel / short9:16, 1080×1920最多 3 分鐘(Reels, Shorts);檢查 FB Reels(通常規定 90 秒)一個想法,大字幕內嵌在畫面上,內容在安全區域內(頂部和底部為應用程式 UI),節奏快
video16:9, 設計 1920×1080, 渲染最高 4K不限章節(腳本和分鏡表按章節劃分,YouTube 描述中的時間戳記:第一個 0:00,至少 3 個章節),可能包含旁白,更多細節空間,節奏較平緩
feed 4:54:5, 1080×1350~1–2 分鐘Instagram(和 LinkedIn)動態貼文,比正方形高
square1:1, 1080×1080~1 分鐘動態貼文 (FB, IG),字幕置中

「Reel」只是一個預設:當 Petr 說「reel」時,適用 reel 的長度、格式和節奏。

2. 工作流程:腳本 → 分鏡表 → 核准 → 渲染

輸出始終是 腳本 + 分鏡表 的組合,每次更改後保持同步。 僅在明確要求時才進行最終渲染(vygeneruj video)。在那之前,只會有腳本、分鏡表和低解析度預覽。

  1. 在聊天中建立大綱:一個簡短的編號列表,列出各個章節(影片的章節)。保持簡短。
  2. 逐節開發: 時間、標題、字幕(完全按照螢幕上顯示的)、圖片、學到什麼、 動作與轉場、音效。對於措辭問題,提供 3–4 個簡短選項並推薦一個。 僅修改使用者的措辭以符合文法,並說明更改了什麼。
  3. 腳本 存放在 <project>/<output>/scenar.md,並在 claude.ai 專案中保留相同副本。 標頭 = 設定 + 上次渲染 + 分鏡表連結 + 狀態。
  4. 分鏡表 = HTML 成品(一個連結,總是重新發佈到同一個成品):
    • project/video.html 包含場景和 seek(t)(請參閱技術章節),甚至在渲染之前就需要。
    • project/storyboard.json:包含 name、time、learn、motion、sound、items、changed 等章節(僅對自上一版本以來的更改顯示 CHANGED 徽章),在最繁忙的時刻有 1–6 個幀 [time, caption], 可選的 labels 和 lang 用於 UI 語言。
    • scripts/storyboard.py project/video.html project/storyboard.json sb/。
    • scripts/player.py project/video.html sb/ --chapters project/storyboard.json [--audio mix.mp3]:一個可播放的預覽 位於分鏡表頂部,帶有章節時間軸(類似 YouTube)和評論:點擊評論按鈕 → 點擊一個元素 → 複製帶有時間、章節和元素的備註到聊天。音訊必須是 MP3(成品不提供 .m4a 格式)。
    • scripts/check.py project/video.html(請參閱檢查);修正或報告發現。
    • 使用 publish_files(模式 replace)發佈,包括螢幕截圖、片段和 MP3;將連結放入腳本中。
    • 以「Storyboard je aktualizovaný. Napiš ‚vygeneruj video‛, nebo co změnit.」(捷克語:分鏡表已更新。請說「生成影片」或告知要更改什麼。)結尾。
  5. 每次評論後: 更新 video.html → storyboard.json → 分鏡表 + 播放器 → 重新發佈 → 在兩個副本中更新腳本。簡短回覆更改了什麼。
  6. 僅在要求時以設定的解析度進行渲染。更改一個場景 = 僅重新渲染該場景。 輸出名稱不含變音符號,帶有版本號(例如 reel1_multimodel_v5.mp4);在腳本中記錄它。
  7. 影片獲得核准後,詢問是否要生成發布文字和縮圖(請參閱發布章節)。

3. 內容與節奏

  • 一個輸出 = 一個主要想法;長影片中每個章節一個想法。
  • 密度:每分鐘約 4–6 個學習點和 12–18 個視覺變化;無音段落不超過約 3 秒, 但要有足夠時間閱讀字幕(約每秒 2–3 個字)。
  • 展示,而非列出:圖表、比較、因果關係、網站上的實際步驟。
  • 在即時網站上驗證關於網站、應用程式和功能的說法,而非憑記憶。不要編造統計數據。
  • 用於說明的數據:在腳本中註明;是否在螢幕上標註由設定檔決定 (短格式:視覺噪音越少越好)。
  • 轉場:預設為交叉淡入淡出;在可能的情況下,連接場景(圖表轉變為下一個場景,卡片展開成一個場景)。
  • 真實品牌和標誌僅能真實且不變形地使用;切勿將第三方標誌放在說明性數據上。

4. 檢查

  • scripts/check.py project/video.html [--step 0.5] [--safe t,r,b,l]:檢查文字是否超出安全區域或幀邊界、 文字溢出、低對比度 (WCAG)、無音段落超過 3 秒。每個格式有預設區域(9:16、4:5、1:1、16:9); 設定檔可以覆蓋它們。
  • scripts/keys.py project/video.html out t1 t2 …:在指定時間生成幀 + 聯繫表;查看它們。
  • 渲染後:從 MP4 (ffmpeg -ss t -frames:v 1) 擷取幾個幀,檢查時長、響度。

5. 音訊

  • 鈴聲和音樂來自設定檔;將授權資訊(作者、標題、ID、來源)寫入腳本。
  • scripts/mix_audio.py out/video_only.mp4 music.mp3 jingle.mp3 output.mp4 [--music-start s] [--jingle-len s] [--voice f] [--voice-start s] [--sfx f] [--target -14](若無鈴聲或音樂:使用 - 代替檔案): 音樂在鈴聲下壓低,然後逐漸增強,在旁白下自動壓低,最後淡出; 兩遍 loudnorm 標準化至 −14 LUFS,真實峰值 −1.5 dBTP;影片不重新編碼。
  • 跳過音軌的安靜開頭(按每秒 RMS 計算),使鈴聲後不會出現音量下降。
  • 音效 需要配合內容,僅在重要的變化處使用,且音量遠低於音樂: scripts/sfx.py cues.json sfx.wav --dur <length> 透過程式碼生成:whoosh(場景轉場)、click(幀)、 pop(卡片出現)、tick(標籤)、swell(高亮)、riser(鋪墊)、thud(定論)。從時間軸 T 和分鏡表中的 "sound" 欄位取得時間 (cues.json)。不儲存音訊檔案;效果由程式碼生成。 在 Claude Code 中可選:earshot (MCP;252 種聲音以程式碼形式存在,提供聆聽和同步檢查),前提是 Petr 安裝它(約 1.1 GB 模型)。
  • 具有逐字同步功能的旁白: scripts/align_voice.py voiceover.wav project/ [--text script.txt] (Whisper, 捷克語) 建立 vo.json、vo.js 和 vo.srt。在 video.html 中載入 <script src="vo.js"> 並將圖形與單字時間對齊: voAt('word') 返回某個單字的時間;使用 wordCaption(el, t) 實現逐字字幕(適合 9:16、4:5、1:1 格式)。 錄音是主時鐘:從中取得長度和場景時間,絕不拉伸任何內容。 Whisper 的時間精度約為十分之一秒;請透過聆聽檢查。--text 參數會比較實際文字與聽到的內容。
  • 庫存音樂可能觸發 Content ID;請使用授權資訊提出爭議,不要選擇「升級為申訴」。

6. 技術

  1. 頁面 project/video.html(從 templates/start.html 開始):window.FORMAT={w,h}(設計解析度), 場景以 <div class="scene"> 表示,時間軸 T={s1:[0,3.5],…},確定性的 seek(t)(沒有 CSS 動畫、 計時器或 Math.random();使用種子隨機數),在結尾處 window.seek=seek; window.T=T;。 透過 npm i @fontsource/<font> 使用本地字型(播放器會切換到 Google Fonts)。將標誌內聯為 SVG。
  2. 即時網頁錄製(當需要展示網站操作過程時,取代靜態螢幕截圖): scripts/record_web.py steps.json out/ [--width 1280 --height 800 --scale 2]:Playwright 根據步驟操作網站 (click、type、hover、spot = 帶有變暗背景的幀、zoom/unzoom、scroll、wait、mark), 附帶滑動游標和點擊漣漪效果;輸出 web.mp4 + marks.json(包含步驟時間)。 在 Petr 的 PC 上執行 (Claude Code);雲端沙盒無法訪問一般網站。拒絕 cookie 橫幅。 在 video.html 中加入 <video src="web.mp4" muted preload="auto">,並使用 vseek(video, time)(範本)移動它; 渲染、檢查和分鏡表需等待搜尋完成。
  3. 網站螢幕截圖 使用 Claude 在 Chrome 中操作:document.documentElement.style.transform='scale(2)' (原點 0 0),移開游標,使用 save_to_disk;然後在影片中縮放和取景。
  4. 渲染 scripts/render.py project/video.html out/ [--scale S] [--only s3 s6] [--workers 4]: 每個場景並行輸出一個 MP4,CRF 18,使用 -c copy 拼接。預覽使用 --scale 0.5,從 1920×1080 渲染 4K 使用 --scale 2。
  5. 音訊 scripts/mix_audio.py(見上文)。

需要:安裝了 playwright、pillow、numpy 的 Python、Chrome/Chromium、ffmpeg、Node(字型);旁白需要 faster-whisper。

7. 發布(獲得核准與同意後)

  • 來自設定檔的社交媒體文案(Instagram、Facebook、YouTube):IG 3–5 行短句 + 結尾提問; FB 單獨上傳(不要從 IG 分享),文字更短;YouTube 標題最多約 60 個字元,關鍵字在前, 描述(內容、位置、主要規則、相關影片、音樂),長影片需包含章節時間戳記。 主題標籤僅使用設定檔中定義的。儲存到腳本中(「Texty k publikaci」章節)。
  • YouTube 字幕:上傳 vo.srt(當有旁白時)。
  • 縮圖:Reel 為 1080×1920 + 1280×720,影片為 1280×720 (YouTube);大字、主要圖案、設定檔風格。 YouTube 可能不允許 Shorts 使用自訂縮圖。

相關技能