從投影片製作課程/培訓影片
請先閱讀 video-studio。此流程已在一部從PDF簡報製作的22分鐘行銷課程中驗證(需求為「一般剪輯,不需大量動態圖形」,印度英語男性配音)。請按照以下結構重新建立:edit/course.py、render.py、mix.py。
管線
- 投影片 → 圖片: 執行
pdftoppm -r 200 -png raw/deck.pdf work/slides/p(或先將PPTX/Keynote匯出為PDF)。檢查每一頁。 對於逐步建構,找出每個部分的區塊(標題、項目符號1..n、圖表、圖片)——透過肉眼觀察圖片或使用PIL對非背景像素進行行列投影——並將每個區塊儲存到對應的投影片中。 - 腳本 (
edit/course.py): 每張投影片包含:vo段落 +reveals[{box:[x,y,w,h], cue:"口語文字"}] + 可選的zoom區塊。 寫作目的是教學,而非朗讀投影片:引起學習動機(為何重要)、每個段落一個想法、舉例、每個模組結尾總結,語速約140–150字/分鐘。若受眾需要,可使用印地語混合英語(Hinglish)。在進行任何配音之前,先展示腳本並獲得批准(配音會消耗額度)。 - 預算檢查: 執行
eleven.py credits;一部22分鐘的課程約需18,000個字元——Starter方案每月有40,000個字元,因此同一個月內可能無法完全重新配音。告知使用者成本。僅用於測試時間時,可使用macOSsay進行免費的草稿配音。 - 配音: 每個段落執行
eleven.py tts "<文字>" work/vo/<投影片編號>_<n>.mp3 --voice 05QRrdNgiglhuYOaTQvw --speed 1.05 --words work/vo/<投影片編號>_<n>.json(Prem,已批准)。系統會根據文字快取結果——編輯單一段落只會重新產生該段。透過在文字中重新拼寫來修正發音。 段落之間間隔0.35秒,投影片之間間隔0.8秒;建立時間軸JSON(投影片開始/結束時間、提示字詞時間)。 - 渲染 (
edit/render.py): 每張投影片以乾淨畫面開始(僅顯示標題),每個部分會在對應的提示字詞時淡入/滑入;對密集的投影片使用緩慢的緩動攝影機推近(1.00 → 1.04)並縮放至正在討論的部分;投影片之間的推入/滑動轉場(0.4秒)、左上角章節標籤、細進度條、投影片編號。清晰度:從200 dpi的PNG渲染至1920x1080,無模糊。 低優先級,按模組分塊渲染,以便因故中斷時可從中斷處繼續。 - 混音 (
edit/mix.py): 語音鏈(高通濾波80Hz、輕度壓縮)、背景音樂降至−20 dB並搭配側鏈壓縮(assets/music/*underscore*)、顯示元素時加入輕柔音效(彈出/嗖聲 −14 dB)與轉場音效(呼嘯聲 −12 dB)——比短影片更輕柔。總輸出 −14 LUFS,--tp -2.0。 - 預覽 → 批准 → 完整輸出: 先以
--scale 0.5渲染第一個模組,取得回饋後再渲染全部。執行qc.py --platform youtube。 - 封裝: YouTube章節(每組投影片/每個模組一個章節)、附帶課程大綱的描述、各模組的獨立影片檔案(若為課程平台使用,則輸出至
exports/vN_module_<n>_<slug>.mp4)、縮圖(使用thumbnail-designer)、可選的SRT字幕(captions_ass.py --style clean或從配音字詞時間產生)。
規則
- 視覺元素跟隨語音:在提及之前不要顯示任何內容;任何重要的內容必須在提及時才顯示。
- 保留簡報原有的設計(這是客戶的品牌);僅加入攝影機、元素顯示、章節標籤和進度條。
- 數字和聲明僅來自簡報/使用者。即使為了語音而重新拼寫品牌名稱,螢幕上仍需顯示正確的拼寫。
- 如果使用者去休息並放棄批准流程,仍應保留預覽和筆記,以便他們隔天早上可以檢視。