Communitygithub.com

video-reels

從長篇談話影片中裁切出垂直的 Instagram Reels,鉤子優先。從逐字稿中選出最有力的獨立片段,在最具衝擊力的台詞處開啟每個 Reel,在 DaVinci Resolve 中建立以說話者臉部為中心並套用 LUT 的垂直時間軸,最後完成它們:一個鉤子(靜態文字卡或逐字「建置」鉤子加上推近效果)和 V3 上的燒錄風格字幕;二選一類 Reels 則加入產品圖形和評論關鍵字 CTA 卡。您只需修剪和渲染,無需匯入。觸發詞:「製作 Reels」、「為 Instagram 剪輯這個」、「裁切一些垂直影片」,或在 YouTube 影片剪好之後觸發。

video-reels 是什麼?

此技能專為將長篇談話影片高效率地轉換為多個適合 Instagram 的垂直 Reels 而設計,重點是「鉤子優先」的策略。它會分析完整的逐字稿,識別出能獨立存在的最有力瞬間,並將每個 Reel 的開場設定在其最精彩的台詞上,而非按照時間順序剪輯。這項技能會自動在 DaVinci Resolve 中建立垂直時間軸,並將畫面框定在說話者的臉部,同時套用您指定的 LUT,並添加進階元素,例如動態鉤子(逐字建置或靜態文字卡)和燒錄風格的動態字幕。對於二選一類型的 Reels,它還會整合產品圖形和評論關鍵字行動呼籲 (CTA) 卡。此技能支援 DaVinci Resolve Studio(需啟用腳本功能與 Resolve MCP)、macOS(用於去背工具)以及多種 AI 工具,如 Whisper(用於轉錄)和 Puppeteer(用於渲染 HTML/CSS 動畫)。它還包含一個強大的分析循環:在產出新的 Reels 之前,它會先讀取「Reel 追蹤器」來分析過去內容的成效表現,並將這些見解直接套用於當前的批次編輯中,確保策略是根據數據持續優化的。最終輸出為準備好渲染的 Resolve 時間軸,使用者只需進行修剪和最終渲染,無需手動匯入任何素材。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/beachyphotoandfilm-arch/video-skills/tree/HEAD/skills/video-reels

在你喜歡的 AI 中提問

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

說明文件

Reels

從長篇影片(或專門作為 Reels 拍攝的獨立影片)中剪出的垂直短片。

設定:在此定義你的品牌

在首次執行前編輯這些設定一次。以下所有設定都透過名稱來引用它們。

設定位置預設值
強調色scripts/motion.html、scripts/thisorthat.html、scripts/hook.html 頂部的 --brand#3b82f6
顯示字體(鉤子卡片、標題、關鍵字)相同檔案中的 --display-fontAnton(免費,Google Fonts)
字幕字體scripts/caption.htmlMontserrat ExtraBold 800(免費)
攝影機 LUTreel-params.json 中的 "lut",以及 preview_reel.py 的 LUT 環境變數<PATH_TO_YOUR_LUT>.cube
新素材放置資料夾步驟「新素材放置位置」<YOUR_FOOTAGE_DRIVE>/<INBOX_FOLDER>/
B-Roll 庫動畫風格,步驟 6<YOUR_FOOTAGE_DRIVE>/<shoot>/<cam>/full/
Reel 追蹤器步驟 0你專案中的 drafts/social/reel-tracker.md
Whisper 模型WHISPER_MODEL 環境變數~/.cache/whisper-models/ggml-small.en.bin
評論關鍵字 CTA計畫項目中的 cta你自己的關鍵字(例如 GUIDE)
背景音樂參考音樂步驟你喜歡的參考曲目(例如用於 SearchRecordings 的 Spotify 曲目 ID)

字型:將 Montserrat 和你的顯示字體安裝到 ~/Library/Fonts(或保留每個 HTML 檔案中的 Google Fonts @import,並在線上渲染)。如果你的顯示字體有授權限制,請將其保留在儲存庫之外。

工具:whisper-cli (whisper.cpp)、ffmpeg、Node + puppeteer-core、Google Chrome、已啟用腳本功能的 DaVinci Resolve Studio(以及一個帶有 execute_resolve_code 的 Resolve MCP)、用於 cutout.swift 的 macOS。

步驟 0:先閱讀計分板

在挑選或剪輯任何東西之前,先閱讀 Reel 追蹤器。

  1. 填入統計數據:針對任何已上線超過 7 天且仍為空白的行。從你的分析工具(例如 Instagram Reels 的 Metricool getAnalyticsDataByMetrics)擷取數據。觀看次數、平均觀看時間、3 秒留存率(如有)、分享次數、儲存次數、留言次數、追蹤數。
  2. 根據我們能控制的因素進行比較:格式、鉤子風格(卡片/建置/標題)、長度、CTA 類型、推近效果、主題。只有在每邊至少有 3 個 Reels 的情況下,才稱之為一種模式,並說明差距有多大。
  3. 在追蹤器中「數字目前說明了什麼」下方寫下結論,並標註日期。
  4. 將結論應用於這一批次並明確說明,在展示給使用者的 Reel 列表中註明(例如「建置鉤子在 3 秒處的留存率高出 1.4 倍,因此我在 8 個 Reels 中的 6 個使用了建置鉤子」)。如果一個獲勝模式與你鎖定的風格衝突,請在更改之前先詢問。
  5. 排程完成後,為每個 Reel 新增一行,說明它是如何編輯的。

最重要的規則:鉤子優先

前 3 秒決定了分發效果,多達一半的觀眾會在該視窗內離開,而且鉤子必須立即載入,而不是慢慢鋪陳。一個以「第二個提示是...」開場的 Reel 是注定失敗的。

所以不要剪輯時間順序的片段。將每個 Reel 建構成:

  1. 鉤子(2-4 秒): 最有力、能獨立存在的台詞,取自影片中的任何地方,包括結尾。
  2. 建置: 背景脈絡和解釋,以最易於理解的順序呈現。
  3. 回報: 如果有的話,一個簡短的結尾台詞。

按時間順序的片段會產生無力的鉤子。重新排列相同的素材,無需重新拍攝,就能解決這個問題。重新排列就是主要工作。

好的鉤子模式例如:「我們不再跳過練腿日了」、「你跳過的計劃根本不是計劃」、「每天 10 分鐘就是一年 60 小時」。簡短、陳述性、無鋪陳。

新素材放置位置

新的 Reel 批次會出現在 <YOUR_FOOTAGE_DRIVE>/<INBOX_FOLDER>/,通常是 untitled folder。先檢查那裡。一旦你知道裡面有什麼,將資料夾重新命名為日期在前,然後是名稱:例如 9-28-2026 gear reels。在重新命名前進行轉錄,然後修正 clips.ndjson 中的路徑。

獨立 Reels:動畫風格

對於作為 Reels 拍攝的影片(沒有長篇影片,沒有紙上編輯),動畫風格更具吸引力:產品在畫面中、照片卡片、按鈕上的箭頭或圓圈、上方的打字機註解、頭部上方的小圖片彈出、帶有小副標題的大膽鉤子。先建立一個並獲得批准,再進行批量處理。

  1. 無紙上編輯。 將 segments-v2.json 寫為 [],並為每個部分設定 "raw": true, "exact": true。
  2. 不要信任這些影片的整段 Whisper 轉錄。 在台詞之間有長時間重設的鏡次會漂移 2-5 秒(Whisper 可能會將一個短語放在 5.4 秒的靜音中)。執行 GAP=0.18 SUF=.fine blobs.py <work> <clip> 並在 blob 邊緣裁切部分。對於最後一個單詞,檢查 50ms RMS 圖譜:單詞中間的下降可能是摩擦音(如 "free" 中的 "f"),因此請重新檢查字幕結尾。在單詞尾部低於 -50 dB 後結束最後一個部分。Whisper 也會在最後一張卡片的裁切點之後發明單詞,因此請檢查 SRT 的最後一個提示與音訊是否相符。
  3. 推近節奏: 在原生垂直素材上,交替使用廣角(縮放 1.25,傾斜 0)和推近(縮放 1.6,傾斜 -90)的部分。如果說話者傾斜,則平移任何部分(例如鉤子:平移 180)。
  4. V2 上的動畫層: motion.json(元素列表,時間與 reels-built.json 中的單詞對齊)-> render_motion.mjs(逐幀渲染,30 秒約需 50 秒)。元素類型在 motion.html 中有文件說明:單詞建置、猛擊、打字機註解、搖晃、產品去背圖(彈出/飛入/縮小)、按鈕上的脈衝圓圈、刪除線,以及一個B-Roll 卡片,可以播放真實素材(透過 ffmpeg lut3d 使用 LUT 進行調色)。每行一個視覺元素,全部位於頭部上方的帶狀區域(y 200-550;在 y 100 處,頂部的單詞會被裁切)。為了騰出空間,將每個部分的傾斜度比基本構圖再降低 100(廣角 1.25 / 傾斜 -100,推近 1.6 / 傾斜 -190)。關鍵字使用 blue 類別(它使用 --brand),該類別會在填充色後方繪製一個粗白邊框,這樣強調色就不會在中性牆壁上消失。使用 resolve_captions.py 並設定 "track": 2 來放置。
  5. 產品圖片: 優先使用 Wikimedia Commons API,然後是品牌的 OG 圖片。使用 scripts/cutout 進行去背,裁剪掉桌面反射。將它們保存在 <work>/gear/ 中。
  6. 你用於 B-Roll 的素材: <YOUR_FOOTAGE_DRIVE>/<shoot>/<cam>/full/。如果素材是 Log 格式,請使用全解析度檔案加上 LUT;已燒錄的代理檔案通常看起來很粗糙。
  7. A2 軌道上的音效: build_sfx.py motion.json out.wav。它會優先使用 video-reels/sfx/<name>.wav(彈出、咻、猛擊、滴答、點擊、打字、滑動、搖晃、縮小),否則使用合成的替代音效,因此無需任何檔案即可立即使用。ding 始終使用 scripts/ding.wav(隨附一個合成的叮噹聲;你可以用自己的挑選音效替換它)。合成的 pop 是相機快門聲(音高掃描的 pop 聽起來往往很「外星」),而 MASTER = -3 dB 可確保每個音效都略低於人聲。為了獲得更好的音效,請建立 sfx/ 並放入你自有的授權音效,然後在 LIBGAIN 中調整每個檔案的增益。使用 Epidemic Sound 連接器:使用 SearchSoundEffects 搜尋,使用 DownloadSoundEffect (WAV) 擷取,然後對 assetUrl 使用 curl。 7b. A3 軌道上的柔和背景音樂: 選擇一種氛圍並堅持使用(例如夢幻爵士/薩克斯風,無人聲)。使用 Epidemic Sound:使用 query.externalID = {type: SPOTIFY_TRACK, id: <REFERENCE_SPOTIFY_TRACK_ID>} 和 vocals: false 進行 SearchRecordings,跳過任何標記為怪異/恐怖/無人機/管弦樂的曲目,並為每個 Reel 提供不同的曲目。然後使用 targetDurationMs = Reel 長度 + 約 0.3 秒和 forceDuration 進行 EditRecording,這樣曲目會結束而不會被截斷。使用 ffmpeg 將 -21 dB 和 1.2 秒淡出燒錄到 wav 中,因為 Resolve API 無法設定片段音量(SetProperty("Volume") 回傳 False)。這會將背景音樂置於大約低於人聲 15 dB 的位置。
  8. 在 Resolve 審查前預覽: preview_reel.py(相同的裁切、LUT、疊加層、音效、音樂)會在幾秒鐘內提供一個 mp4。將每個片段修剪到 Resolve 的精確幀數(fps,然後 trim=end_frame,接著 atrim=duration);單純使用 -ss/-t 輸入會導致長度約長 0.45 秒,並會切掉預覽的最後一行。使用 1.3 秒的聯繫表來驗證,並對最後 1.5 秒進行 Whisper 轉錄以確認結尾完整。
  9. 如果說話者在 CTA 之後添加了簽名台詞,請保留它:在其後的靜音處裁切,而不是在 CTA 單詞之後。build_reels.py 在音訊後填充 1 秒的靜音,否則 Whisper 會從字幕中遺漏最後幾個單詞。重新渲染會使用新檔案名稱(例如 -v3),這樣 Resolve 就不會提供快取的舊片段。

批量處理獨立 Reels

先讓一個 Reel 的風格獲得批准,然後再並行處理其餘的:

  1. 每個 Reel 一個資料夾(~/Movies/reels-<MMDD>/<NN>-<slug>/),包含符號連結的 <clip>.wav/.json、clips.ndjson、segments-v2.json = []。分開的資料夾可以防止 Reels 互相覆蓋彼此的 reels-built.json。
  2. 寫一個簡短的簡報,指向已批准 Reel 的檔案(motion.json、構圖、音效),然後啟動每個 Reel 的後台代理,一次 4 個(太多會使筆記型電腦在 4K 解碼時不堪負荷)。給每個代理該片段的轉錄稿、產品的確切型號名稱,以及任何需要剪掉的行(錯誤事實、重新開始、雜談)。
  3. 代理會在無音樂預覽階段停止。集中處理音樂(每個 Reel 編輯一次,使用不同的曲目),將電平調整到大約平均 -38 dB 並加入淡出,渲染最終預覽,然後一次一個 Reel 放置到 Resolve 中。
  4. 在開始建置之前,親自檢查每個代理的聯繫表。將所有最終預覽收集到一個 previews/ 資料夾中供審查。
  5. 構圖因設備設置而異。例如:在一個設置上,廣角縮放 1.2 / 傾斜 -190,推近 1.5 / 傾斜 -380;在較寬鬆的設置上,則是 1.25/-100,1.6/-190。檢查每個片段的靜止幀。
  6. 將每個代理的「待檢查」項目(聽錯、它剪掉的事實、螢幕上的聲明)收集到你的摘要中。Whisper 經常聽錯快速說話(例如將 "free" 聽成 "for you")。

從影片中取得每個 Reel

挖掘整個影片,絕不重複內容。

  1. 先盤點。 瀏覽整個逐字稿,列出每個可以獨立存在的想法單元:每個提示、故事、統計數據、腳本、自白、反主流觀點以及客戶成功案例。預期每1.2 到 1.5 分鐘的最終剪輯長度約可產生一個 Reel。
  2. 尋找這些鉤子類型:
    • 一個數字:「300 條麵包」、「我雜貨帳單的 40%」、「從 5K 到 50K 粉絲」
    • 一個自白:「我以前只會坐著希望他們會聯繫我」
    • 一個反主流觀點:「不要只是送出去... 那是個糟糕的贈品」
    • 一個內行人才知道的觀點:「沒人知道的秘訣」
    • 一個客戶成功案例:有名稱的結果(需取得許可)
    • 一個大聲說出的腳本:私訊、推薦請求
    • 一個「從不」:「我從未聽過有人當面拒絕我」
  3. 鉤子必須點明主題。 「沒人知道的秘訣」單獨來看是失敗的,因為觀眾無法判斷它在說什麼。選擇能在第一秒就說出 Reel 主題的台詞。
  4. 同一句台詞不能出現在兩個 Reels 中。 如果鉤子和切入點不同,兩個 Reels 可以共享一個主題。
  5. 分層呈現: A 級列表用於建置,B 級列表作為備用,剩餘的列表則附上原因(例如「Reel 4 的後半段」、「沒有鉤子」、「在鏡頭前說話雜亂無章」)。由使用者挑選。
  6. 當它會開始重複時就停止。 超過那個點之後,每個 Reel 都會削弱其他的 Reel。

每個 Reel 遵循的結構

「鉤子需要鉤住人們,然後 Reel 的其餘部分解釋這個鉤子,解釋價值,也就是最重要的部分。」

  1. 鉤子: 停止滑動並點明主題。
  2. 解釋鉤子: 下一行回答了鉤子提出的問題。如果鉤子是「我沒去健身房就瘦了 20 磅」,接下來就要說是如何做到的。
  3. 核心內容: 實際的價值、操作方法、腳本、證明。這是 Reel 的大部分內容。
  4. 在回報台詞處停止。

一個很棒的鉤子後面跟著無法兌現其承諾的台詞,比一個平淡的鉤子更糟糕,因為觀眾會感覺被釣魚了。從兩個方面來評判每個 Reel:這個鉤子能否讓我停下來,以及它之後的所有內容是否合理並兌現了承諾?

流程檢查:在建置之前,以陌生人的角度閱讀

將每個 Reel 按順序寫成純文字句子,然後以一個從未看過長篇影片的人的角度來閱讀。 之後再查看時間。以下是手動修剪時一直遵循的規則:

  1. 在回報處結束,僅一次。 在最有力的台詞處停止。不要在它之後添加標語或再次強調要點。
  2. 沒有任何內容可以指向 Reel 中未設定的東西。 「我就只是問了他們,他們幾乎總是會分享」如果 Reel 中沒有「問了他們什麼」就必須刪除。檢查每個「她」、「他們」、「這個」、「那個」和「所以」,對照在 Reel 中先前出現的內容。
  3. 故事按故事順序進行。 一個成功案例作為口頭鉤子,但人物名稱稍後才出現,會讓聽眾感到困惑。先說出人物名稱,再說成功案例。文字卡片負責鉤住觀眾。
  4. 一個 Reel 一個想法。 兩個想法加上一個重申,應該變成一個想法加上一個證明。
  5. 剪掉關於說話者的題外話和部分內部的含糊不清。圍繞它們分割部分。
  6. 口頭鉤子要用文字點明主題。 「這也是接觸新社群的絕佳方式」中的「它」未定義。「當你繼續在週日備餐時...」則說明了 Reel 的主題。
  7. 目標為 20-35 秒。 超過 40 秒需要有理由。

剪輯得緊湊:沒有「嗯」,沒有空白音,沒有重新開始。 在建置之前:

  • 領夾式/現場收音:使用 NOISE_DB=-30 執行 segments.py(來自 paper-edit)。 ffmpeg 的 silencedetect 是基於峰值的,而領夾式麥克風上的環境噪音會高於預設的 -36,因此 0.5-0.8 秒的實際停頓在 -36 時無法被偵測到。
  • Whisper 會完全忽略「嗯」,即使有填充詞提示。檢查每個部分的第一個有聲 blob:在該部分第一個真實單詞之前的一個短暫(0.2-0.7 秒)孤立 blob,在 segments.json 中會看起來像是 "text": "", "tokens": [50464, 518]。按一下鍵盤就能發現它:在 reels-built.json 中,將它的 end 提前到 start 之後 0.05 秒。

Individual skills in this repo

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

beachyphotoandfilm-arch/video-skills

Sync camera footage to a separate lapel or field-recorder track (e.g. Tascam DR-10L and similar) and lay it up in DaVinci Resolve. Stitches the recorder's split files, finds each clip's exact place in the audio by matching words then waveforms, cuts one lapel slice per clip so every later skill works unchanged, checks for clipping, and builds a synced timeline in a new Resolve project. Trigger on "sync the lapel", "sync my audio", "line up the recorder", "I used a lav", or any shoot with a separate audio folder (live talks, events, workshops). Run it before paper-edit or video-reels.

beachyphotoandfilm-arch/video-skills

Turn raw talking-head footage into an assembled rough cut inside DaVinci Resolve. Pulls the clips off your footage drive, transcribes them locally, removes failed takes, restarts, asides and dead air, then creates a new Resolve project with two paper-edit timelines ready for your fine trim. Trigger on "paper edit", "cut my raw footage", "make a rough cut", "clean up this video", or when the user points at a folder of raw camera files for a YouTube video.

beachyphotoandfilm-arch/video-skills

Design a unique Instagram cover for each reel in your house style. Reads what the reel is about, writes a short hook headline, picks one of your own photos from a tagged photo library, lays it out like your existing covers, and proofs it in grid view at phone size. Renders locally, never with AI image generation. Can be called by a scheduling skill before reels are scheduled. Trigger on "make covers", "reel covers", "cover photo for this reel", "design the IG covers".

beachyphotoandfilm-arch/video-skills

Render finished reels out of DaVinci Resolve, write captions in the creator's voice, attach a custom Instagram cover from reel-covers, and schedule them to Instagram, TikTok and YouTube Shorts through Metricool. Handles the Drive upload hop, collision checks against the existing calendar, and cleanup. Trigger on "schedule the reels", "post these", "put these on the calendar", or after reels are approved.

beachyphotoandfilm-arch/video-skills

Build animated brand overlays (motion graphics) for a talking-head video, timed to the speaker's exact words, plus a DaVinci Resolve import file. House style is in-scene type (text beside and behind the speaker's head) plus diagrams. Transcribes the rough cut locally, picks the moments, renders transparent .mov clips, and writes an FCPXML that drops every clip onto the timeline already in position. Trigger on "make animations for this video", "add overlays/motion graphics", "animate this", "b-roll graphics for my YouTube video", or when the user shares a rough cut and asks for graphics.

beachyphotoandfilm-arch/video-skills

Design YouTube thumbnails and titles for a talking-head video. Pulls graded full-res frames out of the raw footage, renders brand-styled variants in two proven layouts, and proofs them at phone size where the click actually gets decided. Trigger on "make thumbnails", "thumbnail for this video", "title and thumbnail", or after a video is cut.

beachyphotoandfilm-arch/video-skills

Run the whole YouTube video pipeline end to end, one stage at a time, stopping for the creator's approval at every gate. Paper edit, punch-ins, reels, reel covers, scheduling the reels, overlays, thumbnail and title, then scheduling the long-form video, all through Metricool. Keeps state per video so you can stop anywhere and pick up later. Trigger on "/youtube", "let's do the whole video", "run the video pipeline", "continue the <name> video", or when handed raw footage for a YouTube video.

相關技能