timeline-video
長影片模型若提示詞能描述每一秒的細節,即可單鏡持續 30 秒。這個技能是腳本層:格式、讓影片成功的技巧,以及 scripts/timeline_video.py,後者會檢查腳本、估算價格、透過 OpenRouter 的非同步影片 API 渲染並產出連絡表供審查。需 Python 3.8+ 標準函式庫;ffmpeg 僅用於連絡表。
六個區塊
腳本是 Markdown 檔案:可選的前置資料,然後依序為六個區塊。前置資料之後的所有內容都會一字不改地作為提示詞發送。
---
duration: 30
aspect: 16:9
resolution: 720p
model: bytedance/seedance-2.5
---
[CHARACTER] 誰,確切細節:年齡、臉型、頭髮、眼鏡、每件衣物、姿態、手中物品、車輛或道具及其顏色、所在位置。以鎖定句結尾:「在整個 30 秒內保持臉型、頭髮、服裝與 <道具> 完全相同。」
[STYLE] 寫實與否、「一個不間斷的長鏡頭」、長寬比、每個鏡頭尺寸的焦點、一天中的時間及其光線、以顏色名稱呈現的色調、紋理、一個持續的小動作(如風吹頭髮)、喜劇基調,以及禁止剪輯、定格或慢動作。
[AUDIO] 環境背景音作為特定聲音的清單。然後是時間點提示:「0.8s:一聲清脆的訊息提示音。」「1.2–4.0s:<誰>,畫外音,<聲音特質>:」<精確台詞>」。」然後是聲音在畫面變化時的作用。
[TIMELINE]
0.0–1.0s — <取景> <動作> <一個細節>。
1.0–4.0s — ...
... (視窗首尾相連,從 0 到時長,無間隙)
[CAMERA RULES] 連續性規則:每個階段不中斷的單一移動、進出緩動、地平線水平、主體靠近中心、每個階段比前一個更遠、哪條引導線保持位置。
[NEGATIVE] 無剪輯或黑畫面、無其他人、無文字、無字幕、無標題或標誌……
templates/script.md 是可供複製的空白腳本;examples/the-sandbar.md 是完整的 30 秒腳本。
讓它成功的關鍵
- 一個前提,四個節拍。 平靜 → 你 聽到 的觸發(一聲提示音,然後一段請求某事的語音留言)→ 特寫中的木訥反應 → 揭露。在縮放揭露的形式中,揭露 就是 笑點:每一次拉遠都顯示從這裡到那個請求有多不可能。
- 第一秒就已顯示人物。 沒有建立鏡頭;畫面停在一個人的臉上。
- 在寫作中鎖定身份。 將每個可見屬性命名一次,然後加上「在整個 N 秒內完全相同」這行。飄移是破壞長鏡頭的原因。
- 一個飽和的重點色。 淡化整條色調,只給主體的道具一個強烈的顏色,這樣當它最後只剩三像素寬時,眼睛仍能找到它。
- 逐步升級揭露。 每個階段都比前一個移動更遠,每個視窗都命名在該比例下變得可見的內容——進入方向、離開方向、地平線。地理講述故事。
- 音響與攝影機同步。 開始時緊密貼近,然後只有風聲,隨著鏡頭拉遠而變得開闊、空洞。
- 為語音計時。 每秒約 2.5 個詞:一個 2.8 秒的視窗大約容納七個詞。
- 最後三分之一保持安靜。 緩慢、寬闊且空曠,留待之後加上旁白。
- 切勿要求模型產出文字、標誌或品牌標記。 它會扭曲它們,除非負面提示禁止,否則它還會在車輛上畫出徽章。之後用你自己的字體,在安靜的寬闊鏡頭上加上台詞。
除了縮放之外的其他形式:推進鏡頭(笑點是一個細節)、跟拍鏡頭(長時間行走壓縮時間)、環繞鏡頭(世界圍繞靜止的主體變化)。同樣的六個區塊;攝影機規則改變。
執行
S=<此技能目錄>/scripts/timeline_video.py
python3 $S check film.md # 解析區塊、檢查時鐘、列印節拍
python3 $S models --model bytedance/seedance-2.5 # 時長、解析度、長寬比、音訊、價格
python3 $S render film.md -o out/ --key-file ~/keys/openrouter.key # 價格估算、提交、輪詢、下載
python3 $S sheet out/film.mp4 film.md # 每拍一幀 → out/film_beats.jpg
| 標誌(渲染) | 功能 |
|---|---|
-o DIR | MP4 及其側車檔案存放的目錄。檔名來自腳本名稱。 |
--model、--duration、--resolution、--aspect | 覆蓋前置資料。每個值在發送前都會與模型公布的能力進行校驗。 |
--seed N | 傳遞種子(僅在模型支援時生效)。 |
--no-audio | 要求靜音影片。預設情況下,對於能產生音訊的模型,音訊是開啟的。 |
--key-file F | 從檔案讀取 OpenRouter 密鑰。否則使用 OPENROUTER_API_KEY 環境變數。密鑰絕不會被列印或儲存。 |
--dry-run | 僅檢查和估算價格。 |
成本。 render 會在提交前列印價格。按秒計費的模型是精確的。Seedance 按 影片 token 計費,而 OpenRouter 未公布轉換方式,因此其數值標記為估算值(tokens ≈ 寬度 × 高度 × 24 fps × 秒數 ÷ 1024)。已在真實任務中驗證:720p 的 30 秒影片估算為 $6.93,實際收費 $6.94。實際費用始終在側車檔案的 usage.cost 中。先渲染一個,觀察結果,再決定是否重試。
你將獲得: <name>.mp4 和 <name>.json — 模型、參數、提示詞及其 SHA-256、任務和生成 ID、時間統計以及 usage 區塊。請將它們保持在一起;側車檔案是重現這個鏡頭的關鍵。
使用前審查
- 使用
ffprobe檢查檔案:你要求的時長,以及(如果要求了)音訊串流。 - 使用
sheet,然後查看每個節拍:全程保持相同的臉、頭髮和服裝;重點色保持一致;揭露逐步升級;沒有文字、標誌或額外人物出現。 - 聆聽:觸發音效準時出現,語音說出精確台詞。
失敗的節拍需要重試(新種子)或修改腳本,通常是將模糊的視窗變得具體。
錯誤處理
| 退出碼 | 意義 |
|---|---|
0 | 完成 |
1 | OpenRouter 拒絕請求,或任務以 failed、cancelled 或 expired 狀態結束;其錯誤將直接顯示 |
2 | 腳本或參數錯誤(缺少區塊、時鐘間隔、模型不支援的時長等) |
4 | 未提供 API 密鑰 |
影片任務不會保留數據:提供者會短暫保留輸出以供下載。
貢獻者
此格式參考 Seedance 提示詞,由 @iamneubert 分享一個爆紅單鏡廣告的分解(https://x.com/iamneubert/status/2099199895039336459)。本技能不包含該提示詞或影片的任何內容。