Claude AutoCut
由詞彙級逐字稿驅動的本地影片剪輯工具。一切都在使用者的機器上執行:語音辨識使用 Whisper (faster-whisper),媒體處理使用 FFmpeg,字幕使用 Pillow,而卡通模式則使用 HyperFrames (Node.js) 來渲染動畫。無需 API 金鑰、無需付費服務、不上傳任何資料。
命令列工具為此技能資料夾內的 scripts/autocut.py。請使用已安裝所需套件(參閱「設定」)的 Python 執行:
python "<技能資料夾>/scripts/autocut.py" <命令> ...
<技能資料夾> 是此技能的基礎目錄(技能載入時會顯示)。
選擇模式
| 使用者需求 | 模式 | 指令 |
|---|---|---|
| 「剪輯這部影片」、「剪掉停頓」、「移除嗯嗯啊啊」、「清理重錄片段」 | 自動編輯 | edit 影片 -o 專案 |
| 為影片加上字幕,但不剪輯 | 字幕 | captions 影片 -o 資料夾 |
| 在說話者上方加入動畫場景,保留完整錄影 | 完整動畫 | cartoon init 影片 -o 專案,撰寫分鏡,cartoon render |
| 先剪輯,再為剪輯後的影片加入動畫 | 完整流程 | complete 影片 -o 資料夾,撰寫分鏡,cartoon render |
| 「卡通」、「動畫播客」,但未說明是否要剪輯 | 用一個問題詢問:保留全部(完整動畫)或先剪輯(完整流程)? |
如果需求不明確,請用一個簡短問題詢問要使用哪種模式,並推薦一個。在任何操作之前,請先在該工作階段執行一次 doctor:它會顯示目前機器支援哪些模式。
設定(每台機器一次)
python -m venv .venv並啟動虛擬環境,然後執行pip install -r "<技能資料夾>/requirements.txt"。- 將 FFmpeg(
ffmpeg和ffprobe)加入 PATH。 - 僅限卡通模式:Node.js 18+(npx 和 npm)。HyperFrames 0.8.79 會在首次使用時由 npx 下載,且不會自動更新;每個卡通專案都需使用 npm 安裝 GSAP。
- 執行
python "<技能資料夾>/scripts/autocut.py" doctor
首次轉錄會下載 Whisper 模型(--model tiny 約 75 MB,small 約 480 MB,為預設值)。當語言已知時請使用 --language;對於難以辨識的音訊,請使用 --model medium 或 large-v3。
自動編輯
python "<技能資料夾>/scripts/autocut.py" edit input.mp4 -o edits/my-video [--language en] [--model small]
步驟:轉錄 → 分析 → 規劃 → 渲染 → 驗證(編輯後的影片會再次轉錄並比對)→ 字幕 → REPORT.md。輸出於專案資料夾中:renders/cut_vN.mp4(乾淨剪輯)、renders/final_vN.mp4(含嵌入字幕)、captions_vN.srt、decisions.md(每個被移除的片段及其類型和原因)、analysis.md、verify_vN.json。任何檔案都不會被覆寫:每次渲染都是一個新版本。來源影片僅供讀取。
自動規劃執行的動作(刻意保守):
- 修剪第一個詞之前與最後一個詞之後的靜音;
- 縮短超過 0.7 秒的停頓,但絕不全部移除;句子結尾後的停頓會保留較長(可能是為了強調的停頓);
- 移除填充音和緊接著重錄的不完整片段;
- 對於同一句的兩個完整版本,依據證據保留較清晰的一個,絕不保留「最後一個」或「最短的」;如果證據相當,則兩者皆保留,並在「待審查」下列出;
- 保留轉錄遺漏的可聽聲音,並移除 Whisper 在靜音中創造的文字。
高影響力剪輯
若剪輯移除的詞彙未在任何其他地方出現(包括否定詞),則屬於高影響力剪輯。自動規劃絕不會執行此類剪輯;它們只來自 overrides.json(根據使用者要求加入的剪輯)。渲染會暫停,直到每個高影響力剪輯獲得批准。若要批准,請向使用者顯示 decisions.md 中的確切片段和詞彙,獲得明確同意後,執行:
python "<技能資料夾>/scripts/autocut.py" approve 專案 --start 12.0 --end 18.5 --by "user" --reason "要求移除離題內容"
python "<技能資料夾>/scripts/autocut.py" edit input.mp4 -o 專案 # 轉錄結果會重複使用,渲染新版本
切勿記錄使用者未給予的批准。plan 專案 會重新執行分析和規劃,但不進行渲染。
overrides.json(位於專案資料夾)
{"cuts": [{"start": 12.0, "end": 18.5, "reason": "離題內容"}],
"keep": [{"start": 3.0, "end": 4.2, "reason": "這個填充詞是笑點的一部分"}],
"pauses": {"p04": {"action": "keep"}, "p07": {"keep_s": 0.8}}}
停頓 ID(p04)來自 analysis.md。如需了解決策如何分類,請參閱 references/editing.md。
向使用者回報
閱讀 REPORT.md 和 decisions.md,並簡短告知使用者:剪輯前後的時長、移除了什麼及其原因、「待審查」的項目、驗證是否通過(遺漏的詞彙、保留的否定詞)。請說明您無法聽或看影片:節奏和品味需要使用者透過聲音自行判斷。
純字幕
python "<技能資料夾>/scripts/autocut.py" captions input.mp4 -o captions/my-video [--no-burn] [--caption-y 0.75]
產生 captions.srt、captions.json 和 captioned.mp4。垂直影片會在畫面高度的 70% 處顯示大寫字幕;橫向影片則靠近底部。每個口說詞彙都會按順序出現一次。
卡通(完整動畫與完整流程)
- 執行
cartoon init 影片 -o 專案(完整流程會先執行edit,然後在剪輯結果上建立卡通專案)。 - 閱讀
專案/speech.md(附時間的語音區塊),並撰寫專案/storyboard.json:場景需涵蓋整部影片而無間隙,每個場景包含情境、主持人姿勢與表情、物件以及螢幕文字。結構、目錄(情境、姿勢、表情、物件、轉場)與版面規則請參閱references/cartoon.md。請在撰寫第一個分鏡腳本前先閱讀它。 - 執行
cartoon check 專案,直到回報無錯誤。螢幕文字只能使用已口說的詞彙。 - 執行
cartoon snapshot 專案 --at 1.5,8,20,並檢視reviews/中的畫面。 - 執行
cartoon render 專案(或使用--range 0-6進行快速測試)。輸出:renders/cartoon_vN.mp4,來源音訊原樣複製;renders/cartoon_vN.qc.json用於檢查時長與音訊。
動畫僅透過您撰寫的分鏡腳本理解語音的意義:程式碼本身無法自行理解語音。
規則
- 切勿修改或刪除來源影片或較早的渲染結果。
- 切勿加入會改變語音意義的剪輯;切勿代使用者批准高影響力剪輯。
- 螢幕文字和字幕只能使用已口說的詞彙。
- 一次只執行一個渲染;卡通渲染負載較重(請參閱
references/troubleshooting.md)。 - 切勿聲稱結果「聽起來不錯」:您無法聽到。請回報測量到的結果。
發生錯誤時
請參閱 references/troubleshooting.md(找不到 FFmpeg、模型下載失敗、Node/npx 問題、HyperFrames 問題、記憶體不足、語言錯誤、轉錄品質不佳)。