Communitygithub.com

borjaperfra/launch-video-kit

為使用 Remotion 製作的影片加入旁白、音樂、字幕或攝影機運鏡。當需要透過 TTS 產生旁白、選擇或延長音樂曲目、混合語音與音樂、在介面上加上可讀字幕,或在重建為 HTML 的 UI 上移動虛擬攝影機時,請使用此工具。

launch-video-kit 是什麼?

這個技能提供一個完整的工具組,用來處理 Remotion 影片中非設計層面的所有元素:音訊(旁白與音樂)、字幕以及虛擬攝影機運鏡。它強制要求一個嚴謹的工作流程:先產生旁白(gen-voice.mjs)以取得精確的影格時長,再分析並循環音樂(analyze-music.mjs 與 loop-music.mjs),然後將剪輯對齊音樂小節網格,最後才處理字幕,只為未顯示在螢幕上的對話添加字幕。每個決定都有客觀數據支援,例如使用 FFmpeg 驗證音訊混音峰值是否低於 -1 dB,或自動檢查音樂循環接縫是否在靜音處。此技能支援 macOS 與 Linux 上的 Bash,對 Windows Git Bash 有特定的限制(例如無法使用 glob 模式、缺少 bc)。它記錄了常見的陷阱,例如 Remotion 的 staticFile() 無法處理空格與重音符號,以及 Sequence 元件內 durationInFrames 的語義。它也用於文字轉語音(TTS)的邊界:說明 TTS 無法處理嘆息、笑聲或音效,這些需要另外錄製。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/borjaperfra/launch-video-kit/tree/HEAD/.claude/skills/launch-video-kit

在你喜歡的 AI 中提問

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

說明文件

launch-video-kit 是做什麼的?

六個用來處理影片中非設計部分的元件:音訊、字幕與 攝影機。README 是參考文件(解釋每個決策背後的原因及其支援數據)。 以下為工作順序以及容易忽略的規則。

順序很重要

  1. 先處理語音,再進行剪輯。 gen-voice.mjs 會以影格為單位輸出每句臺詞的實際持續時間。這些數字決定了場景的時長。如果您先剪輯,每個實際的鏡頭都會使您的剪輯失準,必須重做。
  2. 接著處理音樂,根據其能量曲線選擇片段(analyze-music.mjs),必要時加以延長(loop-music.mjs)。
  3. 然後進行剪輯,並對齊分析結果所輸出的小節網格。
  4. 最後才處理字幕,因為此時您才知道哪些句子有螢幕上的標題,哪些沒有。

容易被忽略的規則

  • 每個檔案只包含一句臺詞。 絕不要使用一個長鏡頭。
  • 只為未顯示在螢幕上的文字加上字幕。 如果句子已經出現在標題中,加上字幕會在相同位置重複顯示文字。
  • 字幕的 dur 是閱讀時間,而非語音的持續時間。請手動調整範圍,確保前一個字幕不會壓到後一個,也不會壓到後續的標題。
  • DUCK.base 不超過約 0.85。 素材庫的音軌通常為 0 dB,任何額外的效果都會導致削波。
  • 攝影機:保持靜止,僅短暫移動。 避免持續漂移(會分散注意力)或生硬的剪輯(會造成跳動)。每個場景的起始構圖應與前一個場景的結束構圖相同。
  • 接縫兩側使用相同的介面與元件。 如果某個場景是手動繪製的,它會在細節上產生差異,而這個差異在切換區塊時會突然出現。
  • 對時間進行迭代,而非對內容。 如果對內容陣列進行迴圈,並索引一個較短的時間陣列,只要移除一個節拍就會導致渲染失敗。

用驗證取代猜測

代理人無法觀看或聆聽影片。所有看似主觀的判斷都有對應的數值:

# 分段檢查混音:語音與音樂混合時,應該與僅有語音時測量結果相同
ffmpeg -hide_banner -ss 27 -t 4 -i out.mp4 -af volumedetect -f null /dev/null

# 全域峰值必須低於 -1 dB
ffmpeg -hide_banner -i out.mp4 -af volumedetect -f null /dev/null

# 使用 contact sheet 而非逐格檢查
ffmpeg -v error -i f_%d.png -vf "scale=560:-1,tile=5x4" -frames:v 1 sheet.png

loop-music.mjs 會自動驗證其自身的接縫:如果任何接縫未落在靜音處,它會發出警告,必須選擇另外兩個間隙重新進行。

環境

  • 需要在 PATH 中安裝 ffmpeg 與 ffprobe,並且 Node 版本為 20 或以上。
  • 在 Windows 上的 Git Bash 中:ffmpeg 不支援 glob 模式,且 drawtext 會因缺少 fontconfig 而失敗。請使用編號序列。此外,bc 也不可用。
  • Remotion 的 staticFile() 無法妥善處理空格與重音符號:請將素材重新命名為 ASCII 字元。
  • 在 <Sequence> 內部,useVideoConfig().durationInFrames 回傳的是該序列的持續時間,而非整個影片的持續時間。請勿將其與絕對影格數混淆。

無法做到的事

TTS 只能產生語音,無法產生呼吸聲。嘆息、笑聲與音效必須另外錄製。合成音效(blips)可以用 ffmpeg 產生,README 中有相關範例。

相關技能