Communitygithub.com

動畫講解影片

用 Remotion 把繪製的角色、場景和道具做成講解或教學動畫,並加上配音、音樂、音效和字幕。畫面是動畫,不是生成的實拍。

動畫講解影片 是什麼?

這是一套做成片的程式繪製講解影片技能。它接收主題或腳本,做出角色、場景和道具,再加入配音、音樂、音效和字幕並渲染成片。適合整支都用動畫講清楚,而不是從實拍裡剪。

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

在你喜歡的 AI 中提問

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

說明文件

Animator

你製作的是動畫:在 Remotion 中移動的繪製影像。你不是在製作影片素材。

範圍

  • 請勿在此技能中調用 Veo、Kling、Sora 或任何文字轉影片模型。每一幀都是由 Remotion 從圖片、SVG 和程式碼組合而成。
  • 如果需求需要真實影像、照片級寫實鏡頭或電影預告片,請停止並告知此技能無法完成。請勿暗中切換至影片模型。

品味準則

每一條準則都來自於被拒的版本。

  1. 場景,而非對話。 將每個要點呈現為一個舞台場景:角色行動、道具移動、場景變化。兩個頭像在背景前對話是失敗的結果。
  2. 動態。 每個鏡頭都要移動攝影機。經常改變鏡頭景別:全景、中景、特寫。在動作上剪接。任何鏡頭靜止不超過約 4 秒。
  3. 優雅的角色。 根據場景為角色精心打扮:完美的剪裁、優質的布料、有品味的細節。絕不使用通用的剪貼畫人物。
  4. 專業、體面的完成度。 必須看起來像工作室級別的動畫。沒有噱頭、沒有廉價特效、沒有迷因風格。
  5. 深度重於廣度。 一個要點呈現得好,勝過六個要點列成清單。如果主題有很多要點,建議每個要點製作一個影片。
  6. 主題允許時使用兩種聲音進行對話: 一個角色提問,另一個回答。詢問使用者哪個聲音扮演哪個角色。未經本人書面同意,絕不克隆真人的聲音。
  7. 對於模型或流程,使用示意圖剪輯。 不要問使用哪種剪輯。使用品牌色調的純 SVG 形狀,不含人物;旁白負責敘事。關於人物的故事則保持角色剪輯。
  8. 情緒跟隨主題。 一個有趣的應用程式得到一個有趣的影片:彈跳的動作、過衝的緩動、彈出的卡片。一個嚴肅的主題得到克制的處理。在選擇情緒之前先閱讀產品。

檔案位置

項目位置
專案目錄~/explainer/<名稱>/。使用 EXPLAINER_ROOT 覆蓋根目錄。每個專案一個資料夾;預覽和完整影片是同一專案的兩個合成
資料夾佈局此檔案旁邊的 SCHEMA.md。in/ 輸入,assets/ 主檔案,public/ 渲染輸入,work/ 暫存,out/ 最終成果
起始套件此檔案旁邊的 starter/:一個可播放故事板的簡化 Remotion 合成,以及品牌套件和動作輔助工具
腳本此檔案旁邊的 scripts/。從專案根目錄執行它們。new-project.sh 將起始套件和工具複製到新專案
媒體生成此檔案旁邊的 adapters/,以及合約的 ADAPTERS.md。設定 GEN_IMAGE、GEN_SPEECH、GEN_SFX、CUTOUT 和 GEN_MUSIC 為你自己的指令
品牌設定檔此檔案旁邊的 brands/<名稱>/。brands/example/ 是一個可複製的中性設定檔

在每個 Shell 或專案的 .env 中設定工具路徑一次:

SKILL=~/.claude/skills/explainer-video
export GEN_IMAGE="python3 $SKILL/adapters/gen-image.py"
export GEN_SPEECH="python3 $SKILL/adapters/gen-speech.py"
export GEN_SFX="python3 $SKILL/adapters/gen-sfx.py"
export CUTOUT="python3 $SKILL/adapters/cutout.py"
export GEN_MUSIC="python3 $SKILL/adapters/gen-music.py"

程序

1. 劇本與故事板

  1. 編寫 storyboard.json。對於每個節拍,寫下說話者、台詞、場景(地點、動作、道具)、鏡頭景別和攝影機移動。請參閱 SCHEMA.md 了解節拍欄位。
  2. 確保每個要點至少有一個場景能在沒有文字的情況下展示它。
  3. 詢問使用者影片是否需要字幕。如果需要,詢問哪一種:內嵌在畫面中,還是影片旁邊的 .srt 檔案。根據語音腳本製作字幕,而不是轉錄稿:腳本有正確的拼寫。
  4. 詢問使用者哪個聲音扮演哪個角色。提供一個免費聲音用於預覽,以及一個付費、富有表現力的聲音用於最終剪輯。
    • 先使用免費聲音。 用免費聲音為所有預覽和第一個完整剪輯配音。保持角色的性別。只有在使用者批准了免費聲音剪輯後,才生成付費聲音。在故事板中保留每個節拍的 tag 用於付費階段。
  5. 詢問使用者影片使用哪個品牌:brands/<名稱>/ 中的設定檔、專案自己的外觀,或無。即使沒有明顯品牌的影片也需要這個問題。將答案寫入 in/brief.md,以便從第一次渲染開始,卡片和色板就來自於它。
  6. 將故事板發送給使用者。在他們批准之前,不要生成圖片。

2. 角色

  1. 為每個角色編寫一個固定的描述:臉、頭髮、身體、衣服。逐字複製到每個圖片提示中。將其保存在 in/characters.md。
  2. 使用 gen-image.py 在平坦、純色的背景上生成基礎圖畫。在提示中添加“無地面陰影、無光暈”。
  3. 使用 --input 從基礎圖畫生成表演姿勢:走路、坐下、指點、反應、手勢、轉身。一個場景需要姿勢,而不僅僅是一個站立的人物。
  4. 製作嘴巴狀態(閉合、張開、大張)和眨眼。只將改變的區域粘貼到基礎圖畫上。絕不使用整張編輯過的圖像:臉部會偏移。
  5. 使用 cutout.py 剪切每個姿勢。對於圖畫使用 isnet-anime,對於照片使用 u2net。
  6. 將所有姿勢放在同一張 1024 像素的畫布上,以便姿勢改變不需要偏移。
  7. 製作所有姿勢的聯繫表(ImageMagick montage)。打開它,尋找一個臉部、衣服或比例不同的姿勢。重新生成該姿勢。每張圖像最多嘗試 3 次。

真人: 未經本人同意,不得繪製或動畫化真人。先詢問。

  • 使用 cutout.py --model u2net 剪切臉部。不要將其放在圓形中。
  • 淺色頭髮在淺色背景上會消失在剪切中。如果發生這種情況,請使用另一張照片。
  • 將脖子和肩膀漸漸消失在下巴下方,並用身體繪製脖子。裁剪的照片在那裡會有一個硬邊。
  • 用程式碼(SVG 關節)繪製身體。這樣每個姿勢都是精確的,沒有臉部會偏移。

3. 場景與道具

  1. 生成每個地點作為背景(--size 1536x1024),風格與角色相同,不含人物。
  2. 生成作為獨立剪切層的道具:手機、票卷、杯子、窗簾。
    • 檢查每個螢幕、裝置和包裝上的品牌標記和文字。“無標誌”提示無法阻止它們。使用 ImageMagick 修補標記。不要使用圖像到圖像的編輯:它會移除錯誤的部分而保留標記。
  3. 在需要的地方生成前景層以實現視差:座位排、欄杆。
  4. 如果專案有品牌設定檔,請使用它。從 brand.css 取色板,從 images/ 取標誌和標語,從 fonts/ 取字體。不要發明品牌顏色。閱讀設定檔的 NOTES.md 了解其品牌形狀。
  5. 如果專案沒有專門的圖示圖形,請使用 MDI 圖示(@mdi/js,一個 24×24 的路徑)。不要手動繪製圖示,也不要用表情符號。如果專案的網站已經在一個東西上使用了 MDI 圖示,請在影片中使用相同的圖示。

4. 聲音

  1. 使用 gen-speech.py 並為每個說話者使用相同的 --voice 生成每句台詞。
    • 在使用者批准剪輯之前,使用相同性別的免費聲音。關於付費模型的注意事項同樣適用於付費階段。
    • 執行 scripts/regen-voices.py <模型>。只有當請求發生變化(文字、聲音、模型、設定,或同說話者的相鄰台詞)時,它才會將台詞發送到 API,因此已批准的版本會保留。不要為了修復一句台詞而重新生成所有台詞。
    • 要故意重新生成一句台詞,使用 --fresh <節拍或說話者>。每次版本都保存在 assets/voice/takes/。要回到較早的版本,使用 --restore <版本>。
    • 在快取之前製作的專案沒有每個節拍的 voice_key。使用 --adopt 執行一次,否則第一次執行會重新生成每句台詞。
    • 使用富有表現力的模型時,在每句台詞前放一個英文音頻標籤,例如 [warmly],並設置模型的穩定性、相似性、風格和速度旋鈕。沒有這些,台詞聽起來會很平淡。將標籤保留在 line 之外,因為字幕顯示的是 line:將其放在節拍的 tag 欄位中,並在文字之前發送。
    • 不要對未記錄音頻標籤的模型使用音頻標籤。它可能會大聲說出它們。
    • 對於每個聲音,先列出名稱、外來詞和字母代碼。即使設置了語言代碼,聲音也會以其自身語言的方式讀取它們。先嘗試單詞的音標拼寫,然後是行內 IPA。為每個拼寫製作三個版本和一個控制版本,讓使用者用耳朵選擇。
    • 不要用大寫字母寫聲音。聲音可能會將大寫字母讀作單個字母。而是將聲音寫成一個單詞。
    • 新的版本會移動每個單詞。將節拍內的幀偏移(攝影機、高亮、音效)對齊到字幕範圍的開始,而不是字面幀。在獲得新的版本後,通過語音轉文字處理獲取單詞時間,並只重置範圍開始。
  2. 執行 scripts/level-voices.py。它會根據語音的響度來均衡每句台詞。峰值均衡是不夠的:台詞可能分散超過 6 dB。
    • 另一種語言的版本:保留場景,並從同一來源生成第二個合成。為新語言提供自己的故事板(使用相同的節拍 ID)、自己的聲音資料夾、封套和音樂剪輯(在 check-audio.py 中的 STORYBOARD、VOICE_DIR、MUSIC)。
    • 將新聲音均衡到已批准混音的語音水平,而不是同一個目標。
  3. 製作嘴巴封套並使用 scripts/gen-envelopes.mjs 打包它們。

5. Remotion 中的動畫

  • 舞台調度: 將每個場景作為行動來播放。角色走進來、坐下、反應並使用道具。在它們自己的層上移動道具。修復是添加缺失的部分;保留顯示原因的動作。
  • 攝影機: 在每個鏡頭中推進、平移或跟拍。在背景、角色和前景之間使用視差。 夾緊每個攝影機移動,以便每個必須填充畫面的圖層在其視差深度上保持在其中(包括旋轉)。深度 < 1 的圖層移動得比攝影機少:拉出或結束於中心外的平移會暴露畫面邊緣,露出一條地面。
  • 深度: 將地板和所有站在上面的東西(椅子、人、道具)放在同一層的同一個深度上。兩個深度會在每個攝影機移動下使地板和椅子腳分開,椅子會漂浮。一個靜止的點頭動作會繞著身體在座位線以上旋轉,而不是椅子。
  • 動作: 使用帶有小過衝的彈簧。在移動之前使用預期動作。絕不在兩個姿勢之間使用硬切換。
  • 靜止動作: 給呼吸、搖擺和眨眼各自的週期和相位。
  • 嘴巴: 從封套驅動它,最少保持 3 幀(starter 的 motion.ts 中的 mouthStates)。
  • 畫外音敘述者: 顯示一個跟隨封套的波形球,而不是敘述者的臉(starter 中的 NarratorOrb.tsx)。
  • 燈光: 將燈光用作敘事工具。例如:房屋燈光變暗,手機螢幕在臉上發光。
  • 轉場: 每個剪輯選擇一種(匹配剪輯、擦拭、硬切)。不要對所有剪輯使用同一種淡入淡出。
  • 一個角色在剪輯之間保持為一個物體。 當一個角色從一個鏡頭移動到下一個鏡頭時,將其從原來的位置帶到新的位置。一個從一邊離開並從另一邊進入的角色會被解讀為第二個角色。
  • 觀看者必須注意到的變化需要在畫外音中有一個暫停。 分割節拍,並在其後添加 1.5–2 秒的靜音。在該暫停中安排變化:標記舊狀態,使其變暗,交叉淡入淡出,然後在下一句台詞上高亮新狀態。
    • 將暫停放在句子斷點處,絕不能放在短語內部。通過音量找到間隙:在單詞之後,取低於約 −38 dB(相對於峰值)的最長 20 毫秒窗口序列,並在其中間剪切。不要從語音轉文字單詞時間中取間隙:它們的邊緣可能相差 0.5 秒。
  • 字幕和要點卡片:保持簡短。卡片支援一個場景。它絕不取代它。
  • 畫面——每個影片都有:
    1. 開場標題卡,約 3 秒:標誌(如果適用)、影片標題和一行簡短文字。可以無聲或僅有音樂。
    2. 結束幻燈片,約 4 秒:標誌(如果適用)、主張或行動呼籲,以及 URL。可以無聲。
    3. 角落標誌: 在整個影片中,兩個卡片之間,在右下角有一個小標誌。在開場卡片後淡入,在結束幻燈片前淡出。保持其遠離臉部和關鍵元素。
    4. “如果適用”:品牌、產品或公司影片有標誌。個人影片沒有公司標誌。它仍然有標題卡和結束幻燈片。
    5. 要將畫面添加到已完成的影片中,不要重新調整畫外音的時間。將現有合成放在兩個卡片之間的 <Series> 中。卡片在開始和結束時添加靜音,這是可以接受的。
  • 品牌優先,始終如一。 如果專案有品牌設定檔,請使用它:來自設定檔的卡片、來自 brand.css 的色板、作為真實資產的標誌和標記。如果專案有真實的應用程式截圖,將它們用作圖層:真實的螢幕勝過繪製的螢幕近似。只有人物、地點和道具是繪製的。UI、標誌和字體來自品牌。 如果設定檔明顯落後於即時應用程式,請告知並使用應用程式。

6. 檢查圖片

  1. 使用 npx remotion still 在關鍵幀處渲染靜止畫面。
  2. 打開靜止畫面。尋找被卡片或字幕遮蓋的臉,以及被畫面邊緣切斷的角色。可選的第二意見:ADAPTERS.md 描述了 REVIEW_IMAGE 指令。將其判斷視為線索,而不是門檻,並在畫面上確認每個發現。
  3. 渲染一個約 20 秒的樣本,包含一個場景、一個姿勢變化、一個攝影機移動和一個對話交流。
  4. 圍繞每個姿勢變化提取幀

…

[已截斷以供翻譯]

相關技能