Communitygithub.com

courtneymgabrus-star/Video

為現有單一主體的 talking-head 影片添加字幕或隱藏式字幕,無需剪輯原始素材。用於純逐字字幕、內嵌於主體後的電影級字幕、VFX 字幕、「炸/特效/酷炫字幕」,或從 35 種風格目錄中選取指定身分。根據視覺身分而非後端引擎進行路由。預設使用低調的 `anchor` 軌道;僅當使用者明確希望完整電影級處理時,才逐字嵌入。整個工作流程(包括轉錄和主體遮罩)在本地端到端運行;應用前請先分割多鏡頭素材。

Video 是什麼?

這個技能為現有的單一主體 talking-head 影片添加隱藏式字幕(字幕),無需剪輯原始素材。它提供三種模式:Standard(預設)建立一個乾淨的逐字「軌道」(lower-third 字幕)加上一個短暫的「內嵌」高潮,合成到主體後方;Cinematic 則完全使用內嵌方式,無軌道,每個字幕都合成在主體後方,適合英雄級排版;Theme 則從五個註冊主題(ordnance、terminal、neonsign、stardust、stomp)中選取,提供完整的視覺主題構成。工作流程完全在本地端到端運行,包括轉錄(Whisper)、主體遮罩(matting)和渲染(FFmpeg)。路由根據視覺身分(從 35 種身分目錄中挑選)而非後端引擎進行。整個流程包含一個「決策閘門」來拒絕不適合的影片(如多個說話者、無人類主體、已內嵌字幕的素材),以及一個視覺 QA 步驟,以便在完整渲染前預覽合成效果。此技能支援 Claude Code、Cursor、Codex、HyperFrames 等平台,對於需要為影片添加專業、可讀且樣式化的字幕的開發者來說非常有用。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/courtneymgabrus-star/Video/tree/HEAD/.agents/skills/embedded-captions

在你喜歡的 AI 中提問

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

說明文件

外掛安裝: 在執行設定或更新命令前,當此技能位於 HyperFrames 外掛內時,請遵循外掛執行規則。獨立安裝則保留下列更新說明。

首先,保持此技能最新 — 先與使用者確認再執行: npx hyperframes skills update embedded-captions。當一切為最新時會快速無操作;否則它會先更新此技能及其依賴的核心領域技能,然後您才能依賴它們。

嵌入式字幕 (Embedded Captions)

單一目錄,預先選定 (CATALOG.md — 35 種身分;其背後的引擎屬於後端細節)。標準 (Standard)(預設)建立一個乾淨的逐字軌道(承載大部分文字的 lower-third 字幕) + 一個內嵌高潮,在高峰時刻合成到主體_後方_的場景中。電影級 (Cinematic) 是純內嵌 — 無軌道,每個字幕合成在主體後方(英雄級排版、累積、遮擋作為效果)。主題 (Theme) 是完整的題材構成 — 主體典範 × 英雄級場景 × 前景效果 × 介面反應,由註冊表組合而成(參見 themes/README.md):ordnance terminal neonsign stardust stomp。大多數解說 / 旁白使用標準;內嵌是稀缺、值得的巔峰 — 每個字都內嵌是常見錯誤;主題則用於 VFX 級的要求(「炸」、「特效」、「像 AE 做的」)。


執行時先決條件

外掛安裝使用捆綁的、manifest 鎖定的 CLI 來進行遮罩、轉錄和渲染;無需檢出原始碼。本機預覽和字幕測量輔助程式還需要 Sharp、Puppeteer(及其 Chromium 瀏覽器)和 GSAP。將這些安裝在字幕專案中,不要安裝在唯讀的外掛內:

npm install --prefix <project> --save-dev --save-exact [email protected] [email protected] [email protected]

保留專案的 lockfile。如果這些依賴項已存在,請使用其鎖定的版本而非覆蓋它們。Bash 和 FFmpeg/ffprobe 必須在 PATH 中。遮罩和轉錄可能會在首次使用時下載它們自己的模型。

渲染會等待 CLI 成功退出後再進行合成。舊的 HF_TIMEOUT_S shell 看門狗不再使用:一個大的部分檔案並不能證明渲染完成。使用明確的 built-checkout 參數或 HYPERFRAMES_ROOT 來選擇貢獻者 CLI 而非外掛鎖定。正常透過 CLI/終端機取消停滯的渲染;字幕輔助程式不會從進程快照強制終止或恢復渲染。

操作流程 (TL;DR)

透過 /hyperframes 路由,意圖層僅確認輸入(哪個片段)並宣布身分選擇作為延遲詢問 — 候選清單需要探測過的片段,因此它停留在下面的步驟 1;該層的運行形狀問題不適用(素材未經處理,沒有分鏡表需要審查)。當存在 BRIEF.md 時,它會攜帶已確認的輸入和使用者註記 — 請先閱讀它。

下面的工藝散文很長;管線本身很短 — 所有確定性的事物都是計算或編譯的,絕非手寫:

  1. 決策閘門(拒絕不良片段) → 從 CATALOG.md 中選擇一個身分(35 種身分;引擎/編譯器透過查表推導 — 絕不提出模式/類別的問題)
  2. hyperframes init(如果專案目錄已存在且影片在裡面則跳過 — matte.cjs/transcribe.cjs 會將目錄中的任何影片作為 source.mp4) → bash scripts/prepare.sh <project>(遮罩 ∥ 轉錄 ∥ 音訊包絡平行執行,然後是 safe-zones v2 搭配場景調色板/光學/照明 — 一個命令,無遺漏)
  3. 撰寫一個小的創意選擇 JSON(先讀取 safe-zones.json):Cinematic → cinematic.json → make-cinematic.cjs(推導 plan.json 並編譯它);Theme → theme.json → make-theme.cjs(rail/panel/poem/takeover 典範;anchor 是低調的軌道預設值)
  4. 視覺 QA:node scripts/preview-frames.cjs <project> → 約 2 秒/幀的忠實合成預覽(無需渲染)。在支付渲染費用前檢查 § 視覺 QA。
  5. render-and-composite.sh → 閘門(時間/遮擋+英雄/溢位/交接) → final.mp4

人們會遺漏的承載規則:

  • 軌道 (rail)(預設)+ 內嵌 (embed)(晉升)。 drop(填充詞,不顯示) / rail(逐字的 lower-third 字幕,在前景,承載大部分文字) / embed(合成在主體後方的峰值詞)。標準模式兩者都做,僅內嵌高峰。參見 § 字幕模型。
  • 影片以 UNTOUCHED(未經處理)狀態交付(標準/電影級;主題模式的 PLATE 預算是唯一允許的例外 — 每個主題 DNA 定義的、由註冊表控制的反應拍(充電變暗、衝擊、震動、顆粒)在遮罩合成後應用,使主體+文字+介面作為一個畫面移動) — 僅添加字幕;遮罩只是讓主體遮擋內嵌軌道。切勿對素材進行調色/重新著色/掃描線處理。
  • 兩本規則書:軌道 → references/rail.md(簡潔),內嵌工藝 → references/composition-craft.md(豐富,僅內嵌)。按需閱讀。

字幕模型 — 軌道 + 內嵌

每個口語短語是以下三種情況之一:

內容顯示方式
drop填充詞 — 嗯/呃、口吃、自我修正不顯示
rail預設 — 一般口語內容(逐字)乾淨的 lower-third 字幕,在前景,可讀。一個關鍵字可以獲得內聯 emphasis 高亮(強調色 / 活動詞彈出)— 它仍保留在軌道上。
embed晉升的峰值 — 頭條拍一個大字合成在主體後方(遮罩遮擋),有設計的入場和出場

軌道承載大部分文字;內嵌是稀缺、值得的巔峰。 稀缺性是按拍/區塊,而非按片段:每個區塊(思想)≤1 個英雄,從不兩個同時可見,英雄視窗之間至少有一個拍的間隔(編譯器在低於 0.6 秒時會警告)。短的片段 → 通常 1–2 個;長的解說 → 大約每個章節一個。在多個英雄中,最大的一個是 APEX(它獨自獲得完整的鎖定內嵌 + 寬度適應提升);較小的是次要峰值,它們在列中作為超大的強調行(前景,阻尼運動)— 並非每個拍都需要遮罩展示,這正是讓 apex 成為一個事件的原因。逐字內嵌仍然是常見錯誤。

軌道表面身分完全構建這個(軌道 = rail.html,內嵌 = index.html 中的高潮)。列流程身分會放下軌道並使所有內容都成為內嵌風格 — 僅在情緒優先於逐字的情況下推薦它們,切勿用於需要可讀文字的解說 / 旁白(CATALOG.md 中為每個身分編碼了這一點)。


步驟 0 — 從目錄中選擇一個身分

一個前端,三個後端引擎。 使用者從 CATALOG.md 中選擇一個身分(35 個條目:10 個經典 + 25 個主題);引擎、編譯器和撰寫檔案透過從目錄行中查詢推導。絕不將「標準 vs 電影級 vs 主題」作為問題提出 — 這些是後端名稱(一個產品即使有多個引擎也有一個 UX)。目錄編碼了路由所需的一切:閱讀表面、語氣、推薦對象、場景需求、真正相近配對的鄰近註記(loud↔ordnance, neon↔neonsign, cream↔stardust)。

身分選擇是一個偏好閘門(../hyperframes/references/brief-contract.md § 1):在自主模式下(「讓我很驚喜」/「幫我決定」),自行從你的候選清單中選擇並說明單行原因,而不是提問。

程序:探測片段 → 從目錄中選出 2–3 個身分 → 推薦一個並附上單行原因 → 由使用者選擇(自主模式:你選擇,說明原因) → 撰寫該身分的檔案。身分與引擎鎖定(無交叉組合;開啟一個是驗證事件 — 參見 dna/README.md)。

在您撰寫之前,始終提出您的推薦並讓使用者選擇。 不要默默使用預設值。

(完整的身分表位於 CATALOG.md — 路由的唯一真實來源。下面的引擎文件描述了每個後端的撰寫合約。)

CATALOG.md 是這裡的完整答案空間:此工作流程不搜尋 HyperFrames 元件註冊表。 合成工作流程在撰寫命名外觀之前會執行 npx hyperframes catalog;這個則不能。它的引擎是鎖定的編譯器,它們消費 cinematic.json / theme.json 並自行發出合成,因此註冊表項目 — 包括 caption-* 區塊 — 沒有可掛載的地方。註冊表區塊在設計好的畫布上設定文字樣式;此技能透過遮罩將字幕燒錄到某人的素材中。當沒有身分符合要求時,請說明並選擇最接近的,而不是求助於目錄之外。

推薦啟發法:使用 CATALOG.md 中的「Shortlisting heuristics」— 它們是身分層級的(例如「炸」會將 ordnance/stomp/terminal/loud 列入短名單,並根據 WHAT 應該爆炸來選擇),絕不是類別層級。不確定 → anchor。

  • Cinematic → 為鎖定的模板撰寫 cinematic.json,由 make-cinematic.cjs 編譯。
  • Theme → 閱讀 themes/README.md,撰寫 theme.json,執行 scripts/render-theme.sh(編譯 + 渲染 + 介面反應 → final_fx.mp4)。

決策閘門 — 首先執行

在任一模式之前探測影片並分類場景。

ffprobe <video.mp4>                    # 規格
ffmpeg -ss <t> -i <video.mp4> -vframes 1 sample.png   # 在 20/50/80% 處

閱讀樣本。在以下情況拒絕:

  • 多個說話者 / 硬切(分割並渲染每個鏡頭,或拒絕)
  • 無人類主體(此技能專為 talking-head 設計)
  • 少於 3 秒,無語音,或臉部從未清晰可見 — transcribe.cjs 在音訊接近靜音時會發出警告(Whisper 可能會在靜音上幻覺出「Thank you.」之類的詞);注意它並拒絕,而不是為虛構的詞加上字幕
  • 來源已包含內嵌字幕 / 隱藏式字幕 / 大量文字圖形 — 添加第二個字幕系統會衝突,且素材以 UNTOUCHED(未經處理)狀態交付(無覆蓋/修補)。內嵌文字通常僅在片段中間出現:抽樣一個 1fps 接觸表(ffmpeg -i in.mp4 -vf "fps=1,scale=160:-1,tile=10x5" sheet.png),不要只相信 3 個點位幀。
  • 轉錄稿是垃圾 — 非母語/口音重的語音可能被轉錄成自信的亂碼。在撰寫前理智閱讀 transcript.json;如果它無法解析為語言,可嘗試 WHISPER_MODEL=medium 一次,否則拒絕(逐字軌道上出現虛構的詞比沒有字幕更糟)。
  • 手持晃動且快速移動(遮罩會閃爍)

前期探測(無成本,防止最嚴重的失敗)

  1. 鏡頭切探測。 在 20%、50%、80% 處抽樣幀。如果出現不同的主體/場景,在切點之前修剪片段。
  2. Letterbox / pillarbox 探測。 第一幀有黑邊?計算安全的內容矩形並限制字幕放置在其內。
  3. 亮度探測。 對字幕區域的平均亮度進行抽樣 — 低於 60 → 淺色文字可直接閱讀,60-180 → 添加字形遮罩,180+ → 不透明文字 + 遮罩(切勿使用裸露的淺色文字)。電影級模板是 cream+screen 且 LOCKED(鎖定) — 使用此探測來_選擇一個合適的身分_(明亮場景 → ink,或不透明軌道的 anchor 主題),切勿重新著色其中一個。
  4. 根據語氣推薦身分(您推薦;使用者選擇 — 參見步驟 0 + CATALOG.md)。 解說 / 訪談 / 必須閱讀的文字 → 軌道/面板表面身分;詩意 / 社交 / 「電影級」 → 按註冊表的列流程身分;「炸 / 特效 / VFX」 / 命名世界 → 主題身分。不確定時 → anchor(文字可讀,場景安全)— 但提供一個短名單並讓使用者選擇。

管線 — 5 個步驟

1. hyperframes init <project> --non-interactive --video <video.mp4> --skill=embedded-captions
2. bash scripts/prepare.sh <project>       # 遮罩 ∥ 轉錄(平行)→ 安全區域。一個命令。
                                           #   → frames_fg/ transcript.json safe-zones.json
3. [代理步驟 — 唯一的創意步驟] 根據模式撰寫一個小的 JSON;見下方
   Cinematic:撰寫 cinematic.json → node scripts/make-cinematic.cjs <project>
   Theme:     撰寫 theme.json → bash scripts/render-theme.sh <project>   (編譯 + 渲染 + 介面效果)
4. node scripts/preview-frames.cjs <project>   # 約 2 秒/幀的合成預覽 → § 視覺 QA(在渲染之前)
5. bash scripts/render-and-composite.sh <project>  # 閘門 → final.mp4 + history/ 快照
   (主題模式:跳過步驟 3b/5 — render-theme.sh 已經執行編譯 + render-and-composite
    + _postfx.sh;交付物是 final_fx.mp4,final.mp4 是介面反應前的版本)

步驟 1 的 init 會檢查已安裝技能與 GitHub 上的最新版本,並在有任何技能過時時更新全域集合。

步驟 3 因模式而異:

步驟 3 — Cinematic 模式(純內嵌)

  1. 首先讀取 safe-zones.json。 旁白平面放在 zones.hugLeft/hugRight — 緊貼輪廓的乾淨條帶(遠離主體的文字看起來像浮動,而非內嵌;遠角是備用方案,而非預設)。英雄預設為 heroAnchor/heroBands.best(居中在主體_上_,約 30–55% 被遮擋)。recommendation:"fg" 將旁白移到前景以確保可讀性;只要 heroBands.feasible,英雄就保持內嵌 — 英雄前景是最後的手段。
  2. DNA 是您在步驟 0 中選擇的身分

Individual skills in this repo

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

courtneymgabrus-star/Video

Turn arbitrary text — an article, notes, a topic, a brief — into a faceless explainer video: there is no site or footage to capture, so the visuals are invented per scene (typography, abstract graphics, diagrams, data-viz). Use for topic explainers, concept breakdowns, how-tos, listicles. Not a video built from a website (/product-launch-video — promo or tour). Unclear → /hyperframes.

courtneymgabrus-star/Video

Import Figma content into a HyperFrames composition — rendered assets, brand tokens, components, storyboard sections → reconstructed motion (frames read as states, not slides) (REST/CLI), connector-assisted motion when available, and shaders from a connector or native export. Use when the user pastes a figma.com link or asks to bring a Figma design, frame, logo, brand, or animation into a video/composition.

courtneymgabrus-star/Video

Author or edit a custom HyperFrames composition when no specialized workflow fits, or when BRIEF.md sets flow: companion. Use for longer or multi-scene pieces, brand and sizzle reels, montages, static loops, static title cards, footage remixes, and freeform builds. Use motion-graphics instead for a short unnarrated motion-first unit, including an animated title. Route fresh creation through hyperframes before using this skill.

courtneymgabrus-star/Video

All animation knowledge for HyperFrames — atomic motion rules, multi-phase scene blueprints, scene transitions, broader motion-design techniques, AND the seven runtime adapters (GSAP default, plus Lottie, Three.js, Anime.js, CSS keyframes, Web Animations API, TypeGPU). Use for any motion or animation task: pick 2-4 rules and compose, or load a blueprint, or look up runtime-specific API (e.g. GSAP eases / Lottie player / Three.js mixer). Also covers auditing an existing composition's choreography (animation map) and 24 named text-animation effects. HyperFrames-native: single paused timeline, seek-safe, deterministic.

相關技能