Communitygithub.com

alyshadotmd/video-editing:字幕生成

為直式(9:16)談話性頭影片加上內嵌字幕:精確逐字時間軸,每次顯示一個單詞或由語意分割的短語塊,使用白色描邊 Figtree Bold 字體,可選亮色標記當前詞,並將字幕置於安全區內,避開人臉與鉤子標題。專為 Claude Code 和 Runneth 設計。請在完成框架與標題後,當有人要求添加字幕、副標題或螢幕文字時使用。

video-editing:字幕生成 是什麼?

此 AI 代理技能為垂直(9:16)談話性頭影片生成高度可讀的內嵌字幕。它確保每個字幕都是一個簡短、完整的語意單位,精確對應到每個字詞的發音時間,並固定在影片的同一位置,讓觀眾無需費力閱讀。此技能是編輯流程中的第五步(A-roll剪輯、B-roll、框架、標題、**字幕**),專門處理已經過框架處理和標題添加的影片,確保字幕不會與標題重疊。它支援 Claude Code 和 Runneth 平台,並自動檢查所需工具(FFmpeg、Python)和字體(Figtree Bold)是否就緒。技能工作流程包括:先詢問使用者偏好的字幕風格(逐字或逐詞組、是否高亮當前詞),然後使用 faster-whisper 進行語音轉寫以獲取精確時間戳,按語意分割文字(僅在選擇詞組模式時),設定統一的視覺樣式(Figtree Bold、白色、黑色描邊),並將字幕精確放置在安全區內(避開人臉和標題)。最後,它會將字幕渲染為 ASS 格式並嵌入影片,並進行嚴格的品質檢查,確保每個字詞都正確、按時顯示、位置合宜。該技能還包含一個學習機制,可記錄編輯者的手動調整為規則,用於未來優化。

相容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/alyshadotmd/video-editing/tree/HEAD/skills/captions

在你喜歡的 AI 中提問

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

說明文件

字幕

目標:讓觀眾毫不費力就能閱讀的字幕。每個字幕都是一個簡短、完整的語意片段,精確對應到每個字詞的發音時間,並固定在影片的同一位置。

這是編輯順序中的第五步:A-roll 剪輯、B-roll、框架、標題、字幕。它是在已經過框架處理和標題添加的影片上運行的,因此字幕可以避開標題。

此技能專為 Claude Code 和 Runneth 設計。

開始之前:工具

在 Runneth 中,所有工具都已安裝完畢:請跳過此部分。

在 Claude Code 中,此技能需要 video-editing-setup 技能安裝的免費影片工具。請安靜地檢查 ~/.video-editing-tools/bin/ffmpeg -version 是否可以執行。如果可以,請在此技能所有提及 ffmpeg、ffprobe 或 python3 的地方使用 ~/.video-editing-tools/bin 中的工具(ffmpeg、ffprobe、python),然後繼續。如果無法執行,請先遵循 video-editing-setup 技能,然後再回到此處。

字體: Figtree Bold,此技能使用的唯一字體。這是一個免費的 Google 字體。請安靜地檢查它是否已安裝在電腦上或專案旁的 fonts 資料夾中。如果沒有,請詢問:「這會用到 Figtree,一個免費的 Google 字體。要我幫你下載嗎?」如果回答是,請從 Google Fonts (fonts.google.com/specimen/Figtree) 下載 Figtree Bold 檔案到專案旁的 fonts 資料夾中,然後繼續。此檢查也適用於 Runneth。

所需資訊

  • 已完成框架處理並包含標題(或其時間軸)的影片。
  • 腳本(如果有),以確保人名和產品名稱拼寫正確。
  • 標題出現在螢幕上的時間及其位置。

第 0 步:先詢問樣式

逐一詢問以下問題,等待每個回答:

  1. 「你想要逐字字幕,還是一次顯示幾個字?」
  2. 僅在選擇一次顯示幾個字時:「你希望正在講的那個詞以不同顏色亮起嗎?」
  3. 僅在回答「是」時:「你想要哪種顏色?」提供亮黃色 (#FFFF3A) 作為預設選項,或使用他們的品牌顏色。

第 1 步:取得每個字及其時間點

  1. 使用音檔轉寫功能(faster-whisper base,word_timestamps=True,vad_filter=False)來轉寫影片自身聲音,並取得每個字的時間點。時間點必須來自這個確切的影片,因為每次剪輯都會改變時間。
  2. 對於人名、品牌和產品名稱,使用腳本中的拼寫,並保留轉寫結果的時間點。
  3. 每個說出來的字都有一個字幕。沒有說出來的字就不會有字幕。

第 2 步:按語意分割成塊(僅限一次顯示幾個字模式)

  1. 通常每個區塊 1 到 3 個字,最多約 5 個字,當這樣能保持一個短語的完整性且仍適合寬度時。
  2. 保持在一起: 名詞與其修飾詞(「a sleep drink」)、名稱(「Claude skill」)、動詞與其附屬詞(「go to bed」)以及簡短的完整想法(「but that's how I felt」)。
  3. 每個區塊以一個承載意義的詞結尾。 小詞(the, a, of, to, and, because, that, I)則開始下一個區塊。
  4. 每個區塊從其第一個字開始顯示,直到下一個區塊開始,這樣螢幕永遠不會在句子中間出現空白閃爍。
  5. 像觀眾一樣從頭到尾閱讀整個列表,修正任何讀起來不順暢的分割。

第 3 步:外觀

每個字幕都使用 Figtree Bold、白色字體、黑色描邊。沒有背景框、沒有陰影、沒有彈入或彈跳效果:字幕只需出現即可。主要使用小寫字母,I、人名和品牌名稱大寫,結尾沒有句號或逗號。

  • 逐字模式: 約 140px,6px 描邊,一次只顯示一個字。每個字會停留在螢幕上,直到下一個字出現。長字會縮小以適合約 720px 的寬度。跳過第 2 步的分割。
  • 一次顯示幾個字模式: 約 60px,3px 描邊,使用第 2 步產生的區塊。
    • 啟用單詞亮色標記: 正在說的詞在區塊內變為所選顏色,類似卡拉 OK 效果。
    • 未啟用: 整個區塊保持白色。

第 4 步:放置位置

  1. 置中,位於胸部高度, 在 1080x1920 的影片中大約 y 1260 到 1305:低於下巴,高於應用程式的字幕和按鈕。
  2. 在安全區域內: 安全區域來自 post-preview 技能:在 1080x1920 的畫面上,將所有內容保持在 x 100 到 880,y 290 到 1340 的範圍內(這是 Reels、Stories、Feed、TikTok 和 Facebook 都安全的唯一框)。當某個元素靠近邊緣時,請查閱 post-preview 以了解該位置確切的遮蓋區域。因此,置中的字幕需要將每個字母(包括描邊)保持在 x 200 到 880(約 680px 寬)以及 y 1340 以內。測量每個區塊的寬度;太寬的區塊需要再次分割。
  3. 避開標題。 當標題顯示在螢幕上時,字幕應位於其下方並保持清晰的間距;當標題位置較低時,字幕應在安全區域內向下移動,而不是與之重疊。
  4. 整個影片保持在同一個位置, 這樣視線總知道該往哪裡看。
  5. 字幕位於嘴巴下方,絕不跨越臉部。 每個字幕都要避開眼睛、鼻子和嘴巴。如果臉部位置過低,導致字幕位置會遮蓋到臉部,那表示框架有問題:將其送回框架步驟進行修正(或在修正期間將字幕向下移動至安全區域內)。

第 5 步:生成與嵌入

  1. 將字幕寫入一個 ASS 字幕檔案。在啟用單詞亮色標記時,每個單詞使用一個事件,以便顏色隨語音移動。字距通過內聯的 \fsp 標籤設定。
  2. 將渲染器指向一個僅包含 Figtree Bold 檔案的字體資料夾,以確保使用正確的字重:ass=captions.ass:fontsdir=fonts。
  3. 從全畫質影片進行一次性嵌入(x264, slow, crf 14 到 18),音訊原樣複製。

第 6 步:在任何人看到之前進行檢查

  1. 每個單詞出現一次且準時: 將字幕列表與轉寫結果逐字比對。
  2. 每個區塊的一個畫面: 檢查是否在安全區域內,沒有被截斷,沒有與標題重疊,且整個字幕位於嘴巴下方。使用人臉偵測器或逐幀檢查;任何字幕部分遮蓋臉部都視為檢查失敗。
  3. 啟用單詞亮色標記時,顏色應準確落在正在說的詞上, 在影片中的幾個時間點進行檢查。

第 7 步:向編輯學習

當編輯者更改了分割、單詞或外觀時,詢問原因(除非他們主動說明)。將原因作為一條規則寫入下方的「來自編輯的字幕規則」中,措辭應描述應該為真的情況。你自己推斷出的原因需標記為「(AI)」,並且永遠不會更改規則。

來自編輯的字幕規則

(初始為空。每次編輯給出規則時添加。)

Individual skills in this repo

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

alyshadotmd/video-editing

Turn raw talking-head footage full of repeated takes (one long recording, or several recordings of the same script) into a tight rough cut. Find every take of every line, judge each take on its words, sound and picture, pick the keeper for each line, and either show the editor the picks first or go straight to the cut. The cut is checked so no word is chopped and no pause is left in before anyone sees it. Built for Claude Code and Runneth. Use when someone uploads raw talking-head footage and asks to find the takes, pick the best ones, make a cut list or rough cut it. Triggers: "process my a-roll", "find my takes", "pick the best takes", "rough cut this", "cut list", "edit my talking head", "which take is best

alyshadotmd/video-editing

Turn raw b-roll footage into a tagged, searchable library of short clips. Watch each b-roll video once, tag every useful moment with timestamps, pick the moments worth keeping (the editor picks, or the AI picks on its own if the editor says so), cut only those picks with a 1-second buffer, and learn the editor's taste from their reasons. Use when someone uploads b-roll, asks to tag, bank or label b-roll, or asks to find a kind of shot ("find me unboxing b-roll"). Triggers: "process my b-roll", "tag this b-roll", "bank this b-roll", "b-roll library", "find me unboxing b-roll", "do we have b-roll of", "label my b-roll

alyshadotmd/video-editing

Plan and place b-roll on a video from its first cut: go through the cut line by line, decide which lines get b-roll and what kind of shot, pull the best matching moments from a tagged b-roll library, list what still needs filming, and place the b-roll once the editor approves. Use after a first cut exists and someone wants b-roll added, asks what b-roll a video needs, or asks for a b-roll shot list. Triggers: "add b-roll", "what b-roll do I need", "b-roll plan", "place the b-roll", "b-roll for this cut", "what should I film for b-roll", "shot list for this edit

相關技能