Communitygithub.com

builtnotboosted/video-editing

將拍攝的談話錄影剪輯成可發布的直式短片(1080x1920)與 16:9 YouTube 長片,使用 ffmpeg 和 Whisper。保留每句腳本的一次乾淨閱讀,加入鏡頭變化、B-roll、動態圖形與字幕,並通過自動化品管檢查。

video-editing 是什麼?

這是一個專為 AI 代理設計的影片剪輯技能,能夠將原始談話錄影自動剪輯成不同平台適用的成品影片。它透過封裝的 `vedit.py` 工具鏈(基於 ffmpeg、Whisper 和 Playwright)執行完整剪輯流程:分析多鏡頭素材、自動選取最佳鏡次、精準剪輯保留自然口語、加入鏡頭變化與 B-roll、生成字幕與封面、並將響度標準化為 -14 LUFS。最重要的是,它內建了量子檢查閘(QA gate),會重新轉錄渲染後的影片並檢查每一段剪輯,確保沒有任何結巴、重複或錯誤的剪輯。此技能支援 Claude Code、Cursor 等具備檔案存取與命令執行能力的 AI Agent,並依賴 `video-scripting`、`brand/brand-profile.md`、`image-generation`、`review-loop` 與 `scheduling` 等其他技能協作。它不會直接發布影片,而是將最終成品與詳細的剪輯報告交付給人類進行審查。

相容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/builtnotboosted/built-not-boosted-skills/tree/HEAD/plugins/built-not-boosted/skills/video-editing

在你喜歡的 AI 中提問

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

說明文件

影片剪輯

此技能將原始錄影(人物對鏡頭說話)轉換為完成的影片、對應的 SRT 字幕檔與封面,使用一個基於 ffmpeg、Whisper 與 Playwright 的捆綁命令列工具(vedit.py)。它掌控整個剪輯:選擇乾淨的鏡次、乾淨的剪輯、鏡頭變化、圖形與 B-roll 放置、字幕、響度、封面與最終品質保證。它在腳本與剪輯備註上依賴 video-scripting 技能,在顏色、字型與合規字句上依賴 brand/brand-profile.md,在靜態圖片上依賴 image-generation 技能,在獨立檢查上依賴 review-loop 技能,在發布排程上依賴 scheduling 技能。這裡不會進行發布或排程。

權威順序:brand-profile.md 在品牌常數與合規用語上優先;此技能掌控方法。

開始之前

  1. 找到行銷工作空間(預設 marketing/)。如果沒有,用一句話說明並提供 brand-setup 技能;工具仍然可以使用中性外觀。
  2. 找到該內容的資料夾 content/<yyyy-mm-dd>-<slug>/。它應該包含 script.txt(每行一句口語;[括號中的備註] 與 [CHAPTER N • Title] 標記永遠不會被唸出),以及理想中的 edit-notes.txt(HOOK ON SCREEN:、COVER:、OUTCOME: 行)與 sources.txt(螢幕上唯一允許的數字)。如果拍攝時沒有腳本,請先轉錄並將清理後的轉錄稿視為腳本。
  3. 閱讀品牌設定檔中的 ## Visual identity、## Compliance、## Boundaries 與 ## CTA & contact,以及 brand/voice-learnings.md 中關於圖形與封面的用詞與措辭。
  4. 確認工具已就緒:python3 <skill>/vedit.py doctor。如果有任何缺失,執行一次 bash <skill>/setup.sh(ffmpeg、Node、Python venv、Whisper、Playwright、字型)。Whisper 的 large 模型約 3 GB,在筆電 CPU 上的轉錄速度約為片段長度的 1 到 2 倍,因此請將長時間的步驟在背景執行。

標準

  1. 每行一次乾淨閱讀。 完成的影片中每行腳本只出現一次:沒有重新開始、沒有「那個、那個」、沒有從廢棄鏡次而來的不完整句子、沒有被截斷的字尾。這是一個障礙,不是修飾。獨立的自然「嗯」可以保留(人們應該聽起來像自己),但絕對不能在開場白中,也不能在一行中出現兩次。
  2. 遵循口語表達,而非書面腳本。 人們在說話時會改進台詞。現場重述會在鏡次搜尋器中顯示為缺失或低覆蓋率的行;這不是失誤。保留他們的版本,只剪除真正的結巴與重新開始,並修正任何根據腳本撰寫的圖形或鉤卡,使之與實際說出的內容相符。
  3. 保留能帶來業務的節奏。 如果腳本有早期的「我是誰」台詞或結尾的行動呼籲,請保留在原地。
  4. 永遠不要只有單一固定鏡頭。 在每次剪輯時交替使用廣角與特寫,在長台詞內部重新構圖,切到 B-roll,用動態圖形來敘述故事。講話者是主幹,不是整支影片。
  5. 字幕來自完成的音訊,並與腳本比對,確保與聽到的內容完全一致。短片上燒錄;長片僅提供 SRT。
  6. 響度 -14 LUFS,真實峰值 -1.5 dB,確保在各個平台上都適中。
  7. 使用真實影格作為封面,標題位於網格安全正方形內,提供一或兩種變體。
  8. 品質檢查閘通過後才交付任何內容。 它會重新轉錄渲染結果,獨立聽取每個剪輯點,並檢查每個剪輯點是否落在安靜處。deliver 在沒有新的 PASS 狀態時會拒絕。
  9. 誠實面對耳朵的侷限。 Claude 無法聽見。品質檢查閘檢查的是文字與能量,而非語氣、字詞下的咳嗽或不良的環境音銜接。每次交接時都要這麼說。

方法

每個指令都是 python3 <skill>/vedit.py <command> <slug>。在手動編輯 project.json 之前,請先閱讀 references/project-config.md。

  1. 先收集所有東西。 列出批次中的所有片段。透過聲音配對第二台攝影機(scripts/sync_cams.py;真實匹配得分約 0.4 到 0.55,非匹配約 0.03),並透過動作與時間戳記配對靜音攝影機如無人機(scripts/sync_cams_visual.py)。為每張照片與短片段製作接觸表,記錄哪些可用作 B-roll,並立即詢問對方提到的任何但不在資料夾中的攝影機。詳情請開啟 references/multicam-and-long-form.md。
  2. 初始化。 vedit.py init <slug> --raw <cameraA clip> --pack <content folder> [--long] [--cam B=<clip>]。它會複製腳本、讀取剪輯備註,並將品牌設定檔的色盤與字型映射到 project.json 中。然後在 vocab 中填入腳本中的所有專有名詞,包括講者自己的名字。
  3. 預處理(慢速,背景執行):vedit.py prep <slug>。以攝影機原始幀率生成直立主片、16 kHz 音訊、同步其他攝影機,以及兩個轉錄稿(large-v3 逐字版 與 medium.en)。它會在遇到 HDR 素材、形狀錯誤的素材、以及來自藍牙麥克風的電話品質音訊時停止;references/audio-and-sync.md 有救援方法。
  4. 鏡次。 vedit.py takes <slug> 像提詞機一樣將語音對齊到腳本:向後跳代表重新開始,因此每一行每次嘗試都變成一個有評分的鏡次。第二次聆聽會獨立重聽每個鏡次,以找出填充詞、重複與雙重閱讀。閱讀 picker/takes_report.txt。在信任之前先驗證:開啟 references/whisper-pitfalls.md,因為 Whisper 會丟棄重複的虛假開始、發明結尾詞並分割不熟悉的術語。建議的重新開始修剪應予保留,除非能量圖顯示沒有第二次爆發的語音。
  5. 挑選。 由人在瀏覽器中挑選(背景執行 vedit.py picker <slug>,然後開啟 http://localhost:8765),或者,如果他們要求 Claude 挑選,請自行撰寫 picker/picks.json,並在每次偏離機器挑選時加上 note。告訴他們哪些行是紅色或琥珀色以及原因。優先選擇與相鄰行來自同一錄影段的鏡次:它們之間沒有剪輯感。永遠不要直接交付機器挑選的結果。
  6. 設計編排(設計工作,先閱讀 references/style-notes.md)。根據腳本、sources.txt 與素材內容:從 edit_notes.hook_on_screen 生成第 0 幀的鉤卡(3 到 5 個詞,一個承諾而非答案);graphics.json 中的資訊卡用於需要它們的節奏點,只使用 sources.txt 中的數字;cues 錨定到台詞或口語詞,永遠不要用固定時間;有動機的 B-roll 切離畫面(在它們說明的詞上,或是在一個眼神或手勢之後);framing.face_x/eye_y 在一幀上測量;exit_tail 用於走出的結尾。使用 vedit.py mg-preview <slug> 預覽圖形靜態版本。
  7. 建構。 vedit.py build <slug> plan 是即時的並會印出剪輯摘要;build cues 列出任何無法放置的提示(修正它,永遠不要忽略)。在 build cut 加上 scripts/cut_check.py 上迭代,直到乾淨為止,然後製作封面(步驟 9)以便海報幀編碼進去,接著 build all。建構應用的規則在 references/edit-rules.md 中。
  8. 品質檢查閘。 vedit.py gate <slug>。它會在以下情況失敗:一行讀了兩次、結巴或放棄的開始被留下、有語音能量但無文字(隱藏的重新閱讀)、跨剪輯點有重複或跳過(由兩種模型獨立聽取)、廢棄鏡次的殘留詞語在剪輯點上、剪輯點落在聲音上,以及(多機拍攝,如果存在 gaze.json)選錯攝影機。修正原因,重新建構,重新過閘。然後進行人類代理檢查:觀看渲染結果的接觸表,閱讀每條字幕(vedit.py captions <slug>),並為你變更的每一行記錄原本的內容與保留的內容。
  9. 封面。 使用 vedit.py frames <slug> --every 5 製作接觸表;選擇一個有眼神接觸、溫暖表情(非說話中)、清晰對焦以及一個能說明故事的物件的影格。設定 cover.frame 與一或兩個 variants(2 到 4 個詞,大字型,一個強調詞,樸素且真實),然後執行 vedit.py cover <slug>。它會檢查每個文字框是否位於網格安全正方形內以及人臉附近,並寫出 grid_tiles.jpg 以顯示個人檔案網格會顯示的內容。
  10. 審查。 將渲染結果的接觸表、封面、SRT 與剪輯清單交給 review-loop 技能。螢幕上的數字需與 sources.txt 比對,不能只信任。
  11. 交付與發布。 vedit.py deliver <slug> 將影片、SRT、封面、剪輯清單(每行:鏡次、來源範圍、修剪、每次變更及其原因)、QA 報告,以及長片的 youtube-chapters.txt 寫入 content/<date>-<slug>/video/。vedit.py release <slug> --to <folder> 將影片、SRT 與 JPG 縮圖複製到同一個檔案名稱下,這是排程工具與 YouTube 所期望的格式。

出貨前的檢查

交接給人員時務必包含以下內容:

  • 品質檢查閘 PASS,且為最新(新於渲染結果)。
  • 對最終渲染結果測量的唇形同步:在兩到三個臉部對鏡頭的段落上執行 scripts/lipsync.py build/final.mp4 <t0> <t1>,每個段落誤差在 ±40 ms 內。
  • 字幕檢查閱讀(vedit.py captions <slug>,以 vN-caption-check.txt 交付):FIXes 看起來合理,且每個 CHECK 都被標記為一行供人員聆聽。
  • 執行時間與響度。
  • 對其挑選所做的每次變更及其原因,以及值得聆聽的台詞。
  • 封面 A 與 B,以及網格預覽。
  • 「尚未發布或排程任何內容。」
  • 「我無法聽見:請在發布前聆聽。」

自訂調整

  • 沒有腳本? 先進行轉錄(prep 會生成兩種轉錄稿),將轉錄稿清理成每行一句,存為 script.txt,然後執行 takes。
  • 不同外觀: 所有視覺元素都讀取 project.json 中的 brand(顏色、字型)與 cover.wordmark(可選的小名稱標籤)。在那裡修改,永遠不要在腳本中修改。
  • 不同拼寫: captions.locale 設定為 en-GB(預設)或 en-US。
  • 較慢的機器: 在 project.json 中設定 "whisper": {"large": "small.en", "medium": "base.en"} 以犧牲準確度換取速度;品質檢查閘仍然會執行。
  • 受監管行業: 將 ## Compliance 中要求的螢幕用語放入圖形或結尾卡,並確保螢幕上的每個數字都來自 sources.txt。
  • 新的圖形範本: 將它們加入 scripts/mg/kit.html 並在 references/project-config.md 中記錄。
  • 學習: 當人員回報品質檢查閘未偵測到的跳躍或重複時,請在修正影片前記錄該案例,並將你學到的關於其剪輯偏好的資訊加入 brand/performance-learnings.md。SRT 是從他們自己的聲音轉錄的,因此 voice-loop 技能可以從中學習。

已知限制

  • 鏡次搜尋器可能會遺漏大幅改變措辭的重新開始;品質檢查閘的重新閱讀規則是後備防線。在進行任何 nin 或修剪變更後,請閱讀 build/edl.json 並手動檢查你觸及的每個接縫。
  • 殘留詞語檢查是透過文字比對保留鏡次的邊緣詞語,因此廢棄鏡次中聽起來像保留鏡次第一個詞的詞語,可能會被通過並標記為「即興發揮」備註。請透過 build/edl.json 手動將每個此類備註對應到來源時間。
  • 品質檢查閘中沒有自動唇形同步檢查:請在每次最終渲染後執行 lipsync.py。
  • 多機拍攝中的攝影機選擇是手動的(在挑選中設定 "cam"),除非你提供 gaze.json;請參閱 references/multicam-and-long-form.md。
  • 不支援逐字「卡拉 OK」字幕;可以將其作為一個想法提出,但永遠不要未經要求就切換字幕樣式。

此技能中的檔案

檔案何時開啟
references/project-config.md編輯 project.json、graphics.json、提示、封面變體或挑選時
references/edit-rules.md判斷剪輯、字幕、圖形或封面時
references/whisper-pitfalls.md驗證鏡次、修剪與品質檢查閘備註時
references/style-notes.md編排剪輯時(鏡頭變化、切離畫面、鉤卡、封面)
references/multicam-and-long-form.md有第二台攝影機、無人機、16:9 長片、章節時
references/audio-and-sync.md音訊不良、音訊延遲、背景噪音、響度問題時
references/project-template.json起始的 project.json
setup.sh、vedit.py doctor在機器上首次執行時

了解更多

包含範例的更完整指南位於 https://builtnotboosted.com/skills/video-editing

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

builtnotboosted/image-generation

Produces finished social images with any image model (Google Gemini image, "Nano Banana", as the worked example) - feed statics, carousel slides, short-form video covers, YouTube and article thumbnails, local listing cards and animated statics. Bakes the headline into the scene instead of pasting text on top, keeps text inside the profile-grid safe zone, locks the likeness of real people to their reference photos, hits exact platform sizes, writes alt text and re-judges every re-roll on the filed file. Use when someone says "make an image for this post", "create a thumbnail", "make a cover from my video", "design a carousel", "animate this static", "the image model won't do 4:5", "my headline is getting cut off in the grid", or when a content pack needs its visuals.

builtnotboosted/review-loop

The quality gate every piece of content passes before it is filed, scheduled or posted. Runs a self-critique, then an independent review by a fresh subagent that sees only the finished work and the criteria (never the builder's reasoning), then fix and re-judge until there is a clean pass. Covers what to do when a piece can't pass unattended (hold, flag, ship the rest). Use when someone says "review this", "check this before it goes out", "QA the pack", "is this ready to post", "get a second pair of eyes on this", "proofread the captions", or when any other Built Not Boosted skill hands work over for checks.

builtnotboosted/scheduling

Gets finished posts into a social media scheduler (or posted by hand) safely. Queue-only with explicit timezone offsets, live dedup against scheduled and already-published posts, media readiness checks, correct post types (shorts, reels, carousels, first comments, manual-posting reminders), alt text, a link gate that sends copy back for a rewrite rather than stripping it, and confirmation before anything goes live. Writes and keeps a scheduling manifest for each pack. Works with any scheduler; Publer is the worked example. Use when someone says "schedule this", "queue these posts", "put this in Publer", "book in this week's content", "post this on Tuesday at 7", "move that post", "what's already scheduled", or hands over a finished content pack to go out.

builtnotboosted/video-scripting

Writes video scripts that sound like the person who will say them, for shorts (Reels, TikTok, YouTube Shorts) and long-form YouTube. Warm hook rather than a shout, who-am-I and follow early, a retention shape that delays the answer, a soft earned close, length that follows the story, real-problem substance, reactive scripts for news and data releases. Output is teleprompter-ready (think-breaks, shot reminders) with short edit notes for the video-editing skill. Use when someone says "write me a script", "script a reel about", "I need a short on", "plan a YouTube video", "turn this post into a video", "react to today's news on video", "what should I say on camera", or before a filming session.

相關技能