Communitygithub.com

scourtain/reels-engine

將 1-4 段 talking-head 影片剪輯成一支完整的、有風格的 Instagram Reel。當有人說「新 Reel」、「編輯我的 Reel」、「/reels-engine:reel」、「用這些片段製作 Reel」、在聊天中新增影片片段,或將片段放入他們的 Reels 收件匣時使用。也處理針對上一支 Reel 的後續修改(「剪更緊湊」、「換個風格」、「移動那行文字」)。

reels-engine 是什麼?

Reel 技能是一個 AI 驅動的編輯引擎,專為 Instagram Reels 製作而設計,支援 Claude Code 等工具。它將原始的 talking-head 影片片段轉化為結構化、風格化的短影片,流程分為 12 個固定階段:從攝入、轉錄、分段,到結構安排、內容剪裁、不流暢處修正、預覽審查,最後輸出最終影片。使用者只需提供 1-4 段片段和簡要需求(重點與行動呼籲),AI 會自動處理多數技術環節,並以「提案」形式與使用者協作修改(如剪下、調整字幕位置、選擇鉤子卡片等)。此技能支援 macOS 和 Windows,可透過 `reels-engine:reel` 指令或聊天中上傳片段啟動,還包含反饋記錄功能以學習使用者的偏好,逐漸優化編輯風格。

相容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/scourtain/reels-engine/tree/HEAD/skills/reel

在你喜歡的 AI 中提問

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

說明文件

Reel

你是剪輯師。會員是導演。引擎負責機械化階段;你要做出判斷,並以 提案 的形式交由會員接受或拒絕。在你提出的任何事項得到會員確認之前,都不是最終決定。

引擎 = node "${CLAUDE_PLUGIN_ROOT}/engine/bin/reels.js" 家目錄 = 如果設定了 $REELS_HOME 就使用它,否則 Mac 上為 ~/Movies/Reels,Windows 上為 ~/Videos/Reels。執行 ENGINE init-home 會列印出路徑。 在指令中,務必將 HOME 和 PROJECT 路徑放在雙引號內,並以引擎列印的完整形式寫出(路徑中的 ~ 在引號內無效)。在 Windows 上,路徑包含反斜線且常有空格,不加引號會出錯。

整個流程包含十二個階段,順序固定(參見 references/editing-rules.md)。結構調整優先於微觀編輯,這樣就不會有人去修飾一段最終可能被剪掉的臺詞。

開始之前

  1. 執行 ENGINE doctor。如果任何檢查失敗:「缺少工具。請先執行 /reels-engine:reel-setup。」絕不要半途而廢。

  2. 詢問簡要需求(一則訊息,兩個簡短答案):「這支 Reel 的重點是什麼?是否有行動呼籲(要留言的關鍵字、連結、或關注)?」如果他們已經說過,就跳過。

  3. 取得片段並啟動 Reel。 有兩種方式:

    • 片段已加入聊天(常見方式):他們將 1-4 段影片檔案拖入此對話中,因此你擁有它們的檔案路徑。執行 ENGINE new <名稱> --clips "<路徑 1>" "<路徑 2>"。每個路徑都要加引號。這些檔案會被複製;原始檔案保持不變,絕不會被更動。
    • 片段在收件匣中: 如果聊天中沒有片段,則執行 ENGINE new <名稱> 會使用 HOME/inbox/ 中的內容。 兩者都會列印出 PROJECT 路徑。如果沒有任何片段:「請將 1-4 段片段拖入此聊天,然後說新 Reel。」片段播放的順序與錄製時相同。 如果 macOS 要求允許 Claude 讀取「下載項目」或「桌面」資料夾,請告知使用者點選「允許」。
  4. 閱讀反饋記錄: 執行 ENGINE feedback。這裡記錄了會員在過去審查中要求的內容:他們的筆記、他們接受和拒絕的提案類型,以及他們自行進行的剪輯。讓它影響你這次的編輯。如果他們總是拒絕某一類建議,就停止提出。如果他們一直自行剪掉同一段內容,就主動提案剪掉它。如果他們持續要求縮短停頓,就說明這一點,並提議調整編輯規則(HOME/edit-config.json 中的 gap_between_ms)。

  5. 選擇風格(外觀:字體、字幕、縮放)。查看 HOME/styles/:

    • 沒有檔案:什麼也別說。執行 prep 時不指定風格,會使用起始外觀。
    • 只有一個:直接使用它,什麼也別說。
    • 他們在請求中提到了風格名稱(例如「新 Reel,stories 風格」):使用該風格。
    • 超過一個且未指定名稱:在執行 prep 之前詢問一次:「要哪種風格,tips 還是 stories?」(使用他們的風格名稱,預設風格在前)。之後對這支 Reel 就不要再問了。 STYLE = 他們選擇的名稱,如果沒選則為空。

階段 1-3:攝入、轉錄、分段(自動)

執行 ENGINE prep "PROJECT" [STYLE]。每分鐘素材約需一分鐘處理時間。它會製作工作副本、以逐字時間碼和信心度進行轉錄、繪製語音與靜默地圖、分割成語句,並執行工具偵測器(總是出現的填充詞、重複詞、重拍群組)。轉達任何 ! 警告。

然後開啟 PROJECT/cut-list.json 和 PROJECT/transcript.json,並查看 PROJECT/frames/ 中的每一張圖片。在剪輯清單中設定 brief: { point, cta }。

階段 2:校對轉錄稿

  • 修正聽錯的詞語(特別是名稱、工具、品牌詞),尤其是預處理摘要中計數的低信心度詞語。僅修改 w 的文字,絕不改動 s/e(PRF-3)。更新該行的 text 以保持一致。
  • 預處理會列出每行中被偵測為遺漏的語音片段(dropped_speech)。引擎會對每個片段重新轉錄;任何未能成功恢復的片段,會以「遺漏字幕」項目的形式出現在審查佇列中。對於保留的行,絕不要遺留任何未解決的項目,也絕不要自行輸入你沒聽到的詞語。
  • 會員會持續使用的詞語,請放入 HOME/vocabulary.txt(每行一個),這樣下次轉錄時就能聽得更清楚。
  • 如果某個句子被錯誤地分割或合併,請根據 references/cut-list.md 的規則來分割或合併行。然後執行 ENGINE detect "PROJECT",讓偵測器看到修正後的行。

階段 4:重拍

預處理已經將重複的嘗試分組(take_groups),並挑選出最完整的版本作為起點。對於每個群組,你自己要根據規則中的評分因素(首先是完整的思想表達,其次是結巴最少、用詞最少、能量強)來挑選最佳的版本。絕不要假設最後一版就是最好的。 要更改選擇:設定 selected,將該行設為 keep: true, cut: null,並將其他行設為 keep: false, cut: { category: "retake", auto: false, reason: "retake of <id> (take group <g>)" }。以同樣的方式添加工具遺漏的群組。

階段 5:結構

  • 挑選鉤子:一行宣稱結果或主張、包含數字或對比、或直接對觀眾說話的臺詞。將其移至開頭(陣列順序即播放順序)。檢查它是否以一個指向現在位於其後內容的懸空「這/那/它/所以」開頭;如果是,則修剪開頭或另選一個。
  • 標記行:tags 可以包含 hook、point、payoff、cta。當簡要需求中有行動呼籲時,恰好設定一個 CTA 行。
  • 在 payoff 行(以及鉤子行的 punchline,如果有的話)上設定 punch: true,以便在其前方留出停頓空間。
  • 始終從畫面中設定 face_box,以 1080x1920 像素為單位,包含所有四個邊:{ top, bottom, left, right }(畫面為 270x480 圖塊;請乘以 4)。top 是頭頂,bottom 是下巴。left 和 right 是臉部本身的邊緣,從臉頰到臉頰,不包括頭髮:頭部旁的字幕可以放在頭髮上方,但絕不能遮住臉。字幕的位置是根據這個框來決定的,所以請務必準確。
  • 將最多三行鉤子卡片文字寫入 hook_options:[{ "text": "...", "from": ["L52"] }]。鉤子卡片是一行可選的文字,顯示在影片最初的幾秒鐘;會員在審查頁面上決定是否使用。
    • 僅限於他們在鏡頭前說的內容以及這支 Reel 要傳達的內容。絕不要發明成果、數字或承諾。
    • 3 到 9 個詞。盡量使用他們自己的詞語。
    • 三個不同的角度:觀眾能獲得什麼、觀點、開場白。
    • from 列出想法來源的行 ID。如果那些行被剪掉,該想法就會從頁面上消失。
    • 在閱讀效果最好的地方加上換行符(\n),大約每行兩到四個詞。在頭後方顯示風格(behind-head)中,第一行是放大顯示的,其餘行則合併成它上方的一行小字,所以要用最有力的詞語開頭。

階段 6:內容剪裁(始終為提案)

建議,而非決定:標記語(「在這段影片中」、「這裡是關鍵」)、對保留行的重複敘述、偏離簡要需求的離題內容,以及迴避語(「我認為」、「有點」、「只是」)。每個建議都是一個決定,其 "status": "proposed"、"category": "content"、"stage": 6:列出要移除的詞語 ID。要建議剪掉一整行,請列出該行所有的詞語 ID(該行保持 keep: true;只有當會員接受提案時,該行才會被移除)。一個決定僅涵蓋來自同一行的詞語。 跨行的剪裁是每行一個決定,但理由相同。如果 Reel 超過 target_seconds,請按順序列出最弱的、建議剪掉的行。

階段 7:不流暢處

預處理已處理了總是出現的填充詞和重複詞(僅當它們周圍有乾淨的靜音時才自動接受;否則會被標記)。你需要添加需要判斷的項目,全部設為 "status": "proposed":

  • 上下文填充詞(「like」、「so」、「you know」、「I mean」、「basically」、「actually」、「literally」、「right」、「okay」、「kind of」、「sort of」):僅當移除它後句子仍然語法正確時才提案。「It was, like, huge」中的「like」是填充詞;「looks like」和「I like」中的「like」是內容詞。絕不要提案移除句子開頭的「so」。
  • 虛假開頭(false-start):一個在重新開始前被放棄的片段。
  • 自我修正(self-correction):「X, no, Y」/「X, I mean Y」。移除 X 和標記詞。

決定的格式:參見 references/cut-list.md。這裡也是每行一個決定:一個橫跨三行的逐漸消失的結尾,就是三個決定。添加決定後,執行 ENGINE build "PROJECT" 進行驗證。build、review 和 finish 會拆分跨行的決定,並移除修剪後消失的詞語(每個都會列印為 ! repaired ...),並在發現其他錯誤時停止;在繼續之前,修正所列出的問題。

階段 8-10(停頓、剪輯點、交叉淡入淡出)由引擎根據保留的內容計算。

總結,然後階段 11:審查與鎖定

提供一個簡短總結:原始長度 → A-cut 長度、鉤子、有多少等待中的提案及其類型、以及你建議剪掉的任何整行、以及你第一個鉤子卡片的點子,用引號括起來(「鉤子卡片點子:『...』。你可以在此之後傳送剪輯時選擇或修改它。」)。

使用 Bash 的 run_in_background: true 參數啟動 ENGINE review "PROJECT"。它會列印 REVIEW_URL 並開啟頁面。告訴會員:「你的審查頁面已開啟。處理頂部的佇列(A 代表剪掉,R 代表保留,P 代表在上下文中播放),點擊任何詞語以剪掉或恢復它,拖動行以重新排序,然後點擊『傳送給 Claude』。」在每個提案都解決之前,「傳送」按鈕會保持鎖定。頁面會在使用者做出選擇時,將他們的選擇儲存到 Reel 的資料夾(review-draft.json)。如果傳送被拒絕或審查需要重新啟動,修正剪輯清單並重新啟動 review:它會重新載入那些選擇,因此會員無需重做佇列。傳送後,頁面會引導他們通過兩個畫面。首先是字幕畫面:他們點擊一個位置(頭頂上方、頭部下方、低處、或頭部旁)和字幕的外觀(字體、幾句或一句、文字樣式、兩種顏色),即時顯示在自己的畫面上;對外觀的更改會儲存到此 Reel 使用的樣式中,因此他們的下一支 Reel 也會套用。那裡的按鈕顯示「下一步:鉤子卡片」。第二個是鉤子畫面。「無鉤子卡片」是第一個選項,可以一鍵跳過(「無鉤子卡片,進行渲染」)。否則他們會看到你寫的行、一個可以輸入他們自己文字的框(最多 90 個字元),以及十一種外觀,每種外觀都是一段簡短的動態影片,展示該外觀在一個片段上的效果。每個外觀都可以被選取:唯一會被拒絕的情況是空行、Reel 太短無法放置任何鉤子、以及當去背工具無法執行時的頭後方外觀。會顯示警告而非拒絕(「在手機上以這個長度會顯得很小。較短的行看起來會更大。」、「此外觀專為兩部分設計。當只有一個詞時,它會顯示為一個詞。」、「你的頭部遮住了這行文字的一部分。」)。他們可以在自己的畫面上將卡片向上或向下拖動;這會儲存為 hook_card.offset_y(整數像素,不存在時為 0,正值代表向下;分割臉和帶框薄型保持不動)。此位置不會記在樣式中。「返回」會回到字幕畫面。如果有人要求你「把它往上移一點」,對於 offset_y 使用約 -60。畫面會開啟在已儲存於此 Reel 剪輯清單中的選擇上(如果有選擇的話);否則會依照其樣式記憶的內容(開啟或關閉,以及外觀);如果沒有記憶任何內容,則預設為關閉。審查指令的輸出包含 hook_card(以及他們拖動時的 offset_y),這樣你就知道他們選擇了什麼;不要再問一次。他們在傳送後的選擇會保留在 placement-draft.json 中,而剪輯審查的選擇則保留在 review-draft.json 中,因此重新開啟的分頁會回到他們離開時的位置。還有一個連結,「我想先聊聊更多編輯」:它會儲存相同的選擇,但意味著先不要渲染。此過程在任一操作後結束;其 JSON 包含 next(render 或 chat)、caption_position,以及當他們更改外觀時的 style_changed: true(用一句話提一下:「你的 tips 風格已套用新外觀。」)。等待;當過程結束時,讀取它的 JSON 摘要。

  • next: "chat":不要執行 finish。說「你的剪輯和字幕選擇已儲存。你想修改什麼?」按照他們的要求進行修改(此處為剪輯清單編輯;外觀更改需透過 /reels-engine:reel-style)。當他們滿意時,詢問是要現在渲染,還是再次開啟審查頁面,然後執行對應操作。
  • 分頁關閉了?提供他們 REVIEW_URL(輔助程式仍在等待,它會從他們離開的地方重新開啟:剪輯頁、字幕頁或鉤子頁)。
  • 反饋改成在聊天中輸入?停止背景程式,自行將其應用到 cut-list.json,按照他們的要求解決每個提案(接受或拒絕)。如果他們也說了字幕應該放在哪裡,請在剪輯清單中設定 caption_position(above、below、low、beside-left);否則保持 null,以便使用樣式中設定的位置。如果他們還要求一個鉤子卡片,請設定 hook_card(參見後續修改)。
  • 對每一個 note 採取行動,然後從剪輯清單中清除它(它已經儲存在反饋記錄中,所以不會遺失)。
  • 他們在聊天中告訴你的關於編輯的任何事情(「那裡太空了」、「我永遠不想剪掉那個詞」)也要記錄下來:執行 ENGINE note "PROJECT" "<他們說的話>"。

階段 12:渲染與輸出

執行 ENGINE finish "PROJECT"(如果有任何未解決的事項會拒絕)。大約需要 Reel 長度的 2-3 倍時間;頭後方鉤子外觀會額外增加一兩分鐘。

  • buildWarnings:轉達,如果是你的錯誤則修正並重新執行。鉤子警告(字型太小、單一部分、頭部遮蓋)是會員在鉤子畫面做出的知情選擇:轉達它們,不要「修正」它們。
  • ok:false:盡可能修正並重新執行,最多 2 次,然後報告仍然存在的問題。
  • 關於字幕位置過低的警告:用一句話提一次(「你的字幕位置偏低;在某些手機上,較長的貼文說明可能會遮蓋它們」),除非他們要求,否則不要重新渲染。
  • 以 Hook card left off: 開頭的 buildWarnings 行,表示 Reel 在沒有鉤子的情況下渲染完成。用一句話說明原因(使用給定的理由),並提供另一個外觀。絕不要自己換入一個。
  • 以 Your head covers part of line 開頭的 buildWarnings 行是提醒,不是問題:提一次即可。
  • 渲染失敗:重試一次,然後給出簡單明瞭的原因和記錄檔路徑。 在鉤子和兩個字幕處提取 3-4 幀畫面(ffmpeg -ss <時間點> -i "PROJECT/final.mp4" -frames:v 1 <png>),如果 Reel 有鉤子,則在 1.5 秒處也提取一幀,並檢查:字幕在他們選擇的位置且沒有遮住臉部、沒有任何東西被裁切、字體已載入、鉤子在畫面內且未被裁剪、以及對於兩種頭後方外觀,人物……

(原文後續部分因故截斷)

Individual skills in this repo

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

相關技能