類口播講解影片 是做什麼的?
一部片子 = 一段配音 + 一堆真實片段 + 一套跟著配音走的講解動畫,全片程式碼渲染(Lemo 頁面),產出 mp4 + srt。
畫面構成(已做樣片的結構參考,視覺風格由每個專案單獨確定):
- 約 50% 是「講解框」:前景是跟隨專案風格的講解動畫,背後是模糊播放的真實片段。黑底黃白只是其中一種方案。
- 其餘是真實片段:全螢幕、卡片層疊、四分螢幕、三張卡。
- 講「效果差、出錯」的段落用反面樣片(使用者指定的低品質素材)並打紅色「反面示例」角標。
- 底部字幕全程保留,關鍵詞使用本專案統一強調色;黑底黃白方案中用黃。
- 音訊:人聲 + 圖示/物理音效。預設不要背景音樂,也不要紙張沙沙聲(使用者明確嫌「擦擦擦」難聽)。
模型協作與執行入口
本技能是製作規範和本地渲染工具集,不自帶 Claude / DeepSeek / GPT 的跨模型 API 排程器;放進 Cherry Studio 不代表三個模型會自動協作。
- Claude:整體規劃、審美與製作主責,統一律點結構、分鏡節奏、字體配色;製作和修改分鏡圖並提交使用者確認,使用者確認後負責渲染實現、合片和成片品管。Claude 的自審不能代替使用者確認。
- DeepSeek:文案與結構化整理,做口語化、刪贅句、長句拆分、關鍵詞提取、邏輯檢查及
script.json草稿。事實核驗必須有來源,不能把模型之間的贊同當證據。 - GPT:參考畫面分析與出圖,按實際工具能力查看參考影片或帶時間碼的抽幀,提煉分鏡,生成需要的插圖/視覺資產。圖像生成需呼叫真正的出圖工具;不要把模型建議冒充已生成的圖片。
- Codex:輔助支援,按使用者指定處理技能維護、資料/檔案整理、工具檢查或技術排障;不預設接管 Claude 的分鏡製作、審閱溝通和渲染實現。
- 使用者:分鏡最終確認。Claude 提交完整分鏡圖及必要樣張,按使用者意見修改;使用者明確確認目前版本後,才推進正式渲染與後續製作。
這是使用者指定的優先分工,不是模型能力排名,也不要求每個小改動輪轉全部模型。只呼叫目前可用且已獲授權的模型;Claude 不可用時說明缺項、準備交接材料,不自動改由 Codex/GPT 接管其主責,除非使用者另行指定。不能冒充其他模型已審閱。具體交接與 Cherry / Codex 使用方式見 模型協作。
視覺基線(每次開工必讀)
先讀 視覺規範,再編分鏡和渲染頁:
- 每個專案先定視覺方向,再統一全片。黑底黃白是可選方案,也可嘗試淺色編輯風、冷調極簡、電影畫面主導等風格;由 Claude 根據主題和參考提出方案,隨分鏡/樣張交使用者確認。目前專案選定後,不隨意混色、混字體或換風格。
- 黑底黃白方案不混入突兀的藍字;其他方案可有意使用藍色等協調的主色/強調色,不能把特定樣片的問題推廣成所有風格禁藍。紅色僅用於錯誤、禁止、風險或反面示例。
- 全片鎖定字體組合和字號層級,正文優先清晰的無襯線字體,標題可按風格配一種襯線字體;靠留白、對齊、字重與少量重點形成高級感。
- 橫版按手機觀看設計:1920×1080 成片中正文、字幕預設 64–72 px;輔助標註可稍小,通常 36–48 px,不能用小標註承擔關鍵解釋。字號以縮放後的實際尺寸為準,文字擁擠時拆句、拆鏡。
- 故障與閃屏效果預設不用:不主動新增 RGB 錯位、撕裂、三幀亂切、白閃、黑白閃切、快門閉合或整幀抖動。反面樣片正常播放,靠紅色標記和問題區域性說明。
examples/codex-jiangzhi/是歷史結構參考,含未統一的配色、關鍵小字、白閃和故障設計;不是目前審美合格模板。新專案複製後必須按選定風格遷移,再出樣張。舊示例的外觀與本節衝突時,以本節為準。
開工前
- 環境:需要 Lemo-Opuscar 庫(
LIB,預設C:/Users/codex/lemo-opuscar)裏的渲染器、core/audio/sfx.py、.venv裏的 Python,以及 Node.js、FFmpeg 和可用的 shell。先核實路徑與依賴;缺失時說明具體缺項,按可用的安裝說明處理,不假定另一個技能已安裝。做完的工作目錄是使用者的素材目錄下的新專案資料夾(例:D:\zgc個人\作品 舊島\codex-skill-koubo),不是技能目錄。 - 要使用者給齊四樣:配音 mp3、文案(每句一行 + 想要高亮的詞)、好素材(真實片段,越具體越好:片子名 + 大致時間點)、反面素材(效果差的片段,例:minimax/kling 生成的)。缺什麼先問,別自己找素材冒充。
- Claude 先製作分鏡圖和視覺樣張,由使用者確認後再推進。樣張至少覆蓋標題、資訊最密的講解框、反面示例(如有),附手機尺寸預覽。提交後停在「待使用者確認」;不能把 Claude 自審、工具校驗通過、使用者沉默或籠統的「做影片」委託當成目前分鏡確認。同一個版本已有使用者明確確認時無需重複詢問;若鏡頭內容、順序、時長或視覺風格有實質修改,重提受影響部分確認。渲染耗時以實際環境為準。
流程
專案結構(複用 examples/codex-jiangzhi/ 的資料結構,外觀按目前視覺規範重做):
<專案>/
assets/voice.mp3 配音
script.json 文案:{"cues":[{"id","sec","text","hl":["高亮詞"]}]};sec 只標在開啟該段落的句子
storyboard/shots.json 分鏡(指令碼生成)
layers.json 抽幀表:素材路徑 + 每層的時間軸區間
tools/ align.py prep_layers.py storyboard.py mix.py build.sh qa.sh(從技能 scripts/ 複製)
index.html 渲染頁(從 examples/codex-jiangzhi/index.html 複製再改)
frames/(每層的幀) frames.json timeline.json cues.json events.json mix.wav
先 mkdir -p <專案>/tools,把 scripts/*.py scripts/*.sh scripts/align.py 複製進 tools/。
1. 對齊配音(幾分鐘)
script.json 寫好文案和 sec 後:
cd <專案> && "$LIB/.venv/Scripts/python.exe" tools/align.py assets/voice.mp3 --model small --offset 0.8
whisper 逐詞時間 + 文案精確文字做序列對齊,寫出 timeline.json(含每句 t0/t1)和 cues.json。畫面時間點必須從這裏來——之後配音改了,重跑一次畫面自動跟上。列印的匹配率低於 ~85% 說明文案和配音差太多,回去核對。
2. Claude 製作分鏡,使用者確認後推進
- 按
references/storyboard-guide.md的結構模板把配音拆成鏡頭,寫storyboard/shots.json。 - 每鏡選定素材和起點,寫進
layers.json。 - 出圖(分鏡圖用於確認鏡頭內容;正式字號還要看渲染頁樣張,不能只憑分鏡縮圖判斷):
分鏡圖上有全片色帶、每鏡縮圖(真素材截幀)、配音原句、畫面、螢幕大字、轉場、音效,頁眉還統計講解框/反面佔比。自己用可用的圖片檢視工具先看一遍,挑出畫面和臺詞對不上的鏡頭換素材重出。"$LIB/.venv/Scripts/python.exe" tools/storyboard.py # → storyboard/board_1..N.png - Claude 把 board 圖及代表性視覺樣張提交給使用者,使用者確認是推進關卡(時長、素材、文案、配色、字號)。可僅為本次審閱按第 4 步實現必要樣張,不能先製作正式全片。明確目前分鏡版本並等待使用者反饋;有修改就更新後重提,使用者明確確認後才進入後續正式製作。
3. 抽幀
"$LIB/.venv/Scripts/python.exe" tools/prep_layers.py # → frames/<層>/f0001.jpg… + frames.json
每層 = 一個鏡頭的畫面:靜音、裁 16:9、按速度換算好、24 fps,第 i 幀對應時間軸 t0 + i/24 秒,尾巴多 0.5 秒給轉場。四種尺寸:full 1920×1080 / card 960×540 / bg 480×270(先模糊,頁面裏放大更軟)/ inset 640×360。幾千張 jpg 靠頁面按需載入,別一次性 load。
4. Claude 實現 index.html
複製 examples/codex-jiangzhi/index.html 的工程骨架,先按 references/render-engine.md 和 references/visual-style.md 完成舊模板遷移:
- 保留:繪圖基礎、
cover、字幕、幀按需載入、async render 骨架和配音時間對映。標籤、進度條、卡片和標題樣式按新規範調整。 - 停用舊效果呼叫:
rgbSplit、slices、動態pixel、wflash、shutter、整幀shake與 2 幀插黑;同步移除專為這些效果配置的音效。反面段落保留原素材的正常時間順序。 - 重寫:段落節拍物件、講解動畫場景、
BAD[n]/OVER[n]、HITS、轉場時間點、素材鍵 → 角標名。 - 所有時間點用
T('cue id')取,不寫死秒數。 - 音效在場景裏用
E(t, 'hit'|'whoosh'|'tick'|'stamp'|'ding'|'pop'|'clack'|'zap'|'boom', {...})記事件。
改完先抽幾張靜幀確認沒報錯:
cd "$LIB" && node core/render/still.mjs "<專案絕對路徑>" 0.5 11.2 20.5 47.7 93.3 --out "<專案>/stills/chk"
"$LIB/.venv/Scripts/python.exe" "$LIB/core/render/sheet.py" <專案>/stills/chk/sheet.jpg <專案>/stills/chk/*.png --cols 4 --w 480
用目前可用的圖片檢視工具開啟總覽圖檢查畫面、字幕、角標、講解框比例,並檢查 640×360 和約 390×219 的單張整幀預覽;不要放大後才判斷字能否讀清。資訊最密的鏡頭必須檢查,不對就減字、拆鏡或放大主體後重抽。靜幀通過後,動態預覽轉場和反面段落,確認沒有閃屏、抖動或字幕閃爍。
5. 使用者確認後,由 Claude 渲染與合片
先核對使用者已明確確認目前分鏡版本;沒有該確認就停在分鏡審閱環節。Claude 的審美自審和程式檢查均不替代這一步。
sh tools/build.sh <成片名> # 一條龍:events → mix → video → mux → srt → 品管
它分步做的其實就是:
cd "$LIB" && node core/render/events.mjs "<專案>" # 畫面裏的音效事件 → events.json
"$LIB/.venv/Scripts/python.exe" tools/mix.py --out mix.wav # 人聲 + 音效(要配樂才加 --bgm)
cd "$LIB" && node core/render/video.mjs "<專案>" --fps 24 --workers 5 --out "<專案>/video_<名>.mp4"
sh "$LIB/core/render/mux.sh" video_<名>.mp4 mix.wav <名>.mp4 24 0 # −14 LUFS,向量畫面不加顆粒
"$LIB/.venv/Scripts/python.exe" "$LIB/core/render/srt.py" cues.json <名>.srt
渲染耗時以本機實際結果為準。每次 --out 用不同檔名(渲染器有鎖檔案,同名會擋住)。
6. Claude 品管,然後交付
sh tools/qa.sh <名>.mp4 列印編碼/時長、黑場清單、響度,並生成抽幀總覽 qa/sheet.jpg。逐條核對:
- 黑場:只允許已設計的開場/收尾漸變等;不把 2 幀插黑、快門或閃黑當預設轉場。意外黑幀需檢查素材載入和元素進場時間。
- 響度:約 −14 LUFS,峰值 ≤ −1 dB。
- 抽幀總覽:自己從頭看一遍,字幕和畫面對得上、貼紙位置不擋臉。
- 視覺與手機可讀性:按
references/visual-style.md驗收調色盤、紅色語義、統一字型、實際字號、字幕安全區以及手機尺寸整幀。 - 動態舒適度:播放所有轉場和反面段落;稀疏抽幀和
blackdetect不能證明沒有白閃或故障閃爍。 最後用目前環境可用的附件/連結方式交付 mp4 / srt / 海報,並說清哪些素材用在了哪一句、實際完成了哪些檢查;不要假定存在report_artifacts工具。
硬性注意
- 同一錯誤連續出現兩次就停下報告,不要反覆重試;網路異常不要重複提交收費任務。
- 樣片一律靜音;沒有使用者同意不要用帶原聲的片段。
- 微軟雅黑沒有 ✗ ⇢ ↘ 字形,會畫成方框——用 × → ↓。
- 分鏡由使用者最終確認,未確認不得推進正式渲染與後續製作;使用者改文案就重跑 align.py,別手改 timeline.json。影響已確認分鏡時重提受影響部分確認。
- 用實際可用的檢視工具看圖片再下結論;沒看過影片就註明依據是哪些時間碼的抽幀,不能把靜幀檢查說成全片動態檢查。
參考
- 視覺規範 — 每次必讀:字型、配色、手機可讀性、低刺激動效與驗收
- 模型協作 — Claude / DeepSeek / GPT 分工、交接、Cherry 與 Codex 執行邊界
references/render-engine.md— index.html 分層、各鏡頭型別實現、幀按需載入、坑references/storyboard-guide.md— 結構模板、選鏡頭規則、反面樣片用法、轉場音效配方、shots.json 寫法examples/codex-jiangzhi/— 《難道 Codex 真的降智了?》歷史 v2:僅參考工程結構與敘事;舊配色、小字、故障和閃屏不能直接沿用scripts/— align.py(配音對齊)、prep_layers.py(抽幀)、storyboard.py(分鏡圖)、mix.py(混音)、build.sh(一條龍)、qa.sh(品管)