Communitygithub.com

Hamza-Akhtar008/walkthrough-video

製作網路應用的旁白介紹或示範影片。使用 Playwright 驅動真實應用、Kokoro 語音朗讀腳本,以及 FFmpeg 加入字幕、開場投影片,輸出 1080p MP4 與 .srt 字幕檔。

walkthrough-video 是什麼?

這個技能能夠自動將正在執行的網路應用轉換為完整的旁白介紹影片,並在應用更新時重新產生。所有處理都在本地完成,無需影片編輯器或付費服務。它由三大部分組成:Playwright 負責擷取真實應用畫面,Kokoro 語音引擎將旁白文字轉為語音,FFmpeg 則負責組裝影片並加上字幕。此技能特別適合用於製作產品示範、功能導覽或案例研究影片。支援 Windows、macOS 與 Linux,依賴 Node.js 20+、Playwright、FFmpeg 與 Python 3.11/3.12。其核心工作流程分為三個階段:腳本規劃、語音確認與錄製組裝。使用者需要分別通過三個關卡,以確保內容正確性並避免後期昂貴的修改。生成的影片與字幕檔案會直接輸出在指定目錄中。

相容平台~Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/Hamza-Akhtar008/claude-walkthrough-video/tree/main/skills/walkthrough-video

在你喜歡的 AI 中提問

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

說明文件

Walkthrough video

將正在執行的網路應用轉換為完整的旁白影片,並能在應用更新時重新產生。所有處理都在本地完成:無需影片編輯器,也無需付費服務。

narration text -> local voice -> one WAV per scene + caption timings
real app -> Playwright scenes -> clips + marker times   -> assemble.py -> walkthrough.mp4 + .srt

為什麼這樣設計:影片畫面來自真實應用,永遠與實際情況一致;錄製時會自動剪掉緩慢的步驟(如 AI 回覆、頁面載入);每個場景記錄的「標記」能讓組裝程式在正確的語詞位置對應到關鍵畫面。

開始之前

  1. 只詢問缺少的資訊:應用程式是什麼、影片必須呈現什麼內容、觀看對象是誰、目標長度(2 到 4 分鐘效果最佳)以及語氣風格。
  2. 檢查工具(詳見 references/setup.md):Node 20+、含 Chromium 的 Playwright、含 xfade、zoompan、loudnorm、libx264 的 FFmpeg,以及 Python 3.11 或 3.12 並安裝 kokoro-onnx。將語音模型(約 350 MB)安裝在倉庫外部,例如 ~/video-tools。
  3. 將工作檔案複製到使用者的專案中,並將產生的輸出檔排除在 git 版本控制之外:
    mkdir -p e2e/video-kit && cp -R <this skill>/scripts/. e2e/video-kit/ && cp <this skill>/templates/*.mjs e2e/video-kit/
    printf '\ne2e/video-kit/clips/\ne2e/video-kit/vo/\ne2e/video-kit/build/\ne2e/video-kit/*.mp4\ne2e/video-kit/*.srt\ne2e/video-kit/spec.json\ne2e/video-kit/.*.json\n' >> .gitignore
    
    腳本會將輸出寫入自身所在目錄,這就是為什麼要將它們複製過去而不是直接從原位置執行。
  4. 閱讀 references/toolkit-api.md 一次。它說明了錄製輔助工具以及 PLAN 語法。不要改寫 rec.mjs、speak.py、overlays.mjs 或 assemble.py;只編輯指南中指定的部分。

工作流程:三道關卡

請在每個關卡停止並等待使用者。在錄製前修改用詞和結構成本較低,錄製後則會變得昂貴。

關卡 1:故事板。 檢視專案(其文件、路由、現有的 Playwright 測試),並建議 8 到 12 個場景。對於每個場景:畫面上要顯示什麼、旁白(20 到 35 個字,用語平實)、以及如何錄製。如果使用者需要背景說明,可以加入開場投影片:問題、已完成或審查的內容、解決方案與技術棧。不要描述任何應用程式實際上做不到的事情;不確定時請提問。

關卡 2:用詞與語音。 將 chunks.txt 寫成 scene|text 行,每行約 12 個字以內(每個行變成一行字幕)。在 speak.py 的 PRONOUNCE 中加入產品名稱與縮寫。執行 python speak.py 並報告每個場景的長度。使用者聽過並核准後再進行錄製。

關卡 3:錄製、組裝、檢查。

  1. 在 scenes.mjs 中撰寫場景(從 scenes.template.mjs 開始),每個場景一個片段,命名為 scene-N 以符合預設計劃。在背景中一次錄製一個場景:node scenes.mjs <name>。只重新錄製失敗的場景。
  2. 如果需要投影片,則渲染投影片(slides.template.mjs),然後在 assemble.py 中填入 PLAN 和 LABEL:哪個片段對應哪個場景,以及哪個標記對應哪一行旁白。
  3. 執行 python assemble.py all。它會產生 walkthrough.mp4 和 walkthrough.srt。
  4. 透過一張聯絡表(每個場景一兩幀,拼貼排列)來檢查結果,而不是檢查多張獨立的圖片:名稱、日期、字幕、無任何內容被切掉、無任何私人資訊。修正後重新組裝,然後交付。

重要規則

  • 隱私。 使用示範或測試帳號。模糊或遮蓋任何顯示真實人物、電子郵件、電話號碼、帳戶名稱、金鑰、ID、令牌或帳單資訊的內容(使用 opts.cover、opts.init)。永遠不要處理密碼:當場景需要登入時,請使用者在可見的瀏覽器中手動登入一次(templates/auth.template.mjs),然後重複使用儲存的 session。永遠不要在鏡頭上輸入或顯示密碼或 2FA 驗證碼。將 .env、儲存的登入資訊和瀏覽器設定檔排除在 git 之外。
  • 不要在真實帳號上操作。 永遠不要點選任何會在真實帳號上發送、發布、排程或刪除的按鈕。將滑鼠游標停留在按鈕上,然後說明它的功能。
  • 不要發明不存在功能。 只描述程式碼和正在執行的應用程式實際能做到的事。
  • 語音和麥克風音訊無法由瀏覽器擷取。 只需顯示介面並說明發生了什麼事。
  • 啟動伺服器前檢查連接埠;停止任何你啟動的服務。 將耗時超過一分鐘的任務(錄製、語音、組裝)放在背景執行並等待其完成,而不是在迴圈中輪詢。
  • 保持回覆簡短。 報告你做了什麼、檔案路徑,以及任何你無法驗證的事項。

實際使用經驗

在撰寫場景前先閱讀 references/lessons.md。簡短摘要:確認預先建立的資料確實存在(隨機測試資料可能與舊資料衝突);等待能夠證明緩慢頁面已繪製完成的定位器;在輸入文字前清除記住的搜尋篩選條件;關閉彈出視窗;直接連結到記錄;將非必要的點綴效果包裝起來,以免一個失敗導致整個場景停擺;保持投影片底部 200 像素的區域空白,以便顯示字幕。

檔案

  • scripts/rec.mjs 錄製器:滑動游標、點擊漣漪效果、縮放、標記、think() 用來剪除等待時間。
  • scripts/speak.py 將旁白轉為 WAV 檔和字幕時間戳記。
  • scripts/overlays.mjs 將字幕、標籤和標題卡製作為圖片。
  • scripts/assemble.py 根據語音重新調整片段時間、串接、疊加、混合音訊、產生 MP4 和 SRT 檔案。
  • templates/ 場景、已儲存的登入、投影片以及旁白檔案的起點範本。
  • references/ 工具組指南、安裝設定和經驗教訓。

當遇到問題時

  • 語音失敗並出現 espeakng_loader/phontab: No such file:請參閱 references/setup.md。
  • 場景因等待文字而超時:頁面可能尚未完成繪製,或者記住的篩選條件隱藏了該項目。在失敗時截取螢幕截圖並檢視。
  • 影片顯示等待中:將緩慢的步驟包裝在 think() 中。
  • 畫面與語音不同步:重新錄製該場景,因為任何腳本變更都會導致標記時間改變。

相關技能