
talking-head-recut
熱門包裝現有的口播(Talking-Head)、訪談或 Podcast 影片,依據逐字稿時間軸,在播放的影片上疊加精心設計的定時【視覺覆疊圖卡】——包含標題、下三分之一圖卡(Lower-Thirds)、數據強調、引用金句、側邊欄、子母畫面(PiP)等。原影片會完整播放;Agent 會在對話中直接設計並撰寫每張圖卡的 HTML,最後透過 hyperframes 渲染為 MP4。當使用者要求添加視覺覆疊、螢幕動態圖卡 / 下三分之一圖卡 / 數據強調 / 動態標題、或表達「幫我的影片包裝/美化」、「添加覆疊圖卡/視覺圖卡」,以及希望對現有影片進行 AI 視覺包裝時使用。請勿用於純字幕(→ 請用 embedded-captions)或從頭創作影片(→ 請用相關影片生成工作流);若不確定該用覆疊圖卡還是字幕,請參閱 /hyperframes。
包裝現有的口播(Talking-Head)、訪談或 Podcast 影片,依據逐字稿時間軸,在播放的影片上疊加精心設計的定時【視覺覆疊圖卡】——包含標題、下三分之一圖卡(Lower-Thirds)、數據強調、引用金句、側邊欄、子母畫面(PiP)等。原影片會完整播放;Agent 會在對話中直接設計並撰寫每張圖卡的 HTML,最後透過 hyperframes 渲染為 MP4。當使用者要求添加視覺覆疊、螢幕動態圖卡 / 下三分之一圖卡 / 數據強調 / 動態標題、或表達「幫我的影片包裝/美化」、「添加覆疊圖卡/視覺圖卡」,以及希望對現有影片進行 AI 視覺包裝時使用。請勿用於純字幕(→ 請用 embedded-captions)或從頭創作影片(→ 請用相關影片生成工作流);若不確定該用覆疊圖卡還是字幕,請參閱 /hyperframes。
Talking Head Recut
Talking Head Recut 針對能夠完整播放的本地影片,依據演講/對談內容的時間軸,在其上疊加一系列經過設計且定時出現的視覺圖卡——包括標題、下三分之一圖卡(Lower-Thirds)、數據強調、引用金句、側邊欄、子母畫面(Picture-in-Picture)。Agent 會直接在對話中設計圖卡(包含時間點與內容)並手寫每張圖卡的 HTML 程式碼,隨後組裝成單一的 HTML 組合,並透過 hyperframes 將其渲染導出為 MP4。本流程沒有固定的原型列表或預設圖卡結構——所有覆疊圖卡完全依據逐字稿的實際內容量身定制。
開始製作前,請先確認路線。 本 Skill 適用於對現有的口播/訪談影片片段進行視覺圖卡包裝(如標題、下三分之一圖卡/lower-thirds、數據強調、引用金句、側邊圖卡、子母畫面)。如果使用者想要的是純字幕(將口播語音轉為文字字幕)→ 請使用
/embedded-captions;如果只需要單一簡短無配音元件(例如單一 Logo 片頭/下三分之一壓條)→ 請使用/motion-graphics。原始影片片段會保持原樣播放——對影片進行重新剪輯、調色、裁切、調整順序或調整音訊屬於 NLE 剪輯範疇,不在本 Skill 範圍內。如果需要從 URL / 主題 / PR 從頭生成影片 → 請使用影片創作工作流(Creation Workflows)。若不確定該選圖卡包裝還是純字幕?請先閱讀/hyperframes。
embedded-captions的視覺包裝姊妹篇。 字幕是把口播語音呈現為可讀的下方字幕;而本 Skill 是在播放的影片上方疊加設計好的視覺圖卡。純字幕 →embedded-captions。從頭製作影片 → 影片創作工作流(product-launch-video/faceless-explainer/ …)。
工作目錄中可供檢視的中間檔案:
metadata.json— 影片時長(duration)/ 寬度(width)/ 高度(height)/ 影格率(fps)audio.mp3— 抽出的音訊transcript.json— 扁平的單字陣列[{ text, start, end }, …](Whisper 格式;無segments,無words包裹層)storyboard.json— 輕量級圖卡大綱(Agent 的規劃藍圖)public/cards/card-XX.html— 每張圖卡獨立的 HTML 碎片public/index.html— 最終組裝完成的組合文件output.mp4— 渲染完成的影片
CLI 路線解析
# hyperframes — 語音轉寫(本地 Whisper)+ 將組裝好的 HTML 渲染為 MP4
npx hyperframes --help
本 Skill 完全基於 hyperframes CLI 以及系統的 ffmpeg / ffprobe 運作。
語音轉寫使用的是本地 Whisper(透過 hyperframes transcribe),不需要第三方服務、API Key,也不會遇到限流問題。
工作流程
1. 檢查環境
npx hyperframes doctor # 檢查 ffmpeg、Headless 瀏覽器及渲染依賴
# 確認內建資源:
ls "<SKILL_DIR>/assets/fonts" "<SKILL_DIR>/assets/vendor/gsap.min.js"
必要條件:
ffmpeg/ffprobe(系統環境)<SKILL_DIR>/assets/fonts/*.woff2,<SKILL_DIR>/assets/vendor/gsap.min.js(打包在本 Skill 內部,將在步驟 9 複製到工作目錄)
語音轉寫無需金鑰——hyperframes transcribe 會在本地執行 Whisper(步驟 4)。
在 macOS 上強烈建議使用以下設定來執行 hyperframes render:
export PRODUCER_BROWSER_GPU_MODE=hardware
2. 建立工作目錄
所有產出物皆存放於 videos/<project-name>/ 下——此為所有影片工作流(product-launch-video / faceless-explainer / pr-to-video)的統一規範。請保持工作區根目錄為當前的執行目錄(cwd),所有產出的檔案都會寫入在此子目錄下。
VIDEO_PATH="/absolute/path/input.mp4"
WORK_DIR="videos/$(basename "$VIDEO_PATH" | sed 's/\.[^.]*$//')"
mkdir -p "$WORK_DIR"
3. 提取音訊與元資料
# 元資料 — 時長 / 寬度 / 高度 / fps
ffprobe -v error -select_streams v:0 \
-show_entries stream=width,height,r_frame_rate \
-show_entries format=duration -of json "$VIDEO_PATH" > "$WORK_DIR/metadata.json"
# 音訊
ffmpeg -y -i "$VIDEO_PATH" -vn -acodec libmp3lame -q:a 2 "$WORK_DIR/audio.mp3"
產出:metadata.json(讀取 width/height/duration;fps 為計算後的 r_frame_rate 分數值,例如 30000/1001 → 29.97)+ audio.mp3。
4. 語音轉寫
npx hyperframes transcribe "$WORK_DIR/audio.mp3" -d "$WORK_DIR" --json --model small.en
本地 Whisper — 無需 API 金鑰、無代理伺服器、不受速率限制。會在工作目錄寫入單字層級的 transcript.json(包含單字 text + start / end 時間戳記)。
在步驟 6 中讀取此檔案以獲取驅動圖卡時間軸的單字/句子時間點;如果需要段落層級的區塊,請根據標點符號或停頓自行將單字組合成分句。
限制在媒體總時長內。 Whisper 返回的最後一個單字的 end 時間可能會稍微超出影片實際長度——請務必將每張圖卡的 endSec 與 composition.durationSeconds 截斷/限制在 metadata.json 的總時長內,否則渲染結果結尾會出現一段黑畫面。
5. 修正逐字稿
transcript.json 是一個扁平的單字物件陣列 — [{ "text": "...", "start": s, "end": s }, …](沒有 segments 陣列,沒有 words 包裹層;每個單字的 key 為 text)。請讀取並修正明顯的 ASR(自動語音辨識)錯誤:
- 同音異字、產品名稱、專業術語、標點符號
- 原地修改單字的
text;保留其start/end時間戳記 - 沒有預先分組好的
segments陣列 — 當你需要段落層級的區塊來進行圖卡時間規劃時,請自行將單字組合成分句(在句末標點或停頓處進行切分)
6. 草擬輕量級分鏡腳本(在對話中進行)
不涉及任何 CLI 機器指令。 讀取 transcript.json + metadata.json 並直接設計圖卡。storyboard.json 是 Agent 內部的規劃藍圖——沒有 CLI 命令會直接讀取它;它的存在是為了讓你在撰寫每張圖卡的 HTML 之前,能夠清晰思考時間軸與內容。請保持格式與下例一致,以便此大綱能在步驟 9 中驅動組合文件的撰寫:
{
"schemaVersion": 3,
"composition": {
"fps": 30,
"width": 1080,
"height": 1920,
"durationSeconds": 121.2,
"layout": "portrait",
"themeId": "noir",
"seed": 42
},
"videoTrack": {
"sourcePath": "input-video.mp4",
"startSec": 0,
"endSec": 121.2,
"bounds": { "x": 0, "y": 0, "width": 1080, "height": 1920 }
},
"subtitles": { "enabled": false },
"cards": [
{
"id": "card-01",
"intent": "Hook with the speaker's anxious midnight question",
"startSec": 0.5,
"endSec": 13.0,
"accentIndex": 0,
"zone": "fullscreen",
"contentHints": {
"kicker": "AN HONEST QUESTION",
"title": "The soul-searching question at 11 PM",
"detail": "Client's 60-second voice message: 'If the RMB appreciates, does that mean my USD policy is a terrible loss?'"
}
}
]
}
必要的 Card 欄位:
| 欄位 | 型態 | 用途 |
|---|---|---|
id |
string | 用在圖卡 HTML 與 GSAP 選擇器中的固定 ID |
intent |
string | 自然語言描述;提供給圖卡合成使用 |
startSec / endSec |
number | 以秒為單位的時間(endSec > startSec) |
accentIndex |
0 | 1 | 2 | 3 | 4 | 指定此圖卡套用 5 種主題強調色中的哪一種 |
zone |
enum(見下方) | 圖卡在畫布上的展示區域 |
contentHints |
object | 自由包容物件;Agent 在此放置前導標題(kicker)、主標題(title)、細節(detail)、數據(data)、引用(quote) |
archetype(選填) |
string | 自由標註的標籤,用來標記圖卡模式;未指定 = 自由形式(預設) |
transition(選填) |
enum: cut | fade | slide | wipe |
聲明式的圖卡間切換過渡 |
五種 zone 區域值:
| zone 區域 | 解析後的邊界 (bounds) | 使用時機 |
|---|---|---|
fullscreen |
覆蓋整個畫布 | 重點高光時刻、大數字、核心金句 |
whiteboard-area |
內縮 40px 邊距(或直式高度的 45%) | 密集數據 / 帶有標註的內容 |
lower-third |
底部 30% 區域壓條 | 在可見影片上方呈現標註說明 |
side-panel |
右側 42%(橫式)或底部 40%(直式) | 一側放置數據,另一側保留影片 |
video-overlay |
全畫布,主要預留給半透明圖卡 | 在全螢幕影片上方顯示浮雕覆疊標註 |
在步驟 9 組裝組合檔案時,請按照上表將每張圖卡的 zone 解析為圖卡容器 wrapper 上的像素邊界。
影片邊界在組合層級(videoTrack.bounds)設定一次;若要使影片看起來像是在「不同圖卡間移動」,請在組合檔案的 <script> 中針對 #video-wrap 撰寫 GSAP 補間動畫(tweens)(詳見步驟 9)。
沒有預設的圖卡角色,沒有預設的敘事架構。 圖卡的形式完全由影片實際講的內容決定——可以是全金句引用,也可以是全數據展示;可以以數字開場,也可以以故事開場。讓逐字稿本身決定節奏。
要分出多少個精髓要點?——由「時長 + 資訊密度」自動推導。 沒有固定上限。根據影片時長設定基礎節奏,再根據資訊密度進行微調。僅設固定下限:最少 5 張圖卡,以確保短影片也能保有節奏感。
步驟 1 — 依據時長設定基礎節奏(中等密度下的自然「秒數/每張圖卡」):
| 影片時長 | 基礎節奏(每張圖卡的秒數) | 說明 |
|---|---|---|
| < 60秒(短影片/Reel) | 6–8秒 | 短影片觀眾期待快速剪輯與切換 |
| 60秒 – 3分鐘 | 8–12秒 | 一般社群影片節奏 |
| 3 – 10分鐘 | 12–20秒 | 留出呼吸空間;每張圖卡承載更多內容 |
| 10 – 30分鐘 | 20–35秒 | 長影片講座 / 訪談的自然節奏 |
| > 30分鐘 | 30–60秒 | 單元劇、分章節般段落感 |
步驟 2 — 密度乘數(縮放基礎節奏):
| 逐字稿中的特徵訊號 | 乘數 | 效果 |
|---|---|---|
| 高密度 — 很多數字、明確的主張、斷奏快節奏、清單式枚舉、每 1–2 句話就是一個新觀點 | × 0.7 | 剪輯更密集 |





