/auto-video-edit:從原始素材到完成影片
一次性執行整個流程,無需中斷詢問。修復錯誤並重新執行,直到產出好的 final-video.mp4。
SKILL_DIR 指的是此檔案所在資料夾(通常是 ~/.claude/skills/auto-video-edit)。
1. 檢查設定(只需一次)
ls SKILL_DIR/.venv/bin/python SKILL_DIR/remotion/node_modules/.bin/remotion
如果缺少任一項,請執行專案的 install.sh,或手動安裝:
python3 -m venv SKILL_DIR/.venv && SKILL_DIR/.venv/bin/pip install -r SKILL_DIR/requirements.txt
cd SKILL_DIR/remotion && npm install && npx remotion browser ensure
此外需要在 PATH 中包含 ffmpeg、ffprobe 與 node(macOS 可使用 brew install ffmpeg node 安裝)。
2. 執行管線
在存放素材的資料夾中(預設會選取最大的影片檔,除非您指定檔名):
bash SKILL_DIR/scripts/run_all.sh # 或:run_all.sh my-take.mov
管線包含三個步驟,每個步驟也可獨立執行:SKILL_DIR/.venv/bin/python SKILL_DIR/scripts/<步驟>.py
| 步驟 | 功能 | 輸出檔案 |
|---|---|---|
edit.py | 辨識語音、剪除大於 0.5 秒的靜音(保留 0.15 秒氣口)、將影片分割成約 4.5 秒的鏡頭、根據語音內容選擇正常/拉近(1.3 倍)/特寫(1.5 倍)鏡頭、將拉近中心對準偵測到的臉部、進行調色、將語音音量標準化至 -14 LUFS、在每個剪輯點加上 10 毫秒淡入淡出 | edited-video.mp4、work/transcript.json、work/edit_report.json |
animate.py | 尋找需要視覺輔助的時機:帶單位的數字 → 計數器、「A vs B」/「instead of」/ 前後對比 → 比較卡、3 個以上的「首先 / 接著 / 最後」句子 → 流程圖、強烈主張(「真相是」、「大部分的人」……) → 文字卡片;平均每 15 秒一張卡片,從不在前 2.5 秒插入;每個卡片以影片的解析度與幀率渲染 | work/animation_plan.json、animations/*.mp4、work/animation_manifest.json |
finalize.py | 在每個卡片的時間點以柔和淡入淡出插入;若存在 broll/ 資料夾,則將檔名與語音單詞相符的素材片段(如 broll/coffee.mp4 → 語音中的「coffee」)插入 3 秒 | final-video.mp4、work/finalize_report.json |
實用參數:
edit.py --no-zoom、--whisper small(更準確的逐字稿,但較慢)、--silence-db -35(安靜環境)/-25(吵雜環境)、--min-silence 0.35(更緊湊的剪輯)animate.py --max 3、--min-gap 8
3. 讓卡片更智慧(每次都要做)
自動產生的計畫是基於規則。在最終渲染前,利用逐字稿來改善它:
- 執行
SKILL_DIR/.venv/bin/python SKILL_DIR/scripts/animate.py --plan-only - 讀取
work/transcript.json與work/animation_plan.json。編輯計畫:- 將每個
headline/label/steps/value改寫成 2-6 個精簡詞彙,表達講者的意思(不要只是句子的片段)。修正逐字稿誤認的數字。 - 刪除對理解沒有幫助的卡片;在關鍵數字、列表或對比尚未有卡片的時機新增卡片。卡片類型與屬性:
Counter:{"to": 75, "decimals": 0, "prefix": "$", "suffix": "%", "label": "..."}Comparison:{"left": {"label": "Before", "value": "4 hours"}, "right": {"label": "After", "value": "10 min"}}Flowchart:{"steps": ["Record", "Upload", "Post"]}(2-5 個步驟)TextCard:{"headline": "Nobody talks about this", "body": ""}
- 每個卡片需要
"start"(在edited-video.mp4中的秒數)與"seconds"(3-5 秒)。
- 將每個
- 執行
SKILL_DIR/.venv/bin/python SKILL_DIR/scripts/animate.py --from-plan - 執行
SKILL_DIR/.venv/bin/python SKILL_DIR/scripts/finalize.py
4. 檢查結果
- 讀取
work/edit_report.json與work/finalize_report.json:確認時長合理縮短,且無警告。 - 擷取畫面來檢查:
ffmpeg -ss 5 -i final-video.mp4 -frames:v 1 -y work/check.jpg(以及每個卡片的開始時間 + 1 秒處)。檢查畫面:拉近鏡頭中臉部是否在畫面內、卡片是否可讀、無被裁切。 - 如果拉近導致臉部嚴重裁切,請重新執行
edit.py --no-zoom。如果感覺剪輯不流暢,請使用--min-silence 0.8。
如果某步驟失敗
每個步驟會將完整的 ffmpeg / Remotion 輸出寫入 work/*.log。讀取最後幾行,修正原因,然後只重新執行該步驟。常見問題:
whisper unavailable→ 缺少虛擬環境;請安裝它(步驟 1)。編輯步驟仍會執行,但不會有拉近選擇。- Remotion
Could not find a browser→cd SKILL_DIR/remotion && npx remotion browser ensure。 - 卡片渲染失敗 → 會以純文字卡片重試,然後跳過;影片仍會完成。
報告
--- 影片編輯完成 ---
輸入 / 輸出 / 時長 前→後 / 剪輯次數 / 拉近混合 / 卡片數 / B-roll / 檔案大小
然後列出任何無法修正的問題。