Communitygithub.com

vishalvana-belwo/belwo-claude-skills

錄製有旁白解說的網頁應用程式操作示範影片(MP4 格式,含語音與字幕),透過驅動真實瀏覽器完成。適用於製作產品展示、功能導覽或螢幕錄影以呈現給審查者、客戶或團隊。支援 Windows 與 macOS。

belwo-claude-skills 是什麼?

此技能可將 Claude Code 轉變為自動化示範影片製作工具。使用者需撰寫一個「場景檔案」,其中定義每段旁白文字以及對應的瀏覽器操作(如點擊、輸入、捲動)。技能會將旁白文字轉為語音(預設使用 edge-tts 的微軟神經網路語音),並在無頭 Chromium 瀏覽器中以 1600×900 解析度操作應用程式、同步錄製畫面,最終合成出包含語音與內嵌字幕的 MP4 影片。影片會額外疊加可見游標、點擊波紋、高亮標示環與標題卡。此工具旨在幫助開發者快速產出高品質、一致性的操作示範,無需手動錄製編輯。支援 Windows 與 macOS,依賴 ffmpeg 進行影片合成。

相容平台✓Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/vishalvana-belwo/belwo-claude-skills/tree/HEAD/plugins/demo-video/skills/make-demo-video

在你喜歡的 AI 中提問

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

說明文件

製作旁白示範影片

您撰寫一個場景檔案:每個場景包含一段旁白以及播放時觸發的點擊操作。腳本會將旁白轉為語音、在固定 1600×900 解析度的無頭 Chromium 中驅動應用程式並錄製螢幕畫面,最後合成出包含語音與內嵌字幕的 MP4 影片。頁面上會疊加可見游標、點擊波紋、高亮標示環與標題卡。

以下所有指令使用 PY,在 Windows 上代表 python,在 macOS 上代表 python3;以及 DV,代表 "${CLAUDE_SKILL_DIR}/scripts/demo_video.py"。每個指令都會輸出純文字狀態行(SCENE …、RECORDED …、CHECK OK、ERROR …);請閱讀這些訊息,而非自行猜測。

1. 安裝設定(每台機器僅需執行一次)

PY "${CLAUDE_SKILL_DIR}/scripts/setup_env.py"

此指令會在 ~/.claude-demo-video 建立一個私有環境,內含 Playwright、Chromium 與 edge-tts,然後檢查 ffmpeg。結束時會顯示 READY,或明確指出缺少的項目。ffmpeg 是系統工具:請先詢問使用者再進行安裝(Windows 上使用 winget install --id Gyan.FFmpeg -e,macOS 上使用 brew install ffmpeg)。腳本也會在常見的安裝目錄(WinGet、Chocolatey、Scoop、Homebrew)中搜尋。若 ffmpeg 安裝於其他位置,請在每個指令前設定 DEMO_VIDEO_FFMPEG_DIR 為其所在資料夾。

2. 在開始撰寫任何內容前,先與使用者確認影片規劃

請詢問或從對話情境中確認:

  • 觀看對象與目的(審查功能的主管、客戶、新進員工)。這將決定影片語氣與解說重點。
  • 要展示的內容與順序。 提出一個場景列表(每行一個場景),並獲得同意。目標長度為 3 到 8 分鐘。
  • 語音。 預設為自然的英文神經網路語音(edge-tts)。請告知使用者旁白文字會傳送至 Microsoft 的語音服務以產生音訊。 旁白應僅包含功能說明,絕不能包含資料。替代方案為離線系統語音(--offline):不會離開本機,但聽起來較為機械。
  • 資料。 僅錄製示範資料:虛構人物、@example.com 電子郵件、明顯虛構的專案。切勿錄製真實客戶或員工紀錄,也切勿將錄製器指向正式環境。

3. 準備應用程式

  • 應用程式必須正在執行中,且可從本機存取,通常為本機建置版本。
  • 若畫面需要資料,請撰寫一個資料植入腳本以及對應的示範資料清除腳本,並執行植入。請為示範資料列加上標記(例如 ID 開頭為 DEMO-),使清除腳本不會誤刪其他資料。
  • 確保外寄郵件與通知功能已關閉,或僅傳送至假地址,因為示範操作會點擊真實按鈕(提交、核准…)。
  • 會修改資料的場景(核准、刪除)僅能對每次植入錄製一次。每次重錄前都需要重新植入資料。

4. 撰寫場景檔案

請將場景檔案建立在使用者的專案中,例如 demo-videos/<name>.py,絕對不要放在技能資料夾內。請從 ${CLAUDE_SKILL_DIR}/reference/scenes-template.py 開始。完整的實際範例請參閱 ${CLAUDE_SKILL_DIR}/reference/zentrio-timesheet-example.py,該範例製作了 6 分鐘的核准影片。

CONFIG = {'url': 'https://localhost:7101/MyTimesheet', 'ready': '#tsCards .tsw-card', 'sign_in': True}

async def week(r):
    await r.click('.tsw-row:has-text("Approval screen")')
    await r.spot('.tsw-panel', 3)

SCENES = [
    ('week', "點擊任務列,記錄面板會在其下方展開。", week),
]
  • CONFIG['url'] 是第一個頁面。ready 是一個選擇器,僅在該頁面載入且登入完成後才可見。記錄器藉此判斷登入是否成功。
  • 旁白:每個場景一至三句簡短的對話。解釋某個功能為何重要,而非只是描述畫面上有什麼。請按照實際發音方式書寫數字與符號(例如「二點三零」)。旁白中不要包含資料。
  • 動作會在其旁白播放的同時執行。請確保動作時間短於旁白時間;記錄器會等待旁白播放完畢再開始下一個場景。

場景輔助函式(r 是記錄器;其他內容可透過 r.page 存取 Playwright 頁面):

輔助函式功能
await r.goto('/path', wait_for=sel)開啟頁面(相對於 CONFIG['url'])
await r.click(target, dx=.5, dy=.5)將可見游標移至該處並點擊;dx/dy 選取元素內部的點位
await r.move_to(target)移動游標但不點擊
await r.type(target, 'text')點擊欄位並以可見方式輸入文字
await r.select(target, value)選擇下拉選單選項
await r.press('ControlOrMeta+K')鍵盤快捷鍵(Windows 上為 Ctrl,macOS 上為 Cmd)
await r.spot(target, seconds, pad)橘色高亮標示環
await r.card(kicker, title, lines, bullets) / await r.uncard()全螢幕標題卡(介紹、摘要、結尾)
await r.confirm_click(target, show=4)用於呼叫 confirm() 的按鈕:顯示一個仿製對話框,然後接受
await r.download(target)點擊下載並回傳儲存的檔案路徑
await r.show_file(path)顯示本機檔案,例如您為下載的報表製作的 HTML 預覽
await r.scroll_top()、await r.scroll_x(selector, px)平滑捲動
await r.clear_toasts(selector)移除遮擋按鈕的通知提示
await r.wait(seconds)暫停

target 可以是 CSS 或 Playwright 選擇器字串('button:has-text("Approve")'),或是 Locator(r.page.locator('tr', has_text='Aarav').first)。

5. 製作旁白、錄製與審查

PY DV voice  demo-videos/<name>.py     # 每個場景的音訊;印出每個場景的長度
PY DV record demo-videos/<name>.py     # 驅動應用程式並擷取畫面
PY DV stills demo-videos/<name>.py     # 每個場景兩張靜態截圖,儲存在 <name>-video/stills/

登入。 若 'sign_in': True 且應用程式尚未登入,則會開啟一個瀏覽器視窗,記錄器會顯示 SIGN_IN_NEEDED。請要求使用者在該視窗中登入。絕對不要輸入憑證或要求密碼。 工作階段會儲存在 <name>-video/.profile 中,因此重錄時無需再次登入。

在合成影片之前,務必審查每一張靜態截圖,檢查:

  • 正確頁面、面板已開啟、游標位於旁白所指的位置;
  • 沒有遮擋操作的元素(通知訊息、Cookie 橫幅、個人檔案選單);
  • 圖片沒有被拉伸或裁切;
  • 畫面上沒有真實的個人資料。

出現 SCENE_ERROR 訊息或截圖有誤,表示需要修正該場景函式並重新錄製(若場景修改了資料,請先重新植入)。reference/lessons.md 列出了目前已發生的失敗情況與解決方法。當發現異常時請閱讀該文件。

6. 合成、檢查與交付

PY DV build demo-videos/<name>.py [--out "path/Name.mp4"]
PY DV check "path/Name.mp4" --size 1600x900

run 指令在場景已確定可正常運作後,會依序執行語音、錄製、截圖、合成與檢查。請告知使用者影片的路徑、長度以及內容。除非使用者要求,否則請勿上傳或分享影片。

7. 清理

  • PY DV clean demo-videos/<name>.py 會刪除已儲存的登入資訊。完成後務必執行此動作,因為其中包含真實的工作階段。加上 --all 參數還會移除畫面影格、靜態截圖與音訊。
  • 執行示範資料的清除腳本,並停止您啟動的任何應用程式程序。

平台注意事項

  • macOS:請使用 python3。字幕由 Chromium 繪製並疊加在影片上,因此在所有平台上看起來一致,無需使用內建 libass 的 ffmpeg(Homebrew 的 ffmpeg 預設不包含 libass)。錄製為無頭模式,因此 Retina 螢幕不會影響影片尺寸。
  • --headed 參數會在可見視窗中錄製。僅在應用程式拒絕無頭瀏覽器時使用,並請使用者不要在錄製期間觸碰或調整視窗大小。
  • DEMO_VIDEO_HOME 可變更私有環境的路徑;DEMO_VIDEO_FFMPEG_DIR 可指定 ffmpeg 資料夾。

相關技能