Communitygithub.com

berhjoan/video-con-codigo

用純程式碼(Remotion + 本地音訊)製作完整的動畫短片(故事、角色、攝影機、粒子、西班牙語配音、嘴形同步、音樂、混音),完全不使用付費 API。

video-con-codigo 是什麼?

這項技能提供一套完整的流程,讓開發者能夠完全透過程式碼(Remotion 與本地工具)生成一部完整的動畫短片。它涵蓋從故事創作(採用 HyperFrames 結構化方法)、本地語音生成(使用 Kokoro-82M 和 Piper TTS)、自動嘴形同步(透過 Rhubarb 生成音素提示)、音樂與音效製作(使用 pretty_midi 與 FluidSynth),到最終渲染與封裝的整個流程。技能強調伺服器端渲染(無 GPU 環境),並提供詳細的 Remotion 設定最佳化、成本估算(3 分鐘短片在 2 個 CPU 上約需 1.5 小時),以及一個可重複使用的元件清單(相機、粒子、角色骨架、文字動畫等)。此外,它還包含質量控制步驟,例如透過語音辨識(ASR)檢查語音,並強制要求所有動畫必須基於影格(frame-based),禁止使用 CSS transition、Math.random 或 Date 等非確定性方法,以確保結果可靠且可重現。

相容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/berhjoan/claqueta/tree/HEAD/library/skills-propias/video-con-codigo

在你喜歡的 AI 中提問

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

說明文件

100% 用程式碼製作影片 (Remotion + 本地音訊)

工作順序 (請勿更改順序)

  1. 先寫故事 (HyperFrames story.md 方法):唯一重點,3 條故事線,前 2 秒內要有鉤子,以百分比標示節拍,禁止使用生成的影片「提示」(所有元素必須同樣進入畫面,禁止無原因漂浮、卡片排成一行、漂浮的 Logo)。撰寫 SCRIPT.md 並加上時間碼。
  2. 配音 → 實際時間長度 → timeline.json (場景、每句台詞的開始時間、事件、音樂段落)。音訊與影片讀取同一個 JSON。
  3. 主音訊 (音樂 + 音效 + 配音,包含 ducking,−15.5 LUFS,峰值 ≤ −1 dBTP)。
  4. 在 Remotion 中製作場景,一個 Film 組合,每個場景使用 <Sequence>;在渲染前檢查控制影格 (聯絡表單)。
  5. 逐場景渲染 (--frames=a-b --muted) → 串接 → 用 ffmpeg 封裝 → 用提取的影格進行 QC。

引擎

  • npx create-video@latest --yes --blank --no-tailwind <dir>; npx remotion add @remotion/transitions @remotion/media @remotion/effects @remotion/noise @remotion/paths @remotion/shapes @remotion/motion-blur @remotion/fonts。
  • 無 GPU 沙箱:在 remotion.config.ts 中設定 Config.setBrowserExecutable(<chrome-headless-shell>)、Config.setChromiumOpenGlRenderer("swangle")、setConcurrency(2)、setCrf(18)、setPixelFormat("yuv420p")。
  • 字型:使用 @fontsource[-variable]/* 套件 (npm 可安裝;Google Fonts 不可用)。在捕獲前使用 delayRender 等待 document.fonts.load() (需要字形的字元:áéíóúñ¿¡)。
  • Remotion 規則:所有動畫都基於 useCurrentFrame();interpolate 需 clamp;使用 Remotion 的 random(seed);禁止使用 CSS transition/animation、Math.random、Date、計時器、useFrame。
  • 成本估算 (2 CPU,1080p):空白場景 ≈0.1 秒/影格;2000 個 Canvas 精靈 ≈0.7 秒/影格;全螢幕 filter: blur() ≈2.5 秒/影格。粒子:使用閉合形式 (位置 = f(種子,i,t))、預先模糊的徑向精靈、globalCompositeOperation: "lighter"。
  • 一部 3 分鐘的短片 (5400 影格,1080×1920) 在 2 個 CPU 上約需 1 小時 30 分鐘。儲存 bundle (npx remotion bundle) 並從中渲染。

可重複使用的套件 (不包含在此儲存庫中;作為待建構元件的清單)

anim.ts (依角色分類的 ease、閉合彈簧、keyedState、眨眼、漂移)、Camera2D.tsx (具有視差/伸縮效果的圖層)、Particles.tsx (雨、螢火蟲、灰塵、星星、噪點)、City.tsx (程式化生成霓虹城市 + 反射)、Text.tsx (動態文字、霓虹、逐字字幕、可變標題)、Post.tsx (暗角、閃光、寬銀幕、光線)、character/Mia.tsx (骨架:姿勢 + 表情 + 音素 A–H/X + 眨眼 + 呼吸 + 邊緣光 + 道具)、character/Lucero.tsx、Flat.tsx (具有沸騰效果的鉛筆繪扁平世界)、ChatScreen.tsx、lipsync.ts。工具目錄中的指令碼:voice.py、make_voices.py、asr.py、make_timeline.py、make_audio.py、render_all.sh、assemble.sh、sheet.py。

角色

  • 骨架 = 數值參數 (姿勢、表情、音素) 可依影格混合;表情預設集;使用 keyedState 進行轉換 (預期動作 → 動作 → 穩定)。頭部引導,身體跟隨;每 2–5 秒定時眨眼;永遠不要同時用同一條曲線移動所有部位。
  • 嘴形同步:Rhubarb -r phonetic -f json 於 22 kHz 單聲道 16 位元 WAV 上執行 → 產生 A–H/X 提示 → 在提示之間混合嘴巴參數 (混合 50 毫秒)。輕聲說話時張開強度 ×0.7。
  • 在開始動畫之前,先將角色表 (表情、音素、姿勢) 製作成靜止畫面。

配音 (西班牙語,本地)

  • Kokoro-82M ONNX (kokoro-onnx,語音 ef_dora、em_alex、em_santa,語言 es-419) 和 Piper (piper-tts,es_MX-claude-high、es_AR-daniela-high)。模型在 GitHub Releases 中 (thewh1teagle/kokoro-onnx,k2-fsa/sherpa-onnx)。
  • 兒童:使用 rubberband -p N -F 提高 +4…+6 個半音 (保留共振峰)。低音:−4。「由多種聲音組成的聲音」:疊加 −2 半音 (26%) + 延遲 12 毫秒的 +0.3 半音 (18%) + 大混響。
  • 務必使用 ASR 驗證 (Parakeet-TDT 0.6B v3 透過 sherpa-onnx ≥ 2.0):計算 WER 與文字比對;若 > 5% 則重新生成或改寫句子。在套用效果前驗證 (混響會混淆 ASR 的語言偵測器)。ASR 產生的逐字時間戳記用於字幕。
  • 如果使用者有自己的語音 (例如 ElevenLabs),則替換每句台詞的 WAV 並重新生成提示/時間軸,無需更動場景。

音樂與音效

  • 使用 pretty_midi 按段落作曲 (BPM、和聲進行、GM 樂器) → fluidsynth -ni -g 0.6 -r 48000 -F out.wav MuseScore_General_Full.sf3 in.mid → 使用 pedalboard (高通濾波器、壓縮器、混響) → pyloudnorm。
  • 視覺同步 = 相同的節拍算術 (每拍影格數 = fps·60/bpm,從其索引計算每個節拍)。
  • 音效須有畫面中的原因;將峰值放在圖像之後 1 個影格;輪換音效取樣;對於不存在的音效 (嗡嗡聲、雨聲、鉛筆聲、閃爍聲、重低音) 使用 numpy 合成。
  • 混音:語音 −20 dBFS RMS,音樂在語音下方 −8 dB (ducking 120 毫秒 / 700 毫秒),音效 −4 dB,主控 −15.5 LUFS,峰值 0.6。使用聲譜圖 (ffmpeg showspectrumpic) 檢查是否有任何基底音效 (例如雨聲) 蓋過語音。

指導方針 (來自所閱讀的技能:Remotion、HyperFrames、iart-ai motion/kinetic/webgl、nolanx、anatomy、isometric-ops、taste-skill)

  • 每拍一個動作;到達使用長尾曲線 (bezier(0.16,1,0.3,1)),離開短 40–50%;攝影機使用 inOut;標題在著陸後保持靜止;3–5 種有原因的轉場類型;在最快的影格上剪輯。
  • 視差:背景 0.1–0.3 倍,中景 0.5–0.7 倍,前景 1–1.5 倍並帶模糊。無人機鏡頭 = 具有對數縮放的巢狀平面堆疊 (窗戶 → 立面 → 街區 → 地圖 → 雲層 → 行星)。
  • 等距:單一投影;陰影 15–30% 平塗;頂部更亮。
  • 字體排印:最多 2 個字體家族;標題高度佔畫面 4–9%;字母交錯 20–40 毫秒,單字 40–70 毫秒;使用可變字體調整粗細/寬度。
  • 直式影片:關鍵內容在中央 80% 內;字幕位於下方安全區域上方 (≥ 110 像素);文字 ≥ 44 像素;逐字字幕,以便在沒有聲音時也能理解。

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

相關技能