Communitygithub.com

課程影片製作技能

將學生的課程教材(課堂逐字稿、投影片、筆記、作業)轉換成附旁白、動畫的學習影片,包含圖表、範例、測驗、字幕、音效,並可選用 Blender 3D 場景。影片中的每個數字都必須來自教材,並由檢查工具強制執行。

課程影片製作技能 是什麼?

這項技能旨在將學生提供的課程教材自動轉化為高品質的學習影片。其核心原則是所有數字、範例和觀點都必須嚴格來自學生自己的課程材料,絕不允許虛構或外部知識,以確保影片內容精準對應學生的考試範圍。技能支援多種平台與工具,包括使用 Python 進行自動化建置、Playwright 進行渲染、ffmpeg 處理音視頻,並可選用 Blender 製作 3D 場景或角色。工作流程包含五個主要步驟:收集並整理教材(支援 .txt/.srt/.vtt 逐字稿、PDF 投影片、docx 等格式)、撰寫結構化的 JSON 腳本(遵循 SCHEMA.md 規範)、透過 check_sources.py 工具嚴格驗證每個數字的來源、建置與渲染影片(可輸出含字幕的 1080p MP4),以及可選的 3D 場景與音效後製。技能特別設計了數字來源檢查機制,能自動比對影片中出現的所有數字與教材內容,並報告未通過驗證的數字,要求使用者修正或標註為衍生/允許數字。這項技能非常適合學生製作個人化的複習影片,幫助他們針對特定教授的考試內容進行高效學習。

相容平台~Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/aleksanderstevens191-sudo/course-video-skill/tree/HEAD

在你喜歡的 AI 中提問

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

說明文件

課程影片

您將學生的課程教材轉換為學習影片。使這項技能與眾不同的一項規則是:

每個數字、範例和觀點都來自學生的課程教材。不得虛構任何內容。 學生使用這些影片來準備 他們的 教授所出的考試。使用虛構數字的「更好」範例、不同符號的公式,或來自課程外的知識,即使經濟學/物理學等本身是正確的,也屬於錯誤。

0. 需求(只需檢查一次)

python3 -m pip install -r requirements.txt && python3 -m playwright install chromium
ffmpeg -version | head -1          # brew install ffmpeg  /  apt install ffmpeg

可選:Blender 4.2+ 用於 3D 場景和吉祥物主持人(如果不在 PATH 中,請設定 BLENDER=/path/to/blender), pdftotext (poppler) 或 pip install pypdf 用於讀取 PDF 投影片,openai-whisper 用於轉錄錄音, XAI_API_KEY 用於 Grok 語音(否則使用免費的 Microsoft 神經語音)。

1. 收集來源

建立一個資料夾 <course>/sources/,並將 僅限課程教材 放入其中: 課堂逐字稿 (.txt/.srt/.vtt)、投影片 (.pdf 或匯出的文字)、學生的筆記、作業、練習題。

  • 有錄音但無逐字稿 → whisper lecture.mp4 --model base --output_format txt --output_dir sources/
  • .docx → textutil -convert txt file.docx (macOS) 或 pandoc file.docx -t plain -o file.txt
  • 詢問學生影片應涵蓋哪些課程/主題。除非被要求,否則不要用其他週次的教材填充。

在寫任何內容之前,請完整閱讀所有來源。注意教授的確切符號、術語、示範範例和數字。

2. 編寫腳本(內容 JSON)

編寫 <course>/<name>.json,遵循 engine/SCHEMA.md(視覺類型、提示詞、測驗格式、版面限制)。 examples/lemonade/ 是一個完整的簡單範例。

規則:

  • 範例:使用課程本身的示範範例,並使用課程本身的數字。如果課程使用「價格 $4,3 個單位」,影片也應使用「價格 $4,3 個單位」,而非「價格 $10,5 個單位」。
  • 測驗:從課程的練習題、課堂即時反饋題或示範範例中選取。如果您編寫新題目,只能使用來源中的數字構建,並在測驗標籤中說明(「練習」,而非「考試題目」)。
  • 衍生數字(您計算出的總和、差值)是允許的,但必須在頂層的 "derived" 映射中宣告每個數字及其運算,且只能使用來源數字:"derived": {"16": "4 * 4", "-6": "120 - 126"}。
  • 非數據的小計數(「三件要記住的事」、「步驟 2」)放在 "allow": ["3"] 中。0 和 1 永遠允許。
  • 符號和術語:使用教授使用的(如果課程寫「MR = MC」,不要改成「∂R/∂q」)。
  • 如果影片需要的某個事實未出現在來源中,請停下來詢問學生以取得該教材,否則就略過它。 絕不要用一般知識填補這個空白。
  • 旁白 (say) 應為聽覺而寫:使用詞語而非符號(「4 乘以 4 等於 16 元」)。

3. 檢查每個數字是否來自來源(必須在建立前執行)

python3 tools/check_sources.py <course>/<name>.json <course>/sources --report <course>/<name>.sources.md

它會從旁白、螢幕文字、測驗選項和任何 3D 場景標籤中提取每個數字,並在來源中找到每個數字(數字或拼寫的單詞,例如「one hundred twenty」)。衍生數字會重新計算並檢查其運算元。必須以退出碼 0 結束才能繼續建立。 對於每個問題,它會報告:

  • 該數字是錯字或虛構 → 修正腳本以使用來源的數字;
  • 該數字是真實的計算結果 → 將其加入 "derived";
  • 該數字以檢查工具遺漏的形式出現在來源中(例如在圖片中)→ 請學生確認,然後將其加入 "derived" 或 "allow",並在您的回覆中附上註記。

然後自行閱讀報告的「證據」部分,抽查每個數字在影片中的用法是否與來源中 意義相同(檢查工具只比對數值,不比較意義:「$40」價格 vs. 「40 單位」數量)。

4. 建立與渲染

cd engine
python3 build.py ../<course>/<name>.json              # 語音、時間、字幕、音樂(若要使用 Grok:TTS=xai XAI_API_KEY=...)
python3 lint.py build/<video-id>/spec.json            # 檢查延遲出現的視覺元素
python3 qa.py <video-id>                              # 每個節拍的靜止圖 + 接觸式印樣:請仔細查看
OUT=../out python3 render.py <video-id> --workers 6   # 完整 1080p 渲染 -> ../out/<video-id>.mp4 + .srt

在渲染前請查看 QA 接觸式印樣:確保沒有重疊文字、空白畫面、螢幕上錯誤的數字。

5. 可選:3D 場景、吉祥物、音效

一個帶有 "v": {"type": "clip", "scene": "<name>"} 的節拍會播放來自 engine/blender/scene_defs/<name>.py 的 Blender 場景 (請參閱 engine/blender/scenelib.py 中的文件字串;market.py 和 safe.py 是完整範例,專為經濟學課程編寫,因此它們的標籤帶有該課程的數字。請更改標籤以符合您的來源)。 場景標籤也會被 check_sources.py 檢查。

cd engine
python3 blend.py prep <video-id>                         # 吉祥物時間線 + 每個場景的輸入
python3 blender/stills.py <scene> --dry                  # 快速捕捉錯誤,然後不加 --dry 生成靜止圖
python3 blend.py clips <video-id>                        # 渲染 3D 場景(較慢:每個場景需數分鐘)
python3 blend.py mascot <video-id> && python3 blend.py pack <video-id>
python3 sfx.py mix <video-id>                            # 在旁白下加入音效
OUT=../out python3 blend.py comp <video-id>              # -> ../out/<video-id>-3d.mp4
OUT=../out python3 blend.py site <id1>,<id2> --title "我的課程" --out ../out/site   # 一個包含章節的網頁

渲染速度慢且消耗大量磁碟空間(運行期間每個影片產生數 GB 的影格)。首先檢查可用空間,在筆電上每次只渲染一個場景,並保持機器清醒。

6. 交接

告知學生:影片的位置、長度、涵蓋哪些課程,以及來源檢查結果(檢查過的數字、任何衍生或允許的數字)。如果來源中有任何模糊之處,請說明您的假設。提醒他們,該影片是根據他們的教材建構的學習輔助工具,並非課堂的替代品,並且課程教材可能不屬於他們發佈:在公開張貼影片前請先確認。

相關技能