Communitygithub.com

exiao/skills

透過自動化瀏覽器互動並擷取影格來建立產品展示影片。當使用者想要錄製 Web 應用程式的示範、逐步操作、產品展示或互動式影片時使用。支援 Playwright CDP 畫面擷取以取得高品質畫面,以及 FFmpeg 進行影片編碼。

skills 是什麼?

這是一個 AI 代理技能,用於透過自動化瀏覽器互動來建立專業的產品展示影片。它定義了一個三步驟工作流程:規劃展示順序、使用 Playwright CDP screencast 錄製影格、以及使用 FFmpeg 編碼成影片。此技能依賴於 OpenClaw 瀏覽器來執行自動化,且需要 FFmpeg 來進行編碼。代理會使用 Playwright 腳本與目標網頁應用程式互動(導航、點擊、懸停、輸入文字),同時將螢幕擷取影像儲存為 JPEG 影格,然後將其組合成影片。它支援多種輸出格式(MP4、GIF、WebM),並包含用於控制幀率、品質和解析度的設定。對於 AI 代理使用者來說,一個關鍵的實作細節是避免在錄製循環中交錯進行影格分析,因為這會快速耗盡 token 限制;應先在一個連續會話中記錄所有影格,然後再進行分析。它也警告不要同時產生多個展示代理來對抗同一個瀏覽器分頁,以避免導航狀態干擾。

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

在你喜歡的 AI 中提問

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

說明文件

Demo Video Creator

透過自動化瀏覽器互動來建立專業的產品展示影片。

概覽

  1. 規劃 展示順序(頁面、互動、時間)
  2. 錄製 使用 Playwright CDP screencast 擷取影格
  3. 編碼 使用 FFmpeg 轉換為影片

快速開始

前提條件

  • OpenClaw 瀏覽器正在執行(browser action=start profile=clawd)
  • 應用程式可透過瀏覽器存取(localhost 或遠端)
  • 已安裝 FFmpeg 以進行編碼

錄製工作流程

  1. 如果尚未執行,請啟動 OpenClaw 瀏覽器
  2. 手動導航到應用程式,或使用 browser action=open
  3. 根據目標應用程式自訂 scripts/record-demo.js
  4. 執行:node scripts/record-demo.js
  5. 編碼:bash scripts/frames-to-video.sh

規劃展示

請參閱 references/demo-planning.md 以獲取以下指引:

  • 建構展示序列
  • 時間與節奏
  • 互動模式
  • 使展示具吸引力的要素

腳本

scripts/record-demo.js

Playwright 範本腳本,具備以下功能:

  • 透過 CDP 連接到 OpenClaw 瀏覽器
  • 啟動 screencast 擷取(JPEG 影格)
  • 執行展示序列(導航、點擊、懸停、輸入)
  • 將影格儲存到輸出目錄

為每個展示進行自訂:

  • DEMO_SEQUENCES 陣列 - 定義頁面和互動
  • OUTPUT_DIR - 儲存影格的位置
  • FRAME_SKIP - 跳過每第 N 個影格(數值越低,影格越多)

scripts/frames-to-video.sh

具有預設設定的 FFmpeg 編碼腳本:

  • mp4 - H.264,品質/大小平衡好(預設)
  • gif - 適用於內嵌的動畫 GIF
  • webm - VP9,較小的檔案

用法:./frames-to-video.sh [input_dir] [output_name] [format]

互動模式

// 導航
await page.goto('http://localhost/dashboard');
await page.waitForTimeout(2000);

// 點擊元素
await page.locator('button:has-text("Create")').click();
await page.waitForTimeout(500);

// 懸停(顯示工具提示、懸停狀態)
await page.locator('.card').first().hover();
await page.waitForTimeout(1000);

// 輸入文字
await page.locator('input[placeholder="Search"]').fill('query');
await page.waitForTimeout(500);

// 按下按鍵
await page.keyboard.press('Enter');
await page.keyboard.press('Escape');

// 滾動
await page.evaluate(() => window.scrollBy(0, 300));

提示

  • 時間設定:頁面載入後停留 2 秒,互動之間停留 0.5-1 秒,顯示結果停留 1.5 秒
  • 影格跳過:使用 3-5 可獲得流暢影片,8-10 可獲得較小檔案
  • 品質:JPEG 品質設定為 85-90 可在大小與清晰度之間取得平衡
  • 解析度:瀏覽器視窗大小決定輸出解析度
  • 循環:GIF 應無縫循環 - 在起始處結束

注意事項

  • 螢幕截圖 vs 影片: 如果使用者只需要查看某個功能,請直接內嵌螢幕截圖,而不是錄製完整影片。先檢查 browser action=tabs profile=clawd — 如果應用程式分頁已開啟,可直接擷取螢幕截圖,無需使用子代理。
  • 內容限制: 大量螢幕截圖的錄製循環會快速消耗內容(200k token 限制)。保持範圍狹窄:先錄製所有影格,再進行分析 — 切勿將影格擷取與分析交錯進行。如果內容空間不足,請將影格寫入磁碟,然後在單獨的階段中進行分析。
  • 平行代理風險: 不要針對同一個瀏覽器分頁同時產生多個展示代理 — 它們會互相干擾彼此的導航狀態。

Individual skills in this repo

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

相關技能