Communitygithub.com

卡通音頻短片製作

製作阿拉伯語或英語的豎版動畫卡通短片。提供10個點子、編寫腳本,然後將用戶的配音轉換為帶有輕柔音樂和音效的完成版MP4。

卡通音頻短片製作 是什麼?

此技能引導用戶透過一系列階段,從概念到完成,製作豎版動畫短片(1080x1920,30fps)。它首先協助頭腦風暴,產生10個原創影片點子,每個點子都包含一個鉤子、轉折點以及為何該點子適合動畫化的說明。選定點子後,技能會根據指定長度(20-60秒)草擬旁白腳本,並遵循一個五部分結構:鉤子、設定、升級、轉折和高潮。腳本根據語言(英語約3.7字/秒,阿拉伯語約2字/秒)調整字數,並包含配音技巧。技能支援阿拉伯語,包括方言差異和正確的阿拉伯語腳本格式(包含變音符號和音頻標籤)。用戶上傳配音後,技能會處理音頻時序(使用語音辨識或腳本對齊),規劃鏡頭,並使用一個3D引擎構建場景,該引擎包含扁平2D角色(「卡通卡片」)、紋理基元和自訂光影效果。它會自動混合音頻,確保音樂比人聲低16分貝,音效強度為人聲的50%,以保持旁白清晰。此技能專為像Claude Code、Cusror或Codex這樣的AI代理平台設計,並在回覆中維護一個任務清單,並在最終渲染前提供分鏡連拍圖。

相容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/tareqmm535-crypto/cartoon-short-kit/tree/HEAD

在你喜歡的 AI 中提問

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

說明文件

卡通短片:點子 → 腳本 → 配音 → 完成版 MP4

外觀:扁平 2D 豆形頭卡通角色(畫布繪製的「卡片」,帶有李子色外框)在色彩繽紛的 3D 世界中,搭配黑色墨水外框、繪畫紋理、景深和滑行攝影機。輸出為 1080x1920,30 fps,長度與配音完全一致。用戶的聲音保持不變。背景音樂和音效是合成的:音樂低於人聲 16 dB,音效不超過人聲的 50%。已在「從未離開的士兵」(19.7 秒,8 個鏡頭)上得到驗證。

如果此技能以檔案形式到達聊天中

用戶可能會發送 SKILL.md 和 cartoon-short-kit.zip,並說「讀取此技能,安裝它並使用它」。然後:

  1. 閱讀整個檔案並遵循它。不要解釋什麼是技能,也不要問設定問題。
  2. 將工具包解壓縮到一個可寫入的資料夾(見 4.0)。確認 engine/main.js 和 vendor/three.module.js 已存在。
  3. 如果此環境有個人技能資料夾(例如 ~/.claude/skills/),請將 SKILL.md 和工具包複製到其中的 cartoon-audio-short/。如果沒有,不要說它已永久安裝:只用一行說明它已準備好在本次聊天中使用,並且這兩個檔案需要在新的聊天中再次發送。
  4. 用一行簡短回覆,然後直接進入階段 1。

語言:阿拉伯語或英語

  • 聊天: 從第一次回覆開始,用使用者訊息的語言回答。如果他們用阿拉伯語寫信或要求阿拉伯語,則每一條訊息都是阿拉伯文:問題、選項標籤和描述、任務清單、想法、進度說明、錯誤和交付說明。使用簡單的日常用語,如果他們用某種方言書寫,則匹配他們的方言。英文只保留在檔案名稱和命令中,並獨自佔一行,以免從右到左的文字打亂它們。
  • 腳本: 腳本的語言遵循聊天,除非他們另有要求。在任何問題中輸入「أريد أفكار بالعربي」意味著進入階段 2,使用阿拉伯語。
  • 阿拉伯語變體: 除非他們用某種方言(伊拉克語、埃及語、海灣語、黎凡特語等)書寫或要求,否則書寫簡單的標準阿拉伯語。不要停下來詢問。用一行結束腳本回覆:「تريده بلهجة ثانية؟ اكتب اللهجة وسأعيد كتابته。」除非他們要求,否則切勿在一個腳本中混合標準語和方言。
  • 阿拉伯語的固定問題。 使用以下措辭:
    • "من أين نبدأ؟"
      • "الصوت جاهز": 上傳音訊檔案,如有文字也一併上傳,我將製作影片。
      • "عندي نص": 我會改進它並給你錄音建議,然後在上傳音訊後製作影片。
      • "أحتاج إلى أفكار ونص": 我會建議十個原創點子,然後為你選擇的點子寫腳本。
    • "كم مدة الفيديو؟"
      • "من 20 إلى 30 ثانية (مُوصى به)": 大約 40 到 60 個單詞。
      • "من 30 إلى 45 ثانية": 大約 60 到 90 個單詞。
      • "من 45 إلى 60 ثانية": 大約 90 到 120 個單詞。

規則

  • 故事、角色和鏡頭始終是原創的。切勿逐鏡頭複製其他創作者的作品。而是提供相同點子的原創詮釋。
  • 沒有真實的、具名的在世人物作為角色,也沒有品牌吉祥物或標誌。
  • 除非使用者要求,否則不要加字幕。文本內文字(雕刻的訊息、標誌)是可以的,並且必須正確閱讀(不是鏡像)。標誌、標籤和標題使用腳本的語言:阿拉伯語影片使用 "بِيعَ",而不是 "SOLD"。按照 4.3 中的方式繪製它們。
  • 切勿編輯或重新調整聲音的時間。圖片是根據聲音來定時的,每個視覺反應都在其單詞之前的 0-3 幀內。
  • 音訊電平: 背景音樂應低於人聲 16 dB(閘控均方根),因此旁白保持清晰。音效位於 50% 或略低,峰值被限制,沒有任何打擊音突出於旁白之上。始終使用 mix.py 進行混音,不要手動操作。不要使用會改變此比率的閃避或壓縮;只有一個線性增益加上一個峰值限制器應用於整個混音。
  • 使用任務清單讓使用者知曉。在長時間渲染之前發送一張靜態影像連拍圖。

階段 1:接收(始終優先)

如果已附加音訊檔案,請跳到階段 4。如果也提供了腳本,則使用它進行定時。 否則,提出一個 AskUserQuestion(或純文字,如果該工具缺失):「您從哪裡開始?」

  • 配音已準備好:要求他們上傳它,如果有的話也一併上傳腳本文字(腳本使定時更精確)。到達後進入階段 4。
  • 我有腳本,需要配音:如有必要,根據階段 3 收緊腳本,連同錄音技巧一起回傳,要求上傳,然後進入階段 4。
  • 需要影片點子和腳本:進入階段 2。 同時詢問目標長度(如果他們尚未說明)。預設為 20-30 秒;允許 45-60 秒。在阿拉伯語聊天中,使用「語言」部分下的措辭。

階段 2:10 個影片點子

在一次回覆中準確給出 10 個點子,編號,並要求使用者回覆一個數字(或「更多」)。每個點子獲得:

  • 標題(5-8 個單詞,好奇心驅動,例如「從未離開的士兵」)。
  • 鉤子句:第一句口語,一個悖論被陳述為事實(「一個人賣掉了艾菲爾鐵塔。兩次。」)。
  • 轉折點一行(結束影片的諷刺性報應)。
  • 為什麼它動畫化效果好:2-3 個重要的視覺時刻(倒塌、揭露、追逐)。
  • 真實還是傳說:簡單說明它是有記錄的歷史、有爭議的描述還是民間傳說。

使一個點子「完美」適合此格式的因素:

  • 一個具有可展示的物理因果關係的驚人故事。
  • 一個清晰的普通人角色、不斷升級的利害關係以及最後一句話的轉折。
  • 一個可以從簡單的 3D 形狀加上卡通卡片(城鎮、橋樑、船隻、城堡、沙漠、實驗室、宮殿)構建的場景。
  • 將 10 個點子跨越時代和主題進行混合:古代、中世紀、19 世紀、現代、科學、動物、發明、災難、奇怪的法律、幸運的意外。
  • 對於任何呈現為真實的內容,在提供之前用網路搜尋驗證關鍵事實。不要將病毒式傳說呈現為事實。如果使用者無論如何都想要它,則將其框定為「傳說說」。
  • 沒有真實的在世人物作為笑話的對象,沒有圖形內容,也沒有政治內容。

對於阿拉伯語點子:

  • 用阿拉伯語寫標題、鉤子、轉折點和說明。用自然的阿拉伯語句子書寫鉤子,而不是翻譯。給外國名字其常見的阿拉伯語拼寫。
  • 將來自阿拉伯和伊斯蘭歷史與科學的故事與世界故事混合,使列表感覺像是為這個觀眾量身定做的。
  • 同時搜尋阿拉伯語和英語。流行的阿拉伯語故事也常常沒有來源地傳播,因此以相同的方式標註它們為真實還是傳說。
  • 切勿展示先知、他們的同伴或其他神聖人物作為角色。不要拿宗教、教派、部落或國籍開玩笑。

階段 3:腳本(在他們選擇之後)

只寫旁白(口語文字中沒有舞台指示)。英語約為 3.7 字/秒:20 秒 ≈ 75 字,30 秒 ≈ 110,60 秒 ≈ 220。阿拉伯語較慢,約為 2 字/秒:20 秒 ≈ 40 字,30 秒 ≈ 60,60 秒 ≈ 120。 阿拉伯語單詞承載更多音節,實際阿拉伯語聲音測量為 1.6-2.1 字/秒。公式:

  1. 鉤子(句子 1,無鋪陳):荒謬的事實。
  2. 設定用 1-2 行:何時、何地、何人、一個具體細節。
  3. 升級,2-4 個節拍,每個更大。其他人懷疑或嘲笑。使用一個誇張的笑話。
  4. 謎團或轉折:「但當…」 / 「你看,」引入真實機制,通常用一個日常類比。
  5. 轉折/報應:簡短、諷刺,並且是影片的最後一句話。 使用簡單的口語英語、縮寫、句子約 8-15 個單詞,數字寫成單詞。永遠不要描述觀眾已經看到的內容。

對於阿拉伯語腳本:

  • 保持句子約 6-12 個單詞,並使用相同的五部分公式。諸如「لكن عندما…」和「والسبب؟」的轉折效果很好。
  • 將數字和年份寫成單詞(ألف وتسعمئة وأربعة وتسعون),並將外來詞和品牌名稱用阿拉伯字母拼寫,以便聲音正確讀取它們。
  • 為聲音加標點:「،」和「。」用於呼吸,「…」用於揭示前的停頓,「?」用於問題。定時也使用此標點。
  • 提供一個可複製的語音區塊,準備好貼上到語音產生器中:
    • 每個單詞上的變音符號,這在名稱和具有多種讀音的單詞上最有幫助。省略敘述者不會說的詞尾變化,並按口語書寫方言。如果他們要求不加變音符號,或者聽起來不對,則將其刪除。
    • 英文的 Eleven v3 音頻標籤,例如 [excited]、[curious]、[serious]、[whispers]、[warmly]。每個句子組最多使用一兩個,僅在單詞需要的地方使用。
    • 伊拉克語的 "g": 在口語發音需要的地方書寫 گ 和 چ(تِگْدَر,لْگِيت),因為 ك 讀作 "k"。
    • 部分: 對於超過約 700 個字元的腳本,在句子結尾將其分成編號的部分。
  • 字數和長度使用上述阿拉伯語速率,忽略標籤和變音符號。

然後回覆:

  • 腳本在可複製區塊中,附帶字數和估計長度。
  • 一段視覺計劃(你將製作的鏡頭)。
  • 錄音技巧:一個穩定、溫暖的敘述者聲音;ElevenLabs 效果很好(深沉的敘述者聲音,速度約 1.05-1.1,穩定性約 45-55%)。Mp3 或 wav 都可以。在句子結尾留下自然停頓。匯出時不帶音樂。
  • 阿拉伯語錄音技巧:使用 Eleven v3,因為舊型號會大聲朗讀 [tags] 標籤。從穩定性設定為自然,速度約 0.95 開始,在產生所有內容之前先嘗試前幾個句子。使用另一個產生器時,首先刪除標籤。他們自己的聲音也可以,無需標籤或變音符號。
  • 要求:「配音準備好後上傳,我將製作完整的影片。」 保留最終的腳本文字。它驅動階段 4 中的定時,因此不需要語音辨識。如果他們錄製了更改過的版本,請要求提供最終文字。

階段 4:建立影片(上傳配音後)

從現在開始不間斷地執行所有操作。僅在無法解決定時問題時才提問。

4.0 取得工具包

程式碼工具包包含引擎、工具、實例、供應的 three.js r160、來自 github.com/mromidev/claude-animated-shorts 的 toon.ts Pen 庫(均為 MIT 許可)和 Lalezar 阿拉伯語字體(SIL OFL)。按以下順序找到它,並將其視為唯讀:

  1. 此 SKILL.md 旁邊的 kit/ 資料夾,使用 find / -name SKILL.md -path "*cartoon-audio-short*" 2>/dev/null 找到。
  2. 一個已解壓縮的 cartoon-short-kit 資料夾。
  3. 在本次聊天中發送的檔案中的 cartoon-short-kit.zip:find / -name "cartoon-short-kit*.zip" 2>/dev/null,然後將其解壓縮到 ~/cartoon-short-kit-src/。工具包是其中包含 engine/ 的資料夾。

然後執行 bash <kit>/tools/setup.sh ~/shorts/<slug>。它將引擎和工具複製到專案中,安裝供應的 three.js,使用 Node 22 的 module.stripTypeScriptTypes 從 toon.ts 中移除類型,並連結 Playwright。無需網路。如果缺少供應的檔案,它會回退到 npm 或 git clone。

  • 要求:Node 22.6+、帶有 numpy + Pillow 的 Python 3、ffmpeg,以及帶有 Chromium 的 Playwright(如果缺失,執行 npm i -g playwright && npx playwright install chromium)。
  • 如果套件註冊表被阻止,通常可以透過 GitHub 使用 git。永遠不要停用 TLS 或繞過代理。
  • Chromium:使用預先安裝的 Playwright 瀏覽器,搭配 --use-angle=swiftshader --enable-unsafe-swiftshader --ignore-gpu-blocklist。這樣可以提供 CPU WebGL,速度約為 3-10 秒/幀。

4.1 定時

執行 python3 timing.py voice.mp3 script.txt --out work。如果沒有腳本,則為阿拉伯語新增 --lang ar。腳本可以是準確的語音區塊:它會移除 [tags] 和變音符號,並在阿拉伯語標點處分割片語。

  • 如果安裝了 whisper 或 faster-whisper,它會使用單詞時間戳記。對於阿拉伯語,它使用多語言模型,並保留腳本本身的單詞,因此聽錯的方言單詞不會改變文字。
  • 否則,它會將腳本片語(在標點處分割)對齊到靜音偵測到的語音片段,使用一個 DP 來比對音節與持續時間,並懲罰在片段內部的句子結尾以及在片語內部的長間隙。
  • 沒有 ASR 且沒有腳本時,要求提供腳本。Claude 無法聽到音頻。
  • 檢查 work/phrases.json:停頓應落在句子結尾。總幀數 = round(duration × 30)。

4.2 鏡頭計劃(work/PLAN.md 在程式碼之前)

每行一個鏡頭:幀數、單詞、設定、光線、攝影機運動、角色/姿勢/表情、效果和音效提示。

  • 幀 0 已經是鉤子圖像。
  • 通常每個片語一個鏡頭。將很小的片語合併到下一個鏡頭中。
  • 逐字說明每個句子。道具承載笑話。
  • 變化鏡頭尺寸:鉤子中景 → 廣角揭露 → 雙人鏡頭 → 插入關鍵物件的特寫 → 反應特寫 → 環境移動以呈現報應。
  • 使用光線來表現節拍:白天用於正常,金色用於衰退或戲劇性,夜晚藍色用於解釋。時間跳躍獲得一個 6 幀的白色閃光。
  • 轉折句得到一個重擊音(音樂停止,低沉的打擊音,推進並帶有旋轉)。最後鏡頭的實體報應落在最後一個詞上。

4.3 世界(web/main.js)

保持引擎部分:卡通材質、墨水收縮、add/tbox、天空、燈光、卡片、渲染目標/後處理、applyLight、drawActors、swapForNd、renderFrame。將 // ---------- world ---------- 和 // ---------- cards ---------- 之間的範例世界,以及 worldState() 的故事部分替換掉。

  • 從具有繪畫畫布紋理(paint.js:木板、橫樑、腐爛的木頭、石頭、苔蘚/常春藤、草、泥土、灰泥、屋頂瓦片、大理石、橫幅、雕刻文字)的基元進行建構。以相同的扁平帶深色接縫風格編寫新的繪製器。
  • 使用 tbox 來保持恆定的紋理像素密度,一個 2 步驟的卡通漸層,以及霧 = 地平線顏色。
  • 背景:山丘(半埋的球體)、山脈(圓錐體 + 雪頂)、柏樹/松樹、遠處的房屋、繪畫的雲朵廣告牌。
  • 場景物件(倒塌、墜落、門)是由 0..1 進度驅動的旋轉群組,來自 worldAt(f),具有緩動和交錯的部分。
  • 曲線的文本內文字使用平面 UV。檢查它是否沒有鏡像。
  • 任何物體上的阿拉伯文字: 使用 P.signCanvas(text, opts) 搭配 P.tex() 用於標誌和標籤,P.drawText() 用於你自己的畫布,或 P.carvedText() 用於雕刻。它們載入捆綁的字體,設定從右到左,並繪製完整的字串。永遠不要逐字母繪製阿拉伯文。

4.4 角色

使用 P.character():一個附加身體/衣服/頭髮的豆形頭。臉部表情是繪製的:眼睛(睜開/閉上/瞇眼/驚嚇/思考)、眉毛(向上/向下/內八/外八/聳肩/無聊)、嘴巴(微笑/悲傷/O 型/露齒/大喊/噘嘴/僅張開/閉著)。將其保存下來。

  • 保持可讀:卡片上的繪圖是清晰的線條藝術,在 1080p 下具有良好的對比度。
  • 顏色:使用 3-4 種色調的色調範圍。為角色的衣服和頭髮設定統一的外觀。
  • 每個鏡頭使用 P.createActors() 並只繪製需要的演員。
  • 動畫:透過位置變化、循環行走動畫以及關鍵姿勢之間的形狀插值來實現。

4.5 配音定時

將 framework/voice.js 中的音訊資料複製到 main.js 中:一個形如 {phrase: [startTime, endTime] ...} 的時間戳記陣列。使用 voicecue(name) 來觸發片語。

  • 對話氣泡(可選):使用 P.bubble() 搭配框架和文字。如果是阿拉伯語,則從右到左對齊。檢查文字方向。

4.6 渲染

執行 node web/main.js。它會建立一個名為 work/render/ 的資料夾,帶有 PNG 幀。然後執行 bash tools/render.sh work/voice.mp3 30。這會產生 final.mp4。

  • 如果幀已存在且 main.js 沒有改變,則 main.js 會跳過渲染(斷點續傳)。
  • 如果 Chromium 失敗,請檢查它是否已安裝且可執行。如果需要,使用 playwright install chromium 重新安裝。
  • 音訊:mix.py 處理最終音訊混合。

4.7 交付

將 final.mp4 傳送給使用者。同時傳送一兩幀,以便他們可以看到結果。

工具

  • timing.py:對齊腳本和音訊。
  • paint.js:生成畫布紋理。
  • mix.py:混合音訊。
  • setup.sh:設定專案。
  • render.sh:渲染最終影片。

相關技能