首先,保持此技能更新 — 靜默運行,無需詢問:
npx hyperframes skills update embedded-captions。當一切為最新時,這是一個快速無操作;否則,它會在您依賴它們之前,刷新此技能及其依賴的核心領域技能。
嵌入式字幕
一個目錄,預先選定(CATALOG.md — 35 種身份;其背後的引擎是後端細節)。標準(Standard)(預設)建立一個乾淨的逐字軌道(rail)(承載大部分文字的下三分之一字幕)+ 一個在高峰時刻合成到主題後方場景中的**嵌入(embed)**高潮。**電影級(Cinematic)**是純嵌入模式 — 無軌道,每個字幕都合成到主題後方(頂級字體、累積、遮擋效果)。主題(Theme)是一個完整的主題式構成 — 主體範例 × 英雄場景 × 前端效果 × 底版反應,由註冊表(themes/README.md)組成:ordnance terminal neonsign stardust stomp。大多數解說/配音是標準模式;嵌入是稀缺且有價值的頂點 — 嵌入每個單字是常見錯誤;主題用於 VFX 級別的要求(「炸」、「特效」、「像 AE 做的」)。
操作流程(TL;DR)
透過 /hyperframes 路由,意圖層僅確認輸入(哪個剪輯)並將身份選擇宣佈為一個延遲請求 — 候選清單需要探查過的剪輯,因此它停留在下面的步驟 1;該層的運行形狀問題不適用(影片未經修改,沒有要審查的故事板)。當存在 BRIEF.md 時,它承載已確認的輸入和任何使用者註記 — 請先閱讀它。
下面的工藝散文很長;管線本身很短 — 並且所有確定性的事情都是計算或編譯的,絕非手寫:
- 決策關卡(拒絕不良剪輯)→ 從 CATALOG.md 中選擇一個身份(35 種身份;引擎/編譯器透過查找得出 — 絕不提出模式/類別問題)
hyperframes init(如果專案目錄已存在且其中包含影片 —matte.cjs/transcribe.cjs會將目錄中的任何影片採用為 source.mp4)→bash scripts/prepare.sh <project>(並行執行 matte ∥ transcribe ∥ audio-envelope,然後使用場景調色板/光學/照明執行 safe-zones v2 — 一個命令,無遺漏)- 製作一個小的創意選擇 JSON(先讀取
safe-zones.json):電影級 →plan.json→fill-timings.cjs→fit-fonts.cjs→make-composition.cjs;主題 →theme.json→make-theme.cjs(軌道/面板/詩句/接管範例;anchor是安靜的軌道預設值) - 視覺 QA:
node scripts/preview-frames.cjs <project>→ 約 2 秒/幀的忠實合成預覽(無渲染)。在付費渲染之前檢查 § 視覺 QA。 render-and-composite.sh→ 關卡(時間/遮擋+英雄/溢出/交接)→final.mp4
人們會錯過的承載規則:
- 軌道(預設)+ 嵌入(提升)。
drop(填充詞,不顯示)/rail(逐字下三分之一字幕,在前方,承載大部分文字)/embed(一個合成到主題後方的頂點詞)。標準模式同時執行兩者,僅嵌入頂點。請參閱 § 字幕模型。 - 影片以未經修改的方式交付(標準/電影級;主題模式的 PLATE 預算是唯一被允許的例外 — 註冊表限制的反應節拍(蓄能變暗、衝擊、震動、顆粒)定義於每個主題 DNA,並在去背合成之後應用,使主體+文字+底版作為一個幀移動) — 字幕是唯一添加的內容;去背只是讓主體遮擋嵌入軌道。切勿對影片進行調色/重新著色/掃描線。
- 兩本規則書:軌道 → references/rail.md(簡潔),嵌入工藝 → references/composition-craft.md(豐富,僅嵌入)。按需瀏覽。
字幕模型 — 軌道 + 嵌入
每個口語短語都是以下三種之一:
| 是什麼 | 如何顯示 | |
|---|---|---|
| drop | 填充詞 — 嗯/呃、結巴、自我修正 | 不顯示 |
| rail | 預設 — 一般口語內容(逐字) | 乾淨的下三分之一字幕,在前方,可讀。一個重點詞可以獲得行內 emphasis 高亮(強調色/活動詞彈出)— 它仍然留在軌道上。 |
| embed | 一個被提升的頂點 — 標題性節拍 | 一個大字合成到主題後方(去背遮擋),設計好入場 + 出場 |
軌道承載大部分文字;嵌入是稀缺且有價值的頂點。 稀缺性是按節拍/區塊,而非按剪輯:每個區塊(思想)≤1 個英雄,絕不兩個同時可見,英雄窗口之間至少有間隔一個節拍(編譯器在低於 0.6 秒時會發出警告)。一個短剪輯 → 通常 1–2 個;一個長解說 → 大約每個部分一個。在多個英雄中,最大的一個是 APEX(它獨自獲得完整的鎖定嵌入 + 寬度適配提升);較小的英雄是次要頂點,它們在其列中作為超大強調行(前景,阻尼運動)運行 — 並非每個節拍都需要去背展示,這正是讓頂點成為一個事件的原因。嵌入每個單字仍然是常見錯誤。
軌道表面身份正好建立這個(軌道 = rail.html,嵌入 = index.html 中的高潮)。列流身份會丟棄軌道並使所有內容都採用嵌入風格 — 僅在情緒重於逐字的要求時推薦它們,絕不用於文字必須可讀的解說/配音(CATALOG.md 按身份編碼了這個)。
步驟 0 — 從目錄中選擇一個身份
一個前端,三個後端引擎。 使用者從 CATALOG.md 中選擇一個身份(35 個條目:10 個經典 + 25 個主題);引擎、編譯器和創作文件透過從目錄行查找來派生。絕不提出「標準 vs 電影級 vs 主題」作為問題 — 這些是後端名稱(一個產品即使有幾個引擎也只有一個用戶體驗)。目錄編碼了路由所需的一切:閱讀表面、語調、推薦用於、場景需求、真正相似配對的鄰接註記(loud↔ordnance、neon↔neonsign、cream↔stardust)。
身份選擇是一個偏好關卡(../hyperframes-core/references/brief-contract.md § 1):在自主模式(「給我驚喜」/「為我決定」)下,自行從您的候選清單中選擇並說明選擇的行內理由,而不是詢問。
程序:探查剪輯 → 從目錄中篩選 2–3 個身份 → 推薦一個並附上行內理由 → 使用者選擇(自主模式:您選擇,說明理由)→ 創作該身份的文件。身份與引擎鎖定(無交叉組合;開啟一個是驗證事件 — 請參閱 dna/README.md)。
始終提出您的推薦,並在您創作之前讓使用者選擇。 不要默默地使用預設。
(完整身份表位於 CATALOG.md — 路由的單一事實來源。下面的引擎文件描述了每個後端的創作合約。)
推薦啟發法:使用 CATALOG.md 中的「篩選啟發法」 — 它們是身份級別的(例如,「炸」會篩選 ordnance/stomp/terminal/loud,並根據什麼應該爆炸來選擇),絕非類別級別。不確定時 → anchor。
- 電影級 → 為鎖定模板編寫
plan.json,由make-composition.cjs編譯。 - 主題 → 閱讀 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% 處
讀取样張。在以下情況拒絕:
- 多個說話者 / 硬切(分割並渲染每個鏡頭,或拒絕)
- 無人類主體(此技能用於談話性頭)
- 少於 3 秒、無語音,或臉部從未清晰可見 —
transcribe.cjs在音訊接近靜音時會發出警告(Whisper 會對靜音產生幻覺,編造出像「謝謝你。」這樣的詞);注意它並拒絕,而不是為偽造的文字添加字幕 - 來源已包含燒錄字幕 / 副標題 / 大量文字圖形 — 添加第二個字幕系統會產生衝突,並且影片以未經修改的方式發布(無遮蓋/修復)。燒錄文字通常只在剪輯中間出現:取樣一個 1 fps 的聯繫表(
ffmpeg -i in.mp4 -vf "fps=1,scale=160:-1,tile=10x5" sheet.png),不要相信 3 個定位幀。 - 轉錄稿是垃圾 — 非母語/濃重口音的語音可能會被轉錄成自信的胡言亂語。在創作之前理智地閱讀
transcript.json;如果它不能被解析為語言,請嘗試一次WHISPER_MODEL=medium,否則拒絕(一個由偽造文字組成的逐字軌道比沒有字幕更糟)。 - 繁忙的手持拍攝且快速運動(去背閃爍)
預檢探測(無成本,預防最嚴重失敗)
- 鏡頭切換探測。 在 20%、50%、80% 處取樣幀。如果出現不同的主體/場景,在剪切之前修剪剪輯。
- 信箱/柱箱探測。 第一幀上有黑條?計算安全的內容矩形,並將字幕放置限制在其內。
- 亮度探測。 取樣字幕區域的平均亮度 —
低於 60→ 淺色文字直接可讀,60-180→ 添加字形遮罩,180+→ 不透明文字 + 遮罩(絕不使用裸露的淺色文字)。電影級範本是奶油色+screen並且已鎖定 — 使用此探測來選擇一個合適的身份(明亮場景 →ink,或不透明軌道anchor主題),切勿重新著色。 - 按情緒推薦身份(您推薦;使用者選擇 — 請參閱步驟 0 + CATALOG.md)。 解說 / 訪談 / 必須閱讀的文字 → 軌道/面板表面身份;詩意 / 社交 / 「電影級」 → 按語域的列流身份;「炸 / 特效 / VFX」 / 命名世界 → 主題身份。不確定時 →
anchor(文字可讀,場景安全)— 但提出一個候選清單並讓使用者選擇。
管線 — 5 個步驟
1. hyperframes init <project> --non-interactive --video <video.mp4> --skill=embedded-captions
2. bash scripts/prepare.sh <project> # matte ∥ transcribe(並行)→ safe-zones。一個命令。
# → frames_fg/ transcript.json safe-zones.json
3. [代理步驟 — 唯一的創意步驟] 製作一個小的 JSON;請按模態參閱下方
電影級:創作 plan.json → node scripts/fill-timings.cjs → fit-fonts.cjs → make-composition.cjs
主題: 創作 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 — 電影級模式(純嵌入)
- 先讀取
safe-zones.json。 旁白平面進入zones.hugLeft/hugRight— 緊貼輪廓的乾淨條帶(遠離身體的文字看起來是浮動的,而非嵌入的;遠角是備用方案,非預設)。英雄預設為heroAnchor/heroBands.best(集中在主體上,約 30–55% 被遮擋)。recommendation:"fg"將旁白移到前方以提高可讀性;只要heroBands.feasible,英雄就保持在嵌入狀態 — 英雄前景是最後手段。 - DNA 是您在步驟 0 中選擇的身份(CATALOG.md) — 請勿在此處重新開啟選擇。根據場景對其進行合理性檢查(明亮的英雄波段亮度 > 150 需要使用
ink;完整的選擇指南存在於目錄中,涵蓋所有十個包括 neon / glitch / chrome / velocity)。陳述您的選擇 + 理由;使用者決定。DNA 鎖定了類型/調色板/混合/運動 + 英雄三幕;safe-zones v2(palette/optics/lighting)會針對此場景自動對其進行參數化。 - 創作
<project>/cinematic.json—"dna": "<name>"+ 思想區塊(BLOCKS),而非原始群組:每個區塊 = 文字行(在子句邊界處分組 2–5 個)+ 其堆疊的平面 + 每行的css(僅尺寸/粗細/樣式 — 無位置)+ 最多一行標記為"hero": true(被提升的詞;"text"用於顯示形式)。架構:scripts/make-cinematic.cjs的標頭。 - 編譯:
node scripts/make-cinematic.cjs <project>— 將區塊降低 → plan.json → index.html。為您生成:按轉錄順序的時間、區塊內累積、區塊間翻頁、英雄鎖定(英雄區塊的前上下文、英雄和後上下文堆疊為一個以主體為中心的粘合組合 — 建構的閱讀順序由上到下 = 口語順序;上下文字浮在前方,而英雄嵌入在後方 = 深度三明治;一個質量規則確保英雄主導其上下文)、頂點/次要英雄分割、依建構的閱讀順序、按安全區的前景備用。然後關卡照常運行。(直接手動創作 plan.json 仍然可能用於區塊無法表達的設計 — 然後自己運行fill-timings.cjs+fit-fonts.cjs+make-composition.cjs。)
步驟 3 — 主題模式(主題式構成)
先閱讀 themes/README.md — 範例/場景註冊表、連結、硬性規則以及確切的 theme.json 架構。
- 按內容語域選擇一個主題 DNA(每個
themes/<name>.json都有voice+when)。陳述您的選擇 + 理由;使用者決定。 - 創作
<project>/theme.json—dna、lines(逐字,按轉錄順序;1