ai-video-render: 程式動畫渲染
使用時機
film.json 已存在且已選定風格。此技能將故事板轉換為圖片:渲染頁面、影格擷取與無聲影片。這裡不進行配音工作。
確定性合約(不可協商)
- 每張圖片都是時間的純函數:
window.render(t)繪製任何時刻的影格。不得使用requestAnimationFrame、setTimeout、CSS 過渡或跨影格儲存狀態來進行匯出。 - 所有隨機性使用固定種子。絕不要在渲染路徑中使用未設種子的隨機來源或真實時鐘。
- 在每個影格開始時重設畫布狀態。
- 頁面必須在首次成功渲染後暴露
window.seek(t)、window.render(t)以及window.ready = true。 - 相同的時間戳記渲染兩次必須產生相同的影格。在完整渲染前,使用
scripts/determinism-check.js檢查這一點。
1. 挑選風格(使用者挑選,嚴格把關)
建議 1 種風格加上 2 種不同的替代方案,附上視覺差異、理由與限制,寫在 style-options.md 中。等待使用者挑選。「直接執行」不代表可以自行授權挑選。
風格目錄(自行從上游獲取;提示檔案與示範原始碼不在本儲存庫中):
- 扁平流程圖、手寫筆記、復古報紙、復古剪紙、超現實拼貼、3D 立體、黑色背景科技(7 套,dashi-animationstyle)。
- 15 種 MG 風格:扁平向量、線條藝術、等距 2.5D、3D 渲染、形狀變形、貼紙講解、賽博龐克 HUD、拼貼、極光玻璃、包浩斯、合成波、像素藝術、液體動態、逐格線條抖動、多元字幕。
- 36 種藝術風格配方(huashu-art-motion)與 lemo-opuscar 風格:厚塗油畫、水彩、水墨、浮世繪、白板講解。
風格使用規則:
- 一部影片使用一種風格、一個主題,最多使用 2 種動畫語法。
- 從風格的提示或示範中學習方法,然後為新主題重新製作內容。絕不複製示範的構圖、角色或素材到影片中。
- 當風格提示說「請勿更改標誌性特徵」時,只更改創意種子(故事、品牌、文案、色板)或輸出(例如直式 1080x1920、時長)。
- 除非使用者明確要求,否則不要使用藍紫漸層、深紫色星空或霓虹青紫(會給人明顯的 AI 感)。
- 程式碼絕不繪製真實的人臉。僅使用 AI 生成的素材作為綠幕角色鏡頭,合成到程式碼建構的場景中;在沒有影像生成能力的情況下,只顯示手部和背部。
2. 逐鏡頭建構
- 從
templates/render-page.html和templates/render.js編寫渲染頁面。預設為 1920x1080(直式:1080x1920,需重新編排版面與字幕,絕不能使用縮放的橫向影格)。 - 一次建構一個鏡頭。每個鏡頭渲染 3 張靜態影格(開始、中間、結束),檢查文字溢出、重疊、主體大小與螢幕顯示時間。在繼續前修正鏡頭。
- 對於超過 30 秒的影片,先在不含動態模糊的情況下渲染低解析度樣本,確認後再渲染完整版本。
- 3D 渲染風格是例外:在 Blender 中渲染圖片,然後在網頁上添加文字與顆粒。
3. 渲染與組合
- 無頭 Chrome 以影片幀率每秒擷取一個影格。使用 ffmpeg(H.264,CRF 16)組合。在此保留音軌,配音將在下一個技能中混合。
- 保持一個時間軸用於聲音與畫面:剪輯與關鍵動作落在節拍網格或配音時間軸上。
- 使用 ffprobe 驗證:H.264、1920x1080(或 1080x1920)、30 fps、影格數符合 film.json 中的時長乘以 fps。
輸出合約
render-page.html+render.js(影片的渲染頁面)。frames/(逐影格擷取)。film.mp4(無聲畫面)。render-report.md(解析度、fps、影格數、確定性檢查結果)。
規則
- 未執行的檢查寫為「未執行」。絕不能聲稱渲染通過了未發生的檢查。
- 不要將 HTML 頁面、無聲中間檔案或提示當作完成的影片呈現。
- 參考圖片為使用者自有或已授權;完成的影片絕不包含原始圖片。