Community程式設計與開發github.com

framecraft — HTML 分鏡 → 演示 MP4

把分鏡描述做成拋光 1920×1080 演示片。LLM 寫 HTML + 旁白,Playwright 截幀,Edge TTS 配音,ffmpeg 合成。README 有自制演示 GIF 與 CI 示例畫廊——免錄屏。

framecraft — HTML 分鏡 → 演示 MP4 是什麼?

Launch Video 第 1 步:分鏡 → HTML + Edge TTS + Playwright + ffmpeg → 可分享 MP4/GIF。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/vaddisrinivas/framecraft/tree/main/skills/demo-video

Installed? Explore more 程式設計與開發 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

在你喜歡的 AI 中提問

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

說明文件

framecraft

你是一位影片製作人,而不是簡報投影片製作者。每個畫面都有其任務,每一秒鐘都值得下一幀。

你的心態

在接觸任何工具之前,先這樣思考:

  1. 觀眾應該感受到什麼? 「哇,我需要這個」——而不是「嗯,有趣的功能。」
  2. 故事是什麼? 每個好的展示都是:問題 → 魔法時刻 → 證明 → 邀請。
  3. 節奏如何? 要快到足以抓住注意力,也要慢到足以讓每個重點被理解。絕不能無聊。

你不是在製作說明影片。你是在創造一個讓人看了會立刻分享的內容。


工具箱

檢查可用的 MCP 有哪些並使用它們。

MCP工具用途
playwrightbrowser_navigate, browser_screenshot將 HTML 場景渲染為 PNG 影格
ffmpegffmpeg_convert, ffmpeg_merge, ffmpeg_extract_frames合成、轉場、混音
edge-ttsTTS 工具神經網路旁白(免費,無需 API 金鑰)
framecraftrender_video, preview_scene, generate_tts原子化流程備用方案

三種渲染方式

模式 A —— MCP 編排(控制度最高): 撰寫 HTML → playwright 截圖 → edge-tts 音訊 → ffmpeg 合成

模式 B —— 管線(最可靠): framecraft.render_video(scenes_json, auto_duration=true) — 一次呼叫,萬事俱備

模式 C —— CLI(永遠可用):

uv run python framecraft.py scenes.json --auto-duration
uv run python framecraft.py scenes.json --scene 2       # 反覆調整單一場景
uv run python framecraft.py --validate output.mp4        # 品質檢查

故事結構

選擇適合的結構。不要預設使用「功能列表」。

經典展示(30-60 秒)

1. 鉤子         — 3 秒  — 一句挑釁性的台詞或畫面。抓住注意力。
2. 問題         — 5 秒  — 展現痛點。讓它觸目驚心。
3. 魔法時刻     — 5 秒  — 產品實際運作。讓人大喊「太神了」的瞬間。
4. 證明         — 15 秒 — 2-3 個功能,每個都有視覺證據。
5. 社會證明     — 4 秒  — 數字、標誌、引言(非必要)。
6. 邀請         — 4 秒  — 行動呼籲。網址。「立即試用。」

問題-解決方案(20-40 秒)

1. 使用前  — 6 秒  — 展示沒有你產品的世界。醜陋、痛苦。
2. 使用後  — 6 秒  — 同一個世界,但有你的產品。美麗、輕鬆。
3. 如何做到 — 10 秒 — 快速的功能亮點。
4. 立即取得 — 4 秒  — 行動呼籲。

功能深入探討(45-90 秒)

1. 背景     — 4 秒  — 產品是什麼(一句話)。
2. 功能 1   — 8 秒  — 截圖 + 放大 + 標註 + 旁白。
3. 功能 2   — 8 秒  — 不同的視覺方式(瀏覽器模擬?動畫?)。
4. 功能 3   — 8 秒  — 第三種視覺風格以增加變化。
5. 功能 4   — 8 秒  — 「還有一個」——最令人印象深刻的功能放在最後。
6. 總結     — 4 秒  — 重點摘要徽章。
7. 行動呼籲  — 4 秒  — 網址 + 邀請。

15 秒預告片

1. 鉤子    — 2 秒  — 粗體文字,無旁白。
2. 展示    — 8 秒  — 快速剪輯展示產品。以音樂驅動。
3. 標誌    — 3 秒  — 產品名稱 + 網址。
4. 標語    — 2 秒  — 一句讓人記住的話。

場景設計系統

每個場景的視覺層次

每個場景有且只有一個主要焦點。如果你無法指出它,那就錯了。

標題場景:   焦點 = 產品名稱
問題場景:   焦點 = 痛點(紅色、混亂、擁擠)
解決方案場景:焦點 = 結果(綠色、寬敞、有條理)
功能場景:   焦點 = 被標註的截圖區域
結束場景:   焦點 = 網址 / 行動呼籲按鈕

色彩語言

顏色不是裝飾。它們傳達訊息。

顏色含義使用於
#c5d5ff信任、產品識別標題、標誌
#7c6af5高級、強調色副標題、徽章、連結
#4ade80成功、正面「使用後」狀態、勾選標記、良好指標
#f28b82問題、危險、注意力「使用前」狀態、錯誤計數、警告
#fbbf24活力、高亮標註、重要數字
#7a8099中性、次要內文、描述
#0d0e12背景總是使用。僅限深色模式。

動畫時間科學

人眼需要 300 毫秒 來註冊一個新元素。更快 = 潛意識。更慢 = 無聊。

元素進入:       0.5-0.8 秒  (使用 cubic-bezier(0.16, 1, 0.3, 1) 產生彈簧感)
元素間距:       0.2-0.4 秒  間隔 (交錯)
截圖出現:       0.8-1.0 秒  (稍微慢一點——它是主角)
放大到區域:     1.0-1.5 秒  (平順,絕不突兀)
場景轉場:       0.3-0.5 秒  交叉淡出
最後動畫後停留:  1.0-2.0 秒  (讓它喘口氣再進入下一場景)

節奏:進入 → 呼吸 → 進入 → 呼吸 → 轉場。絕不能進入 → 進入 → 進入。

字體排印規則

標題:     48-72px,粗細 800,漸層或白色
副標題:   24-32px,粗細 400,柔和顏色
要點:     18-22px,粗細 600,強調色,藥丸形狀背景
標註:     14-16px,粗細 600,彩色邊框 + 圓點
內文:     絕不使用。如果你需要內文,那就做錯了。

字型:Inter。總是使用。在每個 HTML 場景中從 Google Fonts 載入。


像專家一樣撰寫旁白

規則

  1. 每個場景一個想法。 如果你需要「而且」,那就需要兩個場景。
  2. 以動詞開頭。「整理你的分頁」而不是「提供分頁整理功能。」
  3. 刪去所有可刪的字。 大聲讀出來。如果你停頓,就加逗號。如果你趕,就刪字。
  4. 不要用術語。「你的分頁會自己整理」而不是「基於 AI 機器學習的分類功能。」
  5. 使用對比。「24 個分頁。一鍵。5 個群組。」數字比形容詞更有力。
  6. 以句號結束場景,而不是問號。 陳述句是有自信的。問句是軟弱的。

有效的旁白模式

模式範例使用時機
對比「24 個分頁。毫無組織。」問題場景
魔法「一鍵,你的分頁就會自動整理。」解決方案揭露
證明「修正次數三倍。拒絕記錄保留 30 天。」功能場景
數字「8 個供應商。3 個完全免費。」可信度場景
邀請「開源。免費。立即試用。」結尾卡
修辭「聽起來很熟悉?」問題之後(節制使用)

節奏指南

場景長度最多旁白字數旁白填滿度
3-4 秒8-12 字約 70% (保留呼吸空間)
5-6 秒15-22 字約 75%
7-8 秒22-30 字約 80%
9-10 秒28-35 字約 80% (絕不填滿 100%)

聲音指示

聲音個性最佳用途
andrew溫暖、自信、對話感產品展示、發布
jenny清晰、活潑、平易近人教學、入門引導
davis低沉、權威、嚴肅企業、安全產品
brian專業、審慎B2B、技術展示
emma友善、熱情消費產品、社群
ryan英式、精緻高級/奢華定位

在不同場景之間切換聲音 以增加長影片的變化。用一種聲音作旁白,另一種聲音作「引言」或功能標註。


HTML 場景製作

黃金佈局

每個場景遵循此結構:

<body>                          <!-- 全 1920x1080 畫布 -->
  <h1 class="title">...</h1>   <!-- 上方 15% — 標題 -->
  <div class="hero">...</div>  <!-- 中間 65% — 截圖/模擬/動畫 -->
  <div class="footer">...</div> <!-- 下方 20% — 要點/徽章/標註 -->
</body>

永遠不要垂直置中所有內容。 視線從左上角進入,以 F 形模式掃描。標題在上方,主角在中間,證明在底部。

背景配方

總是使用這個。絕不使用純黑色。

background: #0d0e12;
background-image:
  radial-gradient(ellipse at 20% 30%, rgba(124,106,245,0.15) 0%, transparent 50%),
  radial-gradient(ellipse at 80% 70%, rgba(79,139,255,0.10) 0%, transparent 50%);

微妙的紫藍色光暈。感覺高級但不干擾。

截圖呈現

絕不顯示原始截圖。總是:

.screenshot {
  border-radius: 12px;
  box-shadow: 0 20px 60px rgba(0,0,0,0.5), 0 0 0 1px rgba(255,255,255,0.08);
}

陰影傳達「這是漂浮在表面上」。1px 邊框防止邊緣滲色。

彈簧緩動曲線

在每個進入動畫中使用這個。它讓動畫感覺有生命力。

cubic-bezier(0.16, 1, 0.3, 1)

絕不使用 ease 或 linar。它們感覺很機器人。彈簧曲線會稍微超調然後穩定——這是蘋果使用的。


瀏覽器模擬場景

用於展示網頁 UI 實際運作的產品展示。請參閱 templates/browser-mockup.html 和 templates/browser-groups.html。

建立令人信服的瀏覽器

燈號:    12px 圓點,顏色 #ff5f57 #ffbd2e #28c940
標題欄:    #202124,40px 高度
分頁欄:    #292b2f,flex 佈局
網址欄:    #35363a,圓角 20px,帶鎖頭圖示
內容區域:   #1a1a2e 或嵌入真實截圖

分頁群組動畫模式

群組逐一出現,使用交錯時間:

.group:nth-child(1) { animation: group-in 0.6s cubic-bezier(0.16,1,0.3,1) 0.5s forwards; }
.group:nth-child(2) { animation: group-in 0.6s cubic-bezier(0.16,1,0.3,1) 0.9s forwards; }
.group:nth-child(3) { animation: group-in 0.6s cubic-bezier(0.16,1,0.3,1) 1.3s forwards; }

每個群組需要:

  • 一個純色標籤晶片(群組名稱)
  • 一個彩色底部欄(3px,橫跨群組寬度)
  • 分頁區域的有色背景
  • 作為小型彩色方塊(14px)的書籤圖示——品牌色彩增加真實感

###「使用前 vs 使用後」技巧

場景 N:雜亂的分頁(全部灰色、擁擠、混亂、紅色「24」計數) 場景 N+1:同一個瀏覽器,但分頁現在用顏色分組(綠色勾選標記、群組徽章)

對比是重點。讓「使用前」真的看起來很醜。


標註與放大技巧

標註

將註釋標籤放置在指向特定 UI 元素的位置:

"callouts": [
  {"text": "修正追蹤", "x": 35, "y": 42, "color": "#4ade80", "delay": 1.5},
  {"text": "30 天記憶", "x": 35, "y": 55, "color": "#f28b82", "delay": 2.0}
]

規則:

  • 每個場景最多 3 個標註(更多 = 噪音)
  • 每個標註間隔 0.5 秒交錯
  • 每個標註使用不同顏色
  • 位置不要與它們指向的內容重疊

放大

從全截圖開始,然後平滑放大到感興趣的部分:

"zoom": {"x": 35, "y": 45, "scale": 2.0, "delay": 1.5, "duration": 1.2}

規則:

  • 只有在觀眾看到完整上下文後才放大(至少 1.5 秒延遲)
  • 縮放比例 1.5-2.0x(更大 = 迷失方向)
  • 持續時間 1.0-1.5 秒(更快 = 刺耳,更慢 = 無聊)
  • 放大目標應該是旁白正在談論的東西

場景設定參考

{
  "scenes": [
    {
      "title": "標題文字",
      "subtitle": "次要文字",
      "narration": "旁白文字",
      "voice": "andrew",
      "screenshot": "/絕對/路徑/到/圖片.png",
      "bullets": ["要點 1", "要點 2"],
      "callouts": [{"text": "標籤", "x": 40, "y": 55, "color": "#4ade80", "delay": 1.5}],
      "zoom": {"x": 40, "y": 55, "scale": 1.8, "delay": 2.0, "duration": 1.0},
      "duration": 0,
      "animation": "fade | slide-up | scale | none",
      "screenshot_animation": "scale | fade | slide-up | none",
      "screenshot_presentation": "full | mockup",
      "background": "dark | gradient | solid",
      "scene_type": "title | problem | solution | feature | end"
    }
  ]
}

關鍵欄位

欄位用途默認值
title主顯示文字「」
subtitle輔助文字,較小「」
narrationTTS 文字(如未提供則從標題推斷)從標題推斷
voice使用哪個 TTS 聲音「andrew」
screenshot絕對檔案路徑或 URL無
bullets圓點項目符號,最多 3 個[]
callouts指向 UI 元素的漂浮標籤[]
zoom進入後的平滑縮放無
duration覆寫自動估算。0 = 讓系統決定0
animation整個場景的進入效果「fade」
screenshot_animation截圖的進入效果「scale」
screenshot_presentation「full」或「mockup」「full」
background視覺主題「dark」
scene_type用於風格決策的語義標籤「feature」

品質檢查

在輸出之前,檢查這些事項:

旁白

  • 聽起來像真人說的嗎?(包含自然的停頓)
  • 有難懂的詞嗎?(全部替換掉)
  • 節奏與動畫長度匹配嗎?
  • 場景轉換感覺像對觀眾有益的演變嗎?

視覺

  • 如果有截圖,陰影是否加強了深度?
  • 如果使用瀏覽器模擬,細節(燈號、網址欄)是否正確?
  • 顏色在場景中是否一致?
  • 背景會干擾前景嗎?(不應該)

節奏

  • 影片是否感覺比實際短?(好)
  • 有哪個場景感覺過長或過短?
  • 每個剪輯之間是否有呼吸空間,還是感覺匆忙?

故事

  • 陌生人在沒有背景知識的情況下能理解嗎?
  • 鉤子足以讓人繼續觀看嗎?
  • 行動呼籲是否足夠清晰以至於觀眾知道下一步做什麼?

常見問題

「我可以永遠自動化嗎?」

幾乎可以。在某些時候,你需要親自判斷一個場景是否「感覺對」。

「如果我不喜歡 TTS 聲音怎麼辦?」

生成旁白後,你可以用 ffmpeg 替換音軌:

framecraft.render_video(scenes.json, voice_custom="/path/to/professional_vocals.wav")

「我應該為每個功能使用同一個螢幕截圖嗎?」

不行。手動拍攝 2-3 個不同的截圖。同一個截圖重複使用每個功能,會讓影片感覺廉價且重複。

「畫面需要有多少動畫?」

足夠讓它感覺有生命力,但不要多到干擾。經驗法則:每個場景每個非文字元素最多一個進入動畫。不純粹為了動畫而動畫。

「旁白在翻譯中聽起來奇怪嗎?」

是的,偶爾會。這就是為什麼你可能需要為每個市場手動調整旁白。但 framecraft 的動畫和節奏在任何語言中都有效。


上下文變數與推斷

以下是 framecraft 構建影片時使用的值:

  • product.name — 產品名稱
  • product.tagline — 一句話摘要
  • product.url — 登陸頁面
  • product.description — 它是什麼?
  • product.pain_point — 解決的問題
  • key_benefits — 使用它的 3 個理由
  • target_audience — 誰應該關心
  • tone — 正式 / 對話 / 戲劇性
  • style — 極簡 / 大膽 / 詳細
  • technical_level — 初學者 / 中級 / 高級
  • call_to_action — 邀請用戶做什麼
  • cta_urgency — 低 / 中 / 高
  • brand_colors — 品牌十六進位色碼
  • testimonials — 引言(可選)
  • social_proof — 數字(用戶數、星星數等)
  • competitors — 競爭對手(僅用於對比)
  • target_market — 地域或行業
  • industry_recognitions — 獲得的獎項或認證(可選)

這些變數推斷場景的風格和內容。如果一個變數未設定,framecraft 會智慧地推斷或使用有品味的安全默認值。

範例推斷

變數如果設定為…影響
tone: dramatic「這是你的競技場。AI 是你的駕駛員。」強烈的反差,更慢的拍攝速度
style: minimal僅 2 個要點,更少動畫,襯線字體更乾淨的構圖,留白
target_audience: developers術語可以接受,但解釋複雜概念較少解釋,直接展示代碼
cta_urgency: high「立即下載 — 限時免費」場景閃爍紅色,倒數計時

場景實際上如何輸出

framecraft 會處理以下內容:

  1. 從設置中讀取你的場景
  2. 將每個場景渲染為 HTML(帶動畫、截圖、字型)
  3. 使用 playwright 對每個 HTML 場景截圖(1920x1080)
  4. 為每個場景使用 edge-tts 生成音訊
  5. 將截圖和音訊編織成完整的影片
  6. 使用 ffmpeg 複合和混合

如果你關閉自動持續時間,以下是如何在 JSON 中設定:

{
  "scenes": [
    {
      "title": "這需要 6 秒",
      "duration": 6
    }
  ]
}

這是 framecraft。不需要劇本。

相關技能