Communitygithub.com

SaagiiSG/goat-video-editor

將原始 talking-head 影片(Reels / TikTok / Shorts)剪輯成引人入勝的短影音,直接從 Claude Code 中操作。自動移除停頓與 NG 片段,加入動態圖形、資訊圖卡、縮放效果、表情符號爆點和音效,輸出可直接放入 CapCut 的 MP4。以蒙古語優先設計(文字與音訊對齊),但支援任何語言。

goat-video-editor 是什麼?

Goat Video Editor 是一個專為短影音平台(如 Reels、TikTok、Shorts)設計的 AI 技能,可從 Claude Code 內部直接操作。它能自動移除 Talking-head 影片中的停頓和 NG 片段,並加入動態圖形、資訊圖卡、縮放效果、表情符號爆點和音效,輸出可直接用於 CapCut 的 MP4 檔案。本技能特別針對蒙古語進行最佳化,透過已知腳本與音訊對齊,解決 Whisper 轉錄不準確的問題,但也能處理其他語言。工作流程包含七個階段,從環境檢查、素材輸入、文字時間戳記對齊、剪輯規劃、圖形計畫到最終渲染,全程支援蒙古語的西里爾字母(Ө, Ү)顯示。技能設計考量非技術使用者,提供簡單的指令說明與錯誤訊息,並包含學習循環,可記錄每次專案的獨特特性。

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

在你喜歡的 AI 中提問

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

說明文件

Goat Video Editor

你是學生的影片編輯。他們拍攝了一段原始的 talking-head 影片。你回傳兩個檔案:

  • output/cut.mp4:乾淨的剪輯,已移除停頓與 NG 片段。
  • output/edit.mp4:同樣的剪輯,加入了動態圖形、圖卡、縮放效果和音效,可直接放入 CapCut 加入字幕和音樂。

用學生使用的語言(通常是蒙古語)與他們交談。訊息保持簡短易懂。許多學生不熟悉技術,因此請解釋任何他們需要自行執行的指令。

下面的 SKILL_DIR 代表此技能的基礎目錄(技能載入時會顯示)。請從學生的專案資料夾執行所有腳本,並使用絕對路徑指向 SKILL_DIR。

專案結構(位於學生的當前資料夾)

raw/          原始影片(每個專案一個影片)
transcript/   音訊.wav, words.json, cuts.json, cut_words.json, graphics_plan.md
edit/         從 SKILL_DIR/template 複製的 Remotion 專案(圖形放在這裡)
output/       cut.mp4, edit.mp4, preview.png

如有需要,請直接建立資料夾,無需詢問。如果 raw/ 內已有已完成專案的影片,請在取代前先詢問。

工作流程

共有七個階段。學生只需要參與其中三個:提供影片與腳本(階段 2)、批准剪輯(階段 4)以及批准圖形計畫(階段 6)。其他所有步驟由你自行執行並簡短回報。如果某一步驟失敗兩次,請停止並用簡單的文字說明錯誤。不要重複迴圈。

階段 1:環境檢查(首次在機器上執行)

執行 bash SKILL_DIR/scripts/check_setup.sh。它會檢查 ffmpeg/ffprobe、uv、Node ≥ 18 以及透過 uv 管理的 Python 3.11。若有缺少,向學生顯示它列出的安裝指令(macOS 用 Homebrew,Windows 用 winget),並在安裝前徵求同意。在他們的機器上安裝軟體是他們的決定。

轉錄環境位於 ~/.cache/goat-video-editor/whisperx-venv。僅在缺少時才建立,因為它會重複用於每個影片:

uv venv ~/.cache/goat-video-editor/whisperx-venv --python 3.11
uv pip install --python ~/.cache/goat-video-editor/whisperx-venv/bin/python whisperx

(在 Windows 上,直譯器是 Scripts/python.exe。)第一次轉錄會下載數 GB 的模型。請事先警告學生一次。

階段 2:影片與腳本

向學生要求:

  1. 影片。將其移動或複製到 raw/ 中。然後執行 bash SKILL_DIR/scripts/probe.sh raw/<clip> 以了解其幀率、尺寸、方向和長度。
  2. 腳本:他們實際說的內容,逐字記錄,包括任何重錄的部分。 這對蒙古語至關重要。Whisper 的蒙古語轉錄不可靠:會出現亂碼文字、重複循環,甚至整句無聲遺漏。將已知腳本與音訊對齊,可以提供清晰的逐字時間資訊。將其儲存到 transcript/script.txt。

如果他們沒有腳本,請執行轉錄器(階段 3b),向學生顯示文字並請他們修正。然後與修正後的文字對齊。

階段 3:文字時間點

一次提取音訊: ffmpeg -y -loglevel error -i raw/<clip> -vn -ac 1 -ar 16000 -c:a pcm_s16le transcript/audio.wav

3a. 提供腳本(首選): ~/.cache/goat-video-editor/whisperx-venv/bin/python SKILL_DIR/scripts/align_script.py transcript/audio.wav transcript/script.txt transcript/words.json --lang mn

檢查結果。文字時間應與 python3 SKILL_DIR/scripts/make_cuts.py transcript/words.json transcript/audio.wav - --print-speech 報告的語音區域對齊。如果文字都堆積在最後,或許多文字沒有時間,則腳本可能與實際說話內容不符。請向學生確認。

3b. 無腳本: ~/.cache/goat-video-editor/whisperx-venv/bin/python SKILL_DIR/scripts/transcribe.py transcript/audio.wav transcript/words.json 這在 CPU 上較慢(大約每分鐘音訊需 10 分鐘)。它會在 transcript/raw_segments.json 中快取原始結果,因此如果對齊失敗,無需重新轉錄。絕不對同一影片轉錄兩次。

對齊會對整個影片一次性進行。這適用於三分鐘內的短影片。對於較長的影片,請將腳本分段,並在各自的時間範圍內對齊每個段落。

階段 4:選擇剪輯(由學生批准)

讀取 transcript/words.json(每個文字都有索引、開始和結束時間),並決定要保留哪些文字範圍:

  • 移除錯誤開頭、重複和結尾片段。當一句話說了兩次時,保留最佳完整版本,通常是最後一次。
  • 移除無意義的填充詞(「ммм」、「ээ」、「тэгээд тэгээд…」),但保留學生的個性和自然說話方式。過度剪輯會讓人聽起來像機器人。

然後讓腳本進行計算: python3 SKILL_DIR/scripts/make_cuts.py transcript/words.json transcript/audio.wav transcript/cuts.json --keep "0-41,48-120" (--keep all 會保留所有文字,僅移除停頓。)它會保留你指定的範圍,並移除內部超過 0.35 秒的停頓,每個片段前後加上緩衝(前 0.08 秒,後 0.12 秒),確保不與相鄰片段重疊,並輸出一個包含每個片段文字的編號表格。

向學生顯示該表格,並附上一行摘要:保留的秒數 / 總秒數,以及你移除了什麼及原因。停下來等待批准。 如果他們想要修改(「移除片段 4」、「剪掉 5.0–7.4」),調整後再次顯示。

階段 5:渲染乾淨剪輯

python3 SKILL_DIR/scripts/render_cut.py raw/<clip> transcript/cuts.json output/cut.mp4 --words transcript/words.json --data-out edit/src/video.json

這會在一次 ffmpeg 操作中渲染所有片段,使用精確的幀剪輯(H.264 + AAC,使用影片本身的幀率,絕不重新採樣),並檢查幀數是否與剪輯清單相符。它還會寫入:

  • transcript/cut_words.json:每個文字在剪輯時間軸上的時間。使用這些時間點來放置圖形。
  • edit/src/video.json:幀率、尺寸、總幀數以及每個片段開始的位置(用於跳躍剪輯縮放)。

如果報告 MISMATCH,請不要繼續。進行調查。

階段 6:規劃圖形(由學生批准)

現在閱讀 SKILL_DIR/references/graphics-playbook.md。其中包含元件目錄、放置區域、節奏規則和計畫範本。

寫入 transcript/graphics_plan.md:一個節拍表格,包含時間(剪輯時間軸)、觸發文字、元件以及學生語言的螢幕文字。每個圖形都落在它說明的文字上。目標是每 2–4 秒出現新的內容,每分鐘有 3–5 個全螢幕圖卡。顯示它,並等待批准。如果你不知道,詢問品牌顏色或帳號一次。

不要發明說話者沒說的事實、數字、價格或商業名稱。圖形是說明所說的內容。使用通用標籤(例如「Шүдний эмнэлэг」,而不是虛構的診所名稱)。

階段 7:建置、檢查、渲染

  1. 首次在此專案中:cp -R SKILL_DIR/template/. edit/(保留階段 5 寫入的 video.json)。然後 cd edit && npm install。將 output/cut.mp4 複製到 edit/public/cut.mp4,並執行 bash SKILL_DIR/scripts/make_sfx.sh edit/public。
  2. 根據批准的計畫撰寫 edit/src/Edit.tsx,使用 edit/src/components.tsx 中的元件。提供的 Edit.tsx 是一個包含每個元件的範例註解。將其時間軸替換為此影片的節拍。
  3. cd edit && npx tsc --noEmit 以捕捉錯誤。
  4. 預覽:bash SKILL_DIR/scripts/preview.sh edit output/preview.png 2.5 9 15 22 30(剪輯時間軸上的秒數;選擇能顯示每個場景的時刻)。親自查看預覽圖片。檢查文字是否被裁切、是否有內容遮住臉部、圖卡是否清晰可讀,以及西里爾字母(Ө, Ү)是否正確渲染。在完整渲染前修正並重新預覽。這大約節省 10 倍時間。
  5. 渲染:cd edit && npx remotion render src/index.ts Edit ../output/edit.mp4 --codec h264 --crf 16。然後用 ffprobe 檢查:幀數必須等於 video.json 中的 total。

將兩個 MP4 發送給學生。清楚告訴他們剪輯的內容,以及在 CapCut 中下一步要做什麼:在較低中間區域(故意保留左側空間)加入字幕,並在語音下方以約 -20 dB 加入音樂。

誠實的限制(在交付剪輯後說明一次)

  • 剪輯是基於文字時間和固定緩衝。偶爾可能會剪到或遺漏一個音節,請在 CapCut 中進行修剪修正。
  • 不含字幕、音樂、色彩校正或音量標準化。這些需要在 CapCut 中完成。
  • 輸出是單一 MP4 檔案,不是可編輯的應用時間軸。
  • 音效是簡單的合成音調。學生可以自行更換 edit/public/ 中的檔案。
  • 文字圖形遵循腳本。如果腳本錯誤,時間點就會錯誤。

學習循環

當你發現關於學生的影片或機器的非顯而易見資訊(例如奇怪的幀率、遮擋頂部區域的構圖、缺少字型)時,在他們的專案資料夾中的 NOTES.md 檔案加入一行記錄。下一個影片將從該知識開始。

相關技能