Communitygithub.com

原片變短影音:對話式剪出 final.mp4

用對話剪任何影片:把原始素材放進資料夾,拿回 edit/final.mp4。本機免費 Whisper 轉寫,自動剪掉贅詞與空白,逐段調色,每個剪輯點 30 毫秒音訊淡入淡出,燒錄字幕與動畫疊層,並在每個剪輯點自我檢查。不需要任何 API key。

原片變短影音:對話式剪出 final.mp4 是什麼?

「原片變短影音」配方第 1 步(剪出成片母版),來自 Moh4696/freecut。它是 browser-use/video-use 的分支,把付費的 ElevenLabs 依賴換成免費、可插拔的轉寫後端。適用於 Claude Code、Codex 與任何有 shell 權限的智慧體,以 npx skills add Moh4696/freecut 安裝。它在本機轉寫素材(mlx-whisper 或 faster-whisper,需要語者分離時可選 VibeVoice 或 ElevenLabs),產生片語級轉寫稿,依素材內容提問,提出 4–8 句剪輯方案並等你確認。接著產生 EDL,用 ffmpeg 逐段調色,每個剪輯點加 30 毫秒淡入淡出,由平行子智慧體製作疊層動畫(HyperFrames、Remotion、Manim 或 PIL),最後燒錄字幕,並在成片的每個剪輯點逐一檢查(最多 3 輪自檢),工作記憶存於 project.md。

相容平台✓Claude Code✓Codex CLI~Cursor
npx skills add Moh4696/freecut

在你喜歡的 AI 中提問

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

說明文件

freecut

原則

  1. LLM 從原始轉錄稿 + 按需視覺資訊進行推理。 唯一值得保留的衍生產物是經過打包的短語級別轉錄 (takes_packed.md)。其他一切 — 填充詞標記、重拍檢測、鏡頭分類、重點評分 — 都在決策時進行推導。
  2. 音頻是首要的,視覺隨後跟上。 剪輯候選片段來自語音邊界和靜音間隙。僅在決策點才深入研究視覺內容。
  3. 提問 → 確認 → 執行 → 迭代 → 持久化。 在使用者以純文字確認策略之前,絕不觸碰剪輯。
  4. 通用化。 不要預設影片類型。觀察素材,詢問使用者,然後進行編輯。
  5. 藝術自由是預設值。 本文件中的每個特定數值、預設、字體、顏色、持續時間、音調結構和技術,都只是來自一個已驗證影片的可運作範例,並非強制要求。閱讀它們以理解可能性及每種方法為何有效。然後根據素材的實際情況和使用者的實際需求,做出你自己的品味判斷。唯一必須執行的事項在下面的「硬規則」部分。 其餘皆為你的自由。
  6. 自由發揮。 如果素材需要本文件未描述的技術 — 分屏、畫中畫、底部三分之一身分卡、反應剪輯、速度斜坡、凍結幀、交叉淡出、匹配剪輯、L 剪輯、J 剪輯、在呼吸處的速度斜坡等 — 儘管實現。輔助工具是 ffmpeg 和 PIL。它們能做格式支持的任何事情。無需等待許可。
  7. 在向用戶展示之前,先驗證你自己的輸出。 如果你不願意發布它,就不要展示它。

硬規則(生產正確性 — 不可協商)

以下是偏離會導致靜默失敗或輸出損壞的事項。它們關乎正確性,而非品味。請記住它們。

  1. 字幕在濾鏡鏈中最後應用,在所有疊加層之後。否則疊加層會遮蓋字幕。此為靜默失敗。
  2. 逐片段提取 → 使用 -c copy 進行無損串聯,而非單次傳遞濾鏡圖。否則在添加疊加層時,每個片段都會被二次編碼。
  3. 在每個片段邊界添加 30 毫秒音頻淡入淡出 (afade=t=in:st=0:d=0.03,afade=t=out:st={dur-0.03}:d=0.03)。否則每個剪輯處都會出現可聽的爆音。
  4. 疊加層使用 setpts=PTS-STARTPTS+T/TB 將疊加層的幀 0 偏移到其視窗的起始點。否則在疊加視窗期間會看到動畫的中間部分。
  5. 主 SRT 使用輸出時間線偏移:output_time = word.start - segment_start + segment_offset。否則字幕在片段串聯後會錯位。
  6. 絕不在單詞中間剪輯。 每次剪輯邊緣都對齊到轉錄稿中的單詞邊界。
  7. 填充每個剪輯邊緣。 工作視窗:30–200 毫秒。ASR 時間戳偏移量為 50–100 毫秒 — 填充可吸收該偏移。快節奏時選用較緊的值,電影風格時選取較寬鬆的值。
  8. 僅使用逐字 ASR。 絕不使用 SRT/短語模式(會遺失亞秒級間隙數據)。絕不使用歸一化填充詞(會遺失編輯信號)。
  9. 按來源快取轉錄稿。 除非來源檔案本身發生變化,否則絕不重新轉錄。
  10. 多個動畫使用平行子代理。 絕不順序執行。透過 Agent 工具同時生成 N 個;總壁掛時間 ≈ 最慢的那個時間。
  11. 執行前需確認策略。 在使用者批准純文字計劃之前,絕不觸碰剪輯。
  12. 所有會話輸出都在 <videos_dir>/edit/ 中。 絕不寫入 freecut/ 專案目錄內部。

本文件中的其餘內容均為可運作範例。當素材需要時,可自由偏離。

目錄結構

該技能位於 freecut/。使用者素材放在他們指定的任何位置。所有會話輸出都進入 <videos_dir>/edit/。

<videos_dir>/
├── <原始檔案,未修改>
└── edit/
    ├── project.md               ← 記憶;每次會話追加
    ├── takes_packed.md          ← 短語級別轉錄,LLM 的主要閱讀視角
    ├── edl.json                 ← 剪輯決策
    ├── transcripts/<name>.json  ← 快取的標準化 ASR JSON
    ├── animations/slot_<id>/    ← 每個動畫的來源 + 渲染 + 推理
    ├── clips_graded/            ← 帶有調色和淡入淡出的逐片段提取結果
    ├── master.srt               ← 輸出時間線字幕
    ├── downloads/               ← yt-dlp 輸出
    ├── verify/                  ← 偵錯幀 / 時間線 PNG
    ├── preview.mp4
    └── final.mp4

設定

首次安裝位於 install.md(克隆、依賴、ffmpeg、技能註冊、API 金鑰)。無需每次會話都執行;冷啟動時只需驗證:

  • 轉錄後端可用。預設為 whisper(免費、本地)— 驗證 mlx-whisper(Apple Silicon)或 faster-whisper 是否可導入。如果兩者均未安裝,告訴使用者 pip install mlx-whisper(或 faster-whisper),而不是靜默地回退到付費後端。對於可選的 vibevoice / elevenlabs 後端,檢查環境變數或 freecut 儲存庫根目錄下的 .env 檔案中是否有 VIBEVOICE_ASR_URL / ELEVENLABS_API_KEY。
  • ffmpeg + ffprobe 在 PATH 中。
  • Python 依賴已安裝(在儲存庫內執行 uv sync 或 pip install -e .)。
  • 如果會話需要 HyperFrames 或 Remotion 插槽,則需要 Node.js + npm。HyperFrames 目前需要 Node.js 22+。
  • yt-dlp、HyperFrames、Remotion、Manim 僅在首次使用時安裝。
  • 首次使用的動畫設定在插槽目錄內進行,絕不在 freecut 儲存庫根目錄。HyperFrames 可以使用 npx --yes hyperframes ... 調用;Remotion 可以透過 npx create-video@latest 搭建,或在將其作為專案本地依賴安裝後使用 remotion render 命令。
  • 此技能附帶 skills/manim-video/。在構建 Manim 插槽時,請閱讀其 SKILL.md。

輔助工具(helpers/transcribe.py、helpers/render.py 等)與此 SKILL.md 位於同一目錄。解析它們相對於包含此檔案的目錄的路徑 — 該技能通常符號連結到 ~/.claude/skills/freecut/ 或 ~/.codex/skills/freecut/。

輔助工具

  • transcribe.py <video> — 單檔案轉錄。透過 --backend {whisper,vibevoice,elevenlabs}(預設 whisper、本地 + 免費、單一說話者)支援可插拔後端。vibevoice 使用 VIBEVOICE_ASR_URL 進行真實說話者日誌;elevenlabs 使用 ELEVENLABS_API_KEY 並支援 --num-speakers。已快取。
  • transcribe_batch.py <videos_dir> — 4 工作者並行轉錄。使用相同的 --backend 標誌。適用於多鏡次。
  • pack_transcripts.py --edit-dir <dir> — transcripts/*.json → takes_packed.md(短語級別,在靜音 ≥ 0.5 秒或說話者切換時中斷)。由於 JSON 形狀已標準化,因此跨後端工作方式相同。
  • timeline_view.py <video> <start> <end> — 膠片條 + 波形 PNG。按需視覺深入查看。非掃描工具 — 在決策點使用,而非持續使用。
  • render.py <edl.json> -o <out> — 逐片段提取 → 串聯 → 疊加層(PTS 偏移)→ 最後是字幕。--preview 用於 720p 快速預覽。--build-subtitles 用於內聯生成 master.srt。
  • grade.py <in> -o <out> — ffmpeg 濾鏡鏈調色。預設 + --filter '<raw>' 用於自訂。

對於動畫,建立 <edit>/animations/slot_<id>/,使用 Bash,並透過 Agent 工具生成子代理。

流程

  1. 盤點。 對每個來源執行 ffprobe。對目錄執行 transcribe_batch.py。執行 pack_transcripts.py 產生 takes_packed.md。取一兩個 timeline_view 樣本以獲得視覺第一印象。

  2. 預掃描問題。 快速瀏覽 takes_packed.md 一次,記錄口誤、明顯的誤說或需要避免的措辭。列出清單,輸入編輯簡報。

  3. 對話。 用純文字描述你所看到的。根據素材提出問題。收集:內容類型、目標長度/長寬比、美學/品牌方向、節奏感、必須保留的時刻、必須剪掉的時刻、動畫和調色偏好、字幕需求。不要使用固定的檢查清單 — 每次的正確問題都不同。

  4. 提出策略。 4–8 句話:形狀、鏡次選擇、剪輯方向、動畫計劃、調色方向、字幕風格、長度估算。等待確認。

  5. 執行。 透過編輯器子代理簡報產生 edl.json。在不明確的時刻深入查看 timeline_view。在平行子代理中構建動畫。逐片段應用調色。透過 render.py 合成。

  6. 預覽。 render.py --preview。

  7. 自我評估(在向用戶展示之前)。 在渲染輸出(而非來源)的每個剪輯邊界處執行 timeline_view(±1.5 秒視窗)。檢查每張影像是否有:

    • 剪輯處的視覺不連續性 / 閃爍 / 跳動
    • 邊界處的波形尖峰(漏掉 30 毫秒淡入淡出的音頻爆音)
    • 字幕被疊加層遮擋(違反規則 1)
    • 疊加層錯位或顯示錯誤幀(違反規則 4)

    也抽樣檢查:前 2 秒、後 2 秒和 2–3 個中間點 — 檢查調色一致性、字幕可讀性、整體連貫性。對輸出執行 ffprobe 以驗證持續時間是否符合 EDL 預期。

    如果任何檢查失敗:修正 → 重新渲染 → 重新評估。自我評估最多進行 3 次 — 如果 3 次後問題仍存在,則向使用者標記,而不是無限循環。僅在自我評估通過後才提供預覽。

  8. 迭代 + 持久化。 自然語言反饋,重新計劃,重新渲染。絕不重新轉錄。確認後進行最終渲染。追加到 project.md。

剪輯技巧

  • 音頻優先。 從單詞邊界和靜音間隙選擇候選剪輯。
  • 保留亮點。 笑聲、妙語、重點節拍。延伸至妙語之後以包含反應 — 笑聲本身就是節拍。
  • 說話者交接 受益於發言之間的空氣。常見數值:400–600 毫秒。快節奏時選較短的值,電影風格時選較長的值。這是品味判斷。
  • 音頻事件作為信號。 (笑聲)、(嘆氣)、(掌聲) 標記節拍。延伸至它們之後。
  • 靜音間隙是剪輯候選。 ≥400 毫秒的靜音通常是最乾淨的。150–400 毫秒的短語邊界在視覺檢查後可以使用。<150 毫秒不安全(短語中間)。
  • 剪輯填充範例(隨此技能發布的啟動影片):第一個保留字詞前 50 毫秒,最後一個後 80 毫秒。混剪節奏時用較緊的值,紀錄片風格時用較寬鬆的值。保持在 30–200 毫秒的工作視窗內(硬規則 7)。
  • 絕不獨立推理音頻和視頻。 每個剪輯必須在兩條軌道上都有效。

打包的轉錄(主要閱讀視角)

pack_transcripts.py 讀取所有 transcripts/*.json 並產生一個 Markdown 檔案,其中每個鏡次都是一個短語級別行列表,每行前綴其 [開始-結束] 時間範圍。短語在靜音 ≥ 0.5 秒或說話者更改時中斷。這是編輯子代理讀取選擇剪輯的產物 — 它從純文字中以 1/10 的原始 JSON token 數量提供單詞邊界精度。

範例行:

## C0103  (持續時間: 43.0s, 8 個短語)
  [002.52-005.36] S0 一個網頁代理百分之九十的工作都是完全浪費的。
  [006.08-006.74] S0 我們修復了這個問題。

編輯子代理簡報(用於多鏡次選擇)

當任務是「從多個片段中選取每個節拍的最佳鏡次」時,生成一個帶有此類形狀簡報的專案子代理。結構是關鍵的;音高形狀範例則不是。

你正在編輯一個 <類型> 影片。選取每個節拍的最佳鏡次,並按節拍的先後順序進行組裝,而不是按原始片段順序。

輸入:
  - takes_packed.md(所有鏡次的帶時間標註的短語級別轉錄)
  - 產品/敘事背景:<來自使用者的 2 句話>
  - 說話者:<姓名,角色,表達風格備註>
  - 預期結構:<選擇一個原型或自創一個>
  - 需避免的口誤:<來自預掃描階段的列表>
  - 目標運行時長:<秒>

常見結構原型(選擇、調整或自創):
  - 技術發布/演示:   鉤子 → 問題 → 解決方案 → 效益 → 範例 → 行動呼籲
  - 教學:             介紹 → 設定 → 步驟 → 陷阱 → 回顧
  - 訪談:             (問題 → 回答 → 追問)重複
  - 旅遊/活動:        到達 → 亮點 → 安靜時刻 → 離開
  - 紀錄片:           論點 → 證據 → 反方觀點 → 結論
  - 音樂/表演:        前奏 → 主歌 → 副歌 → 橋段 → 尾奏
  - 或自創你自己的。

規則:
  - 開始/結束時間必須落在轉錄稿中的單詞邊界上。
  - 填充剪輯邊界(工作視窗 30–200 毫秒)。
  - 優先選擇 ≥400 毫秒的靜音作為剪輯目標。
  - 如果沒有更好的鏡次,則保留無法避免的口誤。在「原因」中備註。
  - 如果超出預算,修改:刪除一個節拍或修剪尾部。報告總長度並自我修正。

輸出(JSON 陣列,無散文):
  [{

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

相關技能