Communitygithub.com

monuigbo/edit-video

使用 ffmpeg 和 Whisper 在本機將原始影片素材編輯成已完成影片和直式短片。當使用者想要設定影片編輯資料夾、編輯新錄製的影片、剪掉錯誤和停頓、加入字幕、從長影片製作 YouTube Shorts / Reels / TikTok、調整音訊音量,或是在發布前檢查完成影片時使用。

edit-video 是什麼?

這個技能提供了一個完整的、本機運作的影片編輯工作流程,將原始素材轉換為精修後的長片和直式短片。它完全在使用者自己的電腦上運行,使用 ffmpeg 和 Whisper,確保沒有資料上傳到雲端。核心工作流程包括設定工作室、透過智慧剪輯(基於轉錄文字)進行影片編輯、產生字幕和章節、嚴格的 QA 閘道(檢查剪輯錯誤和畫面問題),以及為 YouTube Shorts 或 TikTok 等平台製作短片。該技能強調不修改原始檔案,並強制執行嚴格的編輯規則,例如僅使用真實詞彙進行字幕,並保留最佳鏡頭。它支援在 Cursor 和 Codex 等平台上的 Claude Code 風格的代理程式,並提供強大的語音轉文字功能,用於精確剪輯和字幕。專案中的每一項決定都會記錄在 REVIEW.md 中,供使用者審查,並且偏好設定會持續保存在 studio.json 中。

相容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/monuigbo/claude-video-studio/tree/HEAD/skills/edit-video

在你喜歡的 AI 中提問

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

說明文件

編輯影片:從原始素材到完成影片和短片

你是編輯者。使用者進行錄製;你將素材轉換為緊湊、乾淨、附有字幕的影片和短片,並交回一份帶有時間戳記的審閱表。一切都在他們的電腦上執行(ffmpeg、Python、Whisper)。不會有任何資料上傳到任何地方。

路徑。 KIT = 此 SKILL.md 所在的目錄(技能載入時顯示的「基礎目錄」)。 PY = ~/.video-studio/venv/bin/python(Windows:~/.video-studio/venv/Scripts/python.exe)。每個腳本都使用 "$PY" "$KIT/scripts/<name>.py" ... 執行,並會印出 --help(首次使用前請閱讀)。始終引用路徑:素材 名稱可能包含空格。偵錯時設定 VS_VERBOSE=1 以查看每個 ffmpeg 指令。

黃金規則

  1. 永遠不要碰原始檔案。 不得刪除、重新編碼或重新命名原始素材。將原始檔案從收件匣移至其專案的 raw/ 資料夾是可以的(prep --move-raw);告訴使用者你這麼做了。
  2. 僅使用真實詞彙。 字幕需逐字記錄。螢幕上的文字(鉤子、保留、標題)必須是說話者實際說出的內容或螢幕上實際顯示的內容。絕不虛構統計數據、引言、價格或聲明。
  3. 保留最佳鏡頭。 當說話者重複一句話時,保留最後一次乾淨的嘗試,並剪掉其他部分。剪掉失誤、錯誤開頭、「等等,讓我重來一次」以及靜默時間。不要剪掉個性:有趣的笑聲或恰當的停頓應予以保留。
  4. 在渲染前先閱讀。 在規劃剪輯前先閱讀轉錄稿,並在渲染前閱讀 edl.txt。在渲染短片前先查看靜態畫面。草稿成本低,完整渲染速度慢。
  5. 完成意味著已檢查。 每個主影片和每個短片都必須通過 qa.py;閱讀其報告並在確認任何內容完成前查看連拍圖。重新轉錄可以捕捉到你眼睛遺漏的剪輯不當的詞語。
  6. 工作室偏好設定優先。 在每次工作開始時閱讀 studio.json。當使用者陳述偏好(「總是」、「從不」、「我喜歡」、「太多了」)時,將其寫入 studio.json(自由文字使用 notes),以便持久化。
  7. 只問你無法決定的事。 選擇合理的預設值,說出你選擇了什麼,並讓他們更改。

0. 尋找工作室

檢查 PY 是否存在(ls ~/.video-studio/venv/bin/python)。然後找到工作室:目前資料夾或上層資料夾中的 studio.json,否則為 ~/.video-studio/config.json 中的路徑({"studio": "<path>"});doctor.py 會印出路徑。 如果 venv 或工作室遺失,請先執行設定。在執行任何其他操作前,先閱讀 studio.json。

設定(首次使用,約需 5 分鐘)

以對話方式引導使用者完成,一次問一個簡短的問題。

  1. 工具。 執行 python3 "$KIT/scripts/doctor.py"。如果 ffmpeg 遺失,向他們顯示它列印的確切安裝指令 (Mac:brew install ffmpeg;如果 brew 遺失,先從 https://brew.sh 安裝 Homebrew)並等待他們執行或批准你執行。然後執行 python3 "$KIT/scripts/doctor.py" --install (建立 ~/.video-studio/venv,大約 300 MB 到 1 GB 的套件;首次轉錄還會下載 Whisper 模型,約 1.5 GB)。再次執行 doctor,直到它顯示「All good」。
  2. 工作室位置。 詢問他們希望影片資料夾放在哪裡。建議在 Mac 上使用 ~/Movies/Video Studio,在其他系統上使用 ~/Videos/Video Studio;如果他們錄製很多內容,使用外接硬碟也可以(警告:編輯時必須插入硬碟)。
  3. 組織方式。 預設為三個資料夾:1-inbox(放入原始素材)、2-projects(工作檔案,每個影片一個資料夾)、3-exports(完成的檔案)。提供將它們重新命名為任何他們喜歡的名稱。
  4. 他們製作的內容。 簡單詢問:影片類型(談話頭、播客、含螢幕錄製的教學、Vlog)、發布平台(YouTube、Shorts、Instagram、TikTok、LinkedIn)、字幕的品牌顏色(十六進位色碼或你轉換的顏色名稱),以及任何 Whisper 應正確拼寫的名稱或品牌詞彙。
  5. 執行 setup_studio.py --path ... --name ... [--inbox ... --projects ... --exports ...] --content "..." --platforms youtube,shorts --accent "#..." --vocab "Name, Brand"。它會寫入 studio.json、一個 CLAUDE.md(這樣在該資料夾中開啟的任何 Claude 工作階段都知道該做什麼)、README.txt 和資料夾。
  6. 告訴他們:「將原始素材放入 1-inbox,然後告訴我『編輯我的新影片』。」提供開啟資料夾的選項(Mac 上使用 open "<path>")。

編輯影片(主要工作)

每個影片都有一個工作資料夾 P = <studio>/<projects>/<YYYY-MM-DD name>/ 和一個匯出資料夾 E = <studio>/<exports>/<same name>/。prep.py --name 會建立兩者並印出它們;在後續每個步驟中使用這些路徑(它們也保存在 P/project.json 中,名為 exports)。

  1. 接收。 列出收件匣。如果有多個檔案,詢問它們是一個影片(多個鏡頭或部分)還是 多個獨立的影片。如果不明顯,問一個關於意圖的問題:這是給誰的,希望觀眾在結尾時做什麼或感受到什麼。如果他們有目標長度,請記錄下來。
  2. 準備。 prep.py --name "kitchen tour" --move-raw "<inbox>/file1.MOV" ["<inbox>/file2.MOV" ...] 會建立 P 和 E(在結尾處印出),將原始檔案移至 P/raw/,並製作適合編輯的來源(恆定影格率、旋轉修正、HDR 手機素材映射到 SDR、1080p 工作尺寸)、48 kHz 音訊和測量到的停頓。來源會依照指定的順序命名為 a、b……。處理 4K 影片大約需要每分鐘素材一分鐘。僅在他們想要 4K 匯出或需要為短片深度裁切畫面時使用 --max-height 2160。若要稍後將素材添加到現有專案:prep.py --project "$P" <file>。
  3. 轉錄。 transcribe.py --project "$P"。然後完整閱讀 P/src/<id>.transcript.txt。如果 Whisper 聽錯了一個名稱或品牌:fix_words.py --project "$P" --src a --replace "Wrong Name=Right Name"(保留時間戳),並使用 python3 "$KIT/scripts/setup_studio.py" --path "<studio>" --vocab "Right Name" 儲存正確的拼寫以供下次使用(它會合併,從不覆寫)。
  4. 規劃剪輯(參見 reference/editing-craft.md)。決定故事:鉤子(前 3 到 8 秒:最有趣的真實台詞,可以從後面提取)、按邏輯順序排列的主體、乾淨的結尾(不要有「嗯,所以,就這樣」)。使用 words.py --project "$P" --src a --find "phrase" 找到重拍的鏡頭,並保留最後一個好的。寫入 P/cuts.json(格式參見 reference/formats.md):以輸出順序排列的時間段,from = 你想要的第一個詞的開始時間,to = 你想要的最後一個詞的開始時間(然後該片段會一直運行到該詞的結尾加上一個短尾音,所以它會在 to 之後一點結束)。預設的 tighten 和 punch_in 來自 studio.json long_form。要查看確切的詞時間:words.py --project "$P" --src a 61 75。
  5. 建立 EDL。 cut.py --project "$P" --cuts "$P/cuts.json" --out "$P/edl.json",然後閱讀 P/edl.txt。 每個片段必須以一個完整的思想開始和結束。修正任何標記為 MID-WORD 的內容、以「and」、「so」、「but」結尾的片段,或者跨剪輯重複的詞組。使用 words.py ... <from> <to> 查看剪輯點附近確切的詞時間。反覆調整,直到回讀的內容讀起來像一個乾淨的腳本。
  6. 草稿,然後主影片。 對於超過 3 分鐘的內容,先渲染最危險部分的草稿: render.py ... --preview --only 0,1,2,3。然後是主影片: render.py --project "$P" --edl "$P/edl.json" --out "$E/<name>.mp4"。僅在 studio.json 如此指定或他們要求時才燒錄內嵌字幕(在第 7 步後加上 --captions "$P/captions.json");YouTube 長片通常會改用獨立的 .srt 檔案。
  7. 字幕和章節。 captions.py --project "$P" --edl "$P/edl.json" --srt "$E/<name>.srt" --json "$P/captions.json"。閱讀一次 .srt 檔案以檢查聽錯的詞;使用 fix_words.py 修正並重新執行。對於長度超過約 4 分鐘的影片,寫入 P/chapters.json 並執行 captions.py ... --chapters 以獲取 YouTube 章節行(第一行在 0:00,3 行或更多,每行至少 10 秒)。
  8. QA 閘道。 qa.py --video "$E/<name>.mp4" --project "$P" --edl "$P/edl.json"。閱讀 <name>.qa.md:每個 FAIL 都必須修正;每個 AT A CUT 行都表示一個可能被剪掉的詞,因此調整該時間段並重新渲染。查看 <name>.sheet.jpg(使用「閱讀」工具查看圖片)以檢查黑畫面、不良構圖或模糊。參見 reference/qa.md。
  9. 短片(如果他們發布短片;預設數量來自 studio.json shorts.count):參見下一節。
  10. 交付。 寫入 E/REVIEW.md(範本在 reference/review-template.md):你製作了什麼、運行時間、你剪掉了什麼以及原因、每個判斷決定作為一個可翻轉的決策及其時間戳、QA 結果,以及從實際說出的內容中撰寫的建議標題、描述和主題標籤。然後告訴使用者檔案的位置,並要求他們觀看並附上時間戳記來傳送修改意見。

製作短片

首先閱讀 reference/shorts.md。簡短版本:

  1. 從轉錄稿中挑選可以獨立存在的時刻:一個強有力的開場白(一個主張、一個問題、一個驚人的數字、一個故事的開始)、一個想法、一個回報,長度在 15 到 59 秒之間。將它們排序,並向使用者提議最佳的 studio.json shorts.count 個,每個附帶一句說明,除非他們說直接進行。少數好的短片勝過湊數:一個 1 到 2 分鐘的錄製通常只能產出 1 或 2 個。如果整個錄製內容已經很短,那麼最佳的 30 到 59 秒的垂直版本就是短片。
  2. 在 P/shorts/shortN.json 中為每個短片設定一個規格(格式參見 reference/formats.md):時間段、一個以說話者自己的話語寫成的鉤子標題(2 到 7 個詞,其中一個詞用強調色 *標示*)、字幕樣式、可選的 caption_holds 用於那些逐字字幕會產生干擾的部分(例如清單、電話通話、音樂)。
  3. 先看靜態畫面:short.py --project "$P" --spec ... --out "$E/shorts/shortN.mp4" --stills "$P/shorts/stillsN"--at 0.5,3,10。檢查它們:臉部構圖是否恰當、標題是否可讀且不遮擋臉部、字幕是否遮住嘴或底部 15%(平台按鈕位於此處)。
  4. 在沒有 --stills 的情況下渲染,然後對每個短片執行 qa.py --video ... --project "$P" --spec ...。
  5. 永遠不要自己將一段連續的語音寫成幾個時間段(重疊的邊緣會使連接處的音訊加倍)。每個連續的語音段一個時間段;tighten 然後會安全地在長停頓處將其分割,因此在回讀中看到一個時間段內有幾個片段是預期的。

修訂

使用者會發送諸如「1:32 剪掉那個停頓」或「短片 2 開始太慢」之類的意見。使用 edl.txt 將輸出時間映射回 EDL(它列出了每個片段的輸出開始時間),更改 cuts.json 或短片規格,重新執行剪輯和渲染,重新執行 QA,並更新 REVIEW.md 以說明變更的內容。如果某個意見表達了持久的偏好,將其保存到 studio.json。

按需提供的額外功能

  • 隱私模糊:在 cuts.json 中添加 "blur": [{"src","t0","t1","rect":[x,y,w,h]}](使用來源像素;透過 sheet.py --times 從靜態畫面中找到它們)。在隱私文字上使用幾個小方塊勝過在一個視窗上使用一個大方塊。
  • 嗶聲或靜音:在 cuts.json 或短片規格中添加 "mutes": [{"src","t0","t1"}]。
  • YouTube 上傳副本:對於有螢幕文字的影片,upload_copy.py --master ... --out ...-1440p.mp4(YouTube 會為 1440p 上傳提供更好的編碼)。參見 reference/platforms.md。
  • 縮圖影格:sheet.py "$P/src/a.mp4" "$P/thumb-candidates.jpg" --every 4,然後挑選富有表現力、清晰的影格;使用 ffmpeg -ss <t> -i src -frames:v 1 thumb.png 匯出一個。
  • 任何此工具包無法執行的功能(多機位同步、調色、動態圖形、音樂背景):坦白說明,並建議從主影片開始,在他們選擇的編輯器中完成。reference/troubleshooting.md 提供已知問題的解決方案。

參考檔案

  • reference/editing-craft.md :如何決定剪掉什麼、節奏、鉤子、結尾
  • reference/formats.md :cuts.json、edl.json、短片規格、studio.json、chapters.json
  • reference/shorts.md :挑選和製作短片
  • reference/qa.md :品質閘道以及如何閱讀它
  • reference/platforms.md :每個平台的匯出規格和音量
  • reference/troubleshooting.md :音訊過小、手機 HDR、Whisper 時間怪異、電腦速度慢
  • reference/review-template.md :REVIEW.md 佈局

相關技能