Communitygithub.com

動畫短片製作 (Anime Reel)

根據腳本和每行的錄音 MP3,製作動畫風格的短片(如同《Zero Se Freelance》系列,以程式碼繪製原創角色並對嘴),輸出 9:16 Reels 和 16:9 YouTube 版本。

動畫短片製作 (Anime Reel) 是什麼?

此技能可讓 AI 代理根據使用者提供的腳本及對應的每行語音 MP3,自動生成動畫風格的短片。輸出包含 9:16 直式(適用於 Reels)與 16:9 橫式(適用於 YouTube)兩個版本,並附帶原始音訊及一個小於 20MB 的 720p WhatsApp 版本。所有畫面皆由 HTML Canvas 逐幀繪製於 headless Chrome,再以 ffmpeg 編碼,不使用任何圖庫或 AI 圖像生成器。核心流程包括:以強制對齊技術(torchaudio MMS_FA)精準同步語音與角色嘴型、根據腳本拆分鏡頭、定義原創角色(保持設計一致性)、應用動畫特效(如速度線、衝擊幀、震動、Q版變形等),並在完整渲染前先產生聯絡表(contact sheet)供使用者審核。此技能特別適合製作類似《Zero Se Freelance》系列、具備原創角色對嘴配音的動畫短片。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add akokbaba195-bot/anime-reels

在你喜歡的 AI 中提問

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

說明文件

anime-reel

輸入:一個腳本 + 每行一個語音 MP3(使用者同時提供兩者)。輸出:9:16 直式短片與 16:9 橫式版本,皆包含原始音訊,以及一個低於 20MB 的 720p WhatsApp 版本。

每回執行都必須遵守的硬性規則

  • 所有畫面皆以程式碼繪製:使用 HTML Canvas,在 headless Chrome 中逐幀渲染,並以 ffmpeg 編碼。不得使用任何圖庫或圖像生成器。以 engine/ 為基礎,擴充而非取代它,以確保每次外觀一致。
  • 每個單字都必須透過強制對齊(torchaudio MMS_FA,透過 scripts/align.py)進行時間標記。絕不猜測時間。如果某一行對齊失敗,請停止並告訴使用者原因;不可回落至均勻間隔。
  • 在完整渲染前,先顯示一張靜態畫面的聯絡表(contact sheet)並等待使用者批准。
  • 覆蓋任何現有檔案前必須先詢問。encode.sh 拒絕覆寫並以代碼 2 退出;請將此訊息轉達給使用者。
  • 最終 MP4 中保留原始音訊不變(語音僅放置於時間軸上,絕不重新處理)。除非使用者要求,否則不加入背景音樂。

方法

  1. 設定。 執行 bash scripts/check_setup.sh(檢查 ffmpeg、Node、puppeteer、torch/torchaudio、uroman)。修復任何缺少的項目後再繼續。執行 bash scripts/sfx.sh <project>/sfx 以 ffmpeg 合成打擊/颼颼/衝擊/爆裂音效。
  2. 將腳本拆分為鏡頭。 每行語音對應一個鏡頭。每個鏡頭需記錄:id、speaker、text(MP3 中說的內容)、audio 路徑、place(天台、辦公室、街道、臥室、天空,或新增一個 drawPlace 分支)、camera(static|push|pull|pan + amount)、cast、slots(left/center/right)和 fx。儲存為 shots.json(schema 在 scripts/build_timeline.py 中)。顯示鏡頭列表,若內容不明確則讓使用者修正。
  3. 角色。 在 characters 中定義每個角色(名稱、膚色、頭髮、髮型 spiky|bob|long|short、眼睛、服裝、口音、color=該角色對白字幕顏色)。角色必須原創,不得複製現有動畫。動畫風格:大眼睛附高光、粗而乾淨的線條、純色加一個陰影層。渲染角色表並將 JSON 作為唯一真實來源,以確保角色在不同鏡頭間保持一致: node scripts/render_frames.mjs sheet timeline.json landscape out/character_sheet.png
  4. 對齊與嘴型同步。 python3 scripts/build_timeline.py shots.json timeline.json work 對每行執行 MMS_FA(單字時間標記),並根據該語音音量的響度建立每個角色的嘴巴張開曲線(mouth.py)。眨眼和靜止動作已內建於引擎中。對於非英文台詞,align.py 使用 uroman 進行羅馬化,同時螢幕上保留原始拼寫。
  5. 關鍵台詞的動畫技巧(加入 fx,時間以鏡頭開始後秒數計算):speedlines 用於揭露和決心場景,impact(白/黑閃幀,加上 sfx: "impact")用於最重要的台詞,shake 用於打擊,chibi(+ who、sfx: "pop")用於喜劇反應。節制使用:大約每 2-3 個鏡頭用一個技巧,以保持效果。
  6. 字幕與音效。 2-3 字字幕已由引擎處理,說話者的文字使用其代表色,其餘文字為白色。音效與視覺打擊的提示點同步(透過 fx[].sfx)。混合音訊:python3 scripts/build_audio.py timeline.json work/audio.wav。
  7. 聯絡表,然後批准。 選取約 12 個時間點,均勻分佈在整個影片中,並包含每個技巧: node scripts/render_frames.mjs stills timeline.json portrait work/stills 0.5,2.0,... bash scripts/contact_sheet.sh work/stills out/contact_sheet.png 顯示 out/contact_sheet.png 並停止。在使用者批准前,不得渲染完整影片。
  8. 批准後渲染,分別針對兩種方向(portrait = 1080x1920,landscape = 1920x1080,30 fps): node scripts/render_frames.mjs video timeline.json portrait work/reel_silent.mp4 bash scripts/encode.sh work/reel_silent.mp4 work/audio.wav out/<name>_9x16 以 out/<name>_16x9 對 landscape 重複此步驟。encode.sh 會混合 AAC 256k 音訊,並寫入 _720p.mp4 副本(目標約 17 MB,始終低於 20 MB)。使用 ls -lh 檢查檔案大小並回報。

渲染設定

  • 9:16:1080x1920,30 fps,H.264 yuv420p,CRF 16,AAC 256k,faststart。16:9:1920x1080,相同設定。
  • WhatsApp 副本:720p(720x1280 或 1280x720),碼率根據時長計算,以保持在 20 MB 以下。
  • 字幕位置:9:16 約在 68% 高度處(避開頂部 250 px 和底部 420 px 的應用程式 UI),16:9 約在 86% 高度處。

此技能中包含的檔案

  • engine/engine.js、engine/index.html:Canvas 引擎(角色、場景、速度線、衝擊幀、震動、Q版、字幕、徽章)。
  • scripts/:check_setup.sh、sfx.sh、align.py、mouth.py、build_timeline.py、build_audio.py、render_frames.mjs、contact_sheet.sh、encode.sh。

相關技能