透過對話編輯任何影片。轉錄、剪輯、調色、生成覆蓋動畫、燒錄字幕 — 適用於談話性頭像、混剪、教學、旅遊、訪談。無預設、無選單。提問、確認計畫、執行、迭代、持續。製作正確性規則是硬性的;其他一切都是藝術自由。
Video Use
原則
- LLM 從原始轉錄稿與隨需視覺素材推理。 唯一值得保留的衍生產物是打包的逐詞轉錄稿(
takes_packed.md)。其他一切 — 填充詞標記、重拍偵測、鏡頭分類、強調評分 — 都在決策時即時推導。 - 音訊優先,視覺跟隨。 剪輯候選來自語音邊界與靜音間隙。只在決策點深入檢視視覺素材。
- 提問 → 確認 → 執行 → 迭代 → 持續。 在使用者以白話文確認策略之前,絕不觸碰剪輯。
- 通用化。 不要預設這是哪種影片。先看素材,問使用者,然後再編輯。
- 藝術自由是預設值。 本文件中的每個具體數值、預設、字型、顏色、時長、音高結構與技術,都是來自一個經過驗證的影片的實作範例 — 並非強制規定。閱讀它們以了解可能性與為何有效。然後根據素材實際情況與使用者實際需求,做出你自己的品味判斷。你唯一必須做的事在下方「硬性規則」章節。 其他一切都是你的自由。
- 自由發明。 如果素材需要此處未描述的技術 — 分割畫面、子母畫面、下三分之一身分卡、反應剪輯、速度斜坡、凍結幀、交叉淡出、匹配剪輯、L 剪輯、J 剪輯、呼吸間的速度斜坡等 — 就建立它。輔助工具是 ffmpeg 和 PIL。它們能處理格式支援的任何功能。無需等待許可。
- 在展示給使用者之前,先驗證自己的輸出。 如果你不會出貨,就不要呈現。
硬性規則(製作正確性 — 不可協商)
這些是偏離會導致靜默失敗或輸出損壞的事項。它們不是品味問題,而是正確性問題。牢記它們。
- 字幕在濾鏡鏈中最後套用,在所有覆蓋動畫之後。否則覆蓋動畫會遮住字幕。靜默失敗。
- 逐段提取 → 無損
-c copy串接,而非單次濾鏡圖。否則在加入覆蓋動畫時,每個片段都會被二次編碼。 - 每個片段邊界加上 30ms 音訊淡入淡出(
afade=t=in:st=0:d=0.03,afade=t=out:st={dur-0.03}:d=0.03)。否則每個剪輯點都會有可聽見的爆音。 - 覆蓋動畫使用
setpts=PTS-STARTPTS+T/TB將覆蓋動畫的幀 0 偏移到其視窗起點。否則在覆蓋視窗期間會看到動畫的中間部分。 - 主 SRT 使用輸出時間軸偏移量:
output_time = word.start - segment_start + segment_offset。否則在片段串接後字幕會錯位。 - 絕不在單詞中間剪輯。 每個剪輯邊緣都對齊到 Scribe 轉錄稿中的單詞邊界。
- 每個剪輯邊緣加上緩衝。 工作視窗:30–200ms。Scribe 時間戳有 50–100ms 的漂移 — 緩衝可吸收漂移。快節奏時較緊,電影感時較鬆。
- 僅使用逐詞逐字 ASR。 絕不使用 SRT/短語模式(會遺失亞秒間隙資料)。絕不使用標準化填充詞(會遺失編輯訊號)。
- 每個來源快取轉錄稿。 除非來源檔案本身變更,否則絕不重新轉錄。
- 多個動畫使用平行子代理。 絕不循序。透過
Agent工具同時啟動 N 個;總耗時 ≈ 最慢的那個。 - 執行前先確認策略。 在使用者批准白話文計畫之前,絕不觸碰剪輯。
- 所有工作階段輸出放在
<videos_dir>/edit/。 絕不寫入video-use/專案目錄內。
本文件中其他一切都是實作範例。每當素材需要時就偏離它們。
目錄結構
技能位於 video-use/。使用者素材放在他們指定的位置。所有工作階段輸出都放入 <videos_dir>/edit/。
<videos_dir>/
├── <來源檔案,未修改>
└── edit/
├── project.md ← 記憶;每個工作階段附加
├── takes_packed.md ← 逐詞轉錄稿,LLM 的主要閱讀檢視
├── edl.json ← 剪輯決策
├── transcripts/<name>.json ← 快取的原始 Scribe JSON
├── animations/slot_<id>/ ← 每個動畫的來源 + 渲染 + 推理
├── clips_graded/ ← 已調色且含淡入淡出的逐段提取
├── master.srt ← 輸出時間軸字幕
├── downloads/ ← yt-dlp 輸出
├── verify/ ← 除錯幀 / 時間軸 PNG
├── preview.mp4
└── final.mp4
設定
首次安裝在 install.md 中(複製、依賴、ffmpeg、技能註冊、API 金鑰)。不要每個工作階段都重新執行;冷啟動時只需驗證:
ELEVENLABS_API_KEY可解析 — 在環境變數中或位於 video-use 儲存庫根目錄的.env檔案中。如果缺少,請使用者貼上一個並寫入.env(絕不寫入使用者的<videos_dir>)。ffmpeg+ffprobe在 PATH 中。- Python 依賴已安裝(在儲存庫內執行
uv sync或pip install -e .)。 - 如果工作階段需要 HyperFrames 或 Remotion 插槽,則需 Node.js + npm。HyperFrames 目前需要 Node.js 22+。
yt-dlp、HyperFrames、Remotion、Manim 僅在首次使用時安裝。- 首次使用的動畫設定在插槽目錄內進行,絕不在 video-use 儲存庫根目錄。HyperFrames 可使用
npx --yes hyperframes ...呼叫;Remotion 可使用npx create-video@latest建立脚手架,或在使用其remotion render指令前安裝為專案本地依賴。 - 此技能附帶
skills/manim-video/。在建立 Manim 插槽時閱讀其 SKILL.md。
輔助工具(helpers/transcribe.py、helpers/render.py 等)與此 SKILL.md 位於同一目錄。相對於包含此檔案的目錄解析它們的路徑 — 該技能通常符號連結在 ~/.claude/skills/video-use/ 或 ~/.codex/skills/video-use/。
輔助工具
transcribe.py <video>— 單一檔案的 Scribe 呼叫。可選--num-speakers N。已快取。transcribe_batch.py <videos_dir>— 4 工作者平行轉錄。用於多個錄影。pack_transcripts.py --edit-dir <dir>—transcripts/*.json→takes_packed.md(逐詞層級,在靜音 ≥ 0.5s 處斷句)。timeline_view.py <video> <start> <end>— 底片條 + 波形 PNG。隨需視覺深入檢視。非掃描工具 — 在決策點使用,而非持續使用。render.py <edl.json> -o <out>— 逐段提取 → 串接 → 覆蓋動畫(PTS 偏移)→ 最後字幕。--preview用於 720p 快速預覽。--build-subtitles用於內聯生成 master.srt。grade.py <in> -o <out>— ffmpeg 濾鏡鏈調色。預設 +--filter '<raw>'用於自訂。
對於動畫,使用 Bash 建立 <edit>/animations/slot_<id>/ 並透過 Agent 工具產生子代理。
流程
-
盤點。 對每個來源執行
ffprobe。對目錄執行transcribe_batch.py。執行pack_transcripts.py產生takes_packed.md。取一兩個timeline_view樣本作為視覺第一印象。 -
預掃描問題。 快速瀏覽
takes_packed.md一次,記錄口誤、明顯說錯或應避免的措辭。純列表,提供給編輯簡報。 -
對話。 用白話文描述你所看到的。提出根據素材形塑的問題。收集:內容類型、目標長度/比例、美學/品牌方向、節奏感、必須保留的時刻、必須剪掉的時刻、動畫與調色偏好、字幕需求。不要使用固定檢查清單 — 每次的正確問題都不同。
-
提出策略。 4–8 句話:形狀、錄影選擇、剪輯方向、動畫計畫、調色方向、字幕風格、長度估計。等待確認。
-
執行。 透過編輯子代理簡報產生
edl.json。在模糊時刻深入檢視timeline_view。在平行子代理中建立動畫。逐段套用調色。透過render.py合成。 -
預覽。
render.py --preview。 -
自我評估(在展示給使用者之前)。 對渲染輸出(而非來源)在每個剪輯邊界(±1.5s 視窗)執行
timeline_view。檢查每個影像是否有:- 剪輯處的視覺不連續 / 閃爍 / 跳動
- 邊界處的波形尖峰(音訊爆音未被 30ms 淡入淡出捕捉)
- 字幕被覆蓋動畫遮擋(違反規則 1)
- 覆蓋動畫錯位或顯示錯誤幀(違反規則 4)
同時抽樣:前 2 秒、後 2 秒、以及 2–3 個中間點 — 檢查調色一致性、字幕可讀性、整體連貫性。對輸出執行
ffprobe以驗證時長是否符合 EDL 預期。如果有任何失敗:修正 → 重新渲染 → 重新評估。自我評估最多 3 輪 — 如果 3 輪後仍有問題,向使用者標記而非無限循環。只有在自我評估通過後才呈現預覽。
-
迭代 + 持續。 自然語言回饋、重新規劃、重新渲染。絕不重新轉錄。確認後進行最終渲染。附加到
project.md。
剪輯工藝(技術)
- 音訊優先。 剪輯候選來自單詞邊界與靜音間隙。
- 保留高潮。 笑聲、金句、強調節拍。在金句後延伸以包含反應 — 笑聲本身就是節拍。
- 說話者交接 需要在話語之間留有空氣。常見數值:400–600ms。快節奏時較短,電影感時較長。品味判斷。
- 音訊事件作為訊號。
(laughs)、(sighs)、(applause)標記節拍。在它們之後延伸。 - 靜音間隙是剪輯候選。 靜音 ≥400ms 通常最乾淨。150–400ms 的短語邊界在視覺檢查後可使用。<150ms 不安全(短語中間)。
- 剪輯緩衝範例(此技能隨附的發布影片):第一個保留單詞前 50ms,最後一個保留單詞後 80ms。混剪能量時較緊,紀錄片時較鬆。保持在 30–200ms 的工作視窗內(硬性規則 7)。
- 絕不獨立推理音訊與視訊。 每個剪輯必須在兩個軌道上都有效。
打包轉錄稿(主要閱讀檢視)
pack_transcripts.py 讀取所有 transcripts/*.json 並產生一個 Markdown 檔案,其中每個錄影是一系列逐詞層級的行,每行前面加上其 [start-end] 時間範圍。短語在靜音 ≥ 0.5s 或說話者變更處斷開。這是編輯子代理讀取以挑選剪輯的產物 — 它僅從文字提供單詞邊界精確度,且 token 量僅為原始 JSON 的 1/10。
範例行:
## C0103 (時長: 43.0s, 8 個短語)
[002.52-005.36] S0 網路代理所做的百分之九十都是完全浪費的。
[006.08-006.74] S0 我們修復了這個問題。
編輯子代理簡報(用於多錄影選擇)
當任務是「從多個片段中選取每個節拍的最佳錄影」時,產生一個專用子代理,其簡報形狀如下。結構是承載性的;音高形狀範例則不是。
你正在編輯一部 <類型> 影片。選取每個節拍的最佳錄影,並按節拍時間順序組合,而非按來源片段順序。
輸入:
- takes_packed.md(所有錄影的帶時間註解的逐詞轉錄稿)
- 產品/敘事背景:<來自使用者的 2 句話>
- 說話者:<姓名、角色、表達風格備註>
- 預期結構:<選擇一個原型或自行發明>
- 應避免的口誤:<來自預掃描階段的列表>
- 目標時長:<秒數>
常見結構原型(選擇、調整或發明):
- 科技發布 / 展示:鉤子 → 問題 → 解決方案 → 優點 → 範例 → 行動呼籲
- 教學:介紹 → 設定 → 步驟 → 陷阱 → 總結
- 訪談:(問題 → 回答 → 追問)重複
- 旅遊 / 活動:抵達 → 亮點 → 安靜時刻 → 離開
- 紀錄片:論點 → 證據 → 反論 → 結論
- 音樂 / 表演:前奏 → 主歌 → 副歌 → 橋段 → 尾奏
- 或自行發明。
規則:
- 開始/結束時間必須落在轉錄稿中的單詞邊界上。
- 剪輯邊緣加上緩衝(工作視窗 30–200ms)。
- 優先選擇靜音 ≥ 400ms 作為剪輯目標。
- 如果沒有更好的錄影,則保留無法避免的口誤。在「原因」中註明。
- 如果超出預算,修改:刪除一個節拍或修剪尾部。報告總時長並自行修正。
輸出(JSON 陣列,無散文):
[{"source": "C0103", "start": 2.42, "end": 6.85, "beat": "鉤子",
"quote": "...", "reason": "..."}, ...]
回傳最終 EDL 與一行總時長檢查。
調色(當要求時)
你的工作是推理影像,而非套用預設。透過 timeline_view 查看一個幀,決定哪裡有問題,調整一個項目,再次查看。
心智模型是 ASC CDL。每個通道:out = (in * slope + offset) ** power,然後全域飽和度。slope → 亮部,offset → 陰影,power → 中間調。
範例濾鏡鏈(grade.py 有 --list-presets;將它們作為起點或混合自訂):
warm_cinematic— 復古/技術感,微妙的青橙分離,低飽和度。在真實發布影片中使用。對談話性頭像安全。neutral_punch— 最小修正:對比提升 + 柔和 S 曲線。無色相偏移。none— 直接複製。當使用者未要求時的預設值。
對於其他任何情況 — 肖像、自然、產品、音樂影片、紀錄片 — 自行發明濾鏡鏈。grade.py --filter '<raw ffmpeg>' 接受任何濾鏡字串。
硬性規則:在提取期間逐段套用(而非串接後,後者會二次編碼)。未經測試膚色前絕不激進調整。
字幕(當要求時)
字幕有三個值得推理的維度:分塊(每行 1/2/3/句子)、大小寫(全大寫/標題/自然)和位置(距底部邊距)。正確的組合取決於內容。
實作風格 — 選擇、調整或發明:
bold-overlay — 短格式科技發布,快節奏社交。2 字詞塊,全大寫,在標點處斷句,Helvetica 18 粗體,白色帶外框,MarginV=35。render.py 內建此風格作為 SUB_FORCE_STYLE。
FontName=Helvetica,FontSize=18,Bold=1,
PrimaryColour=&H00FFFFFF,OutlineColour=&H00000000,BackColour=&H00000000,
BorderStyle=1,Outline=2,Shadow=0,
Alignment=2,MarginV=35
natural-sentence(如果你發明此模式) — 敘事、紀錄片、教育。4–7 字詞塊,句子大小寫,在自然停頓處斷句,MarginV=60–80,較大字型以提高可讀性,略寬的最大寬度。無內建 force_style — 如果需要則自行設計。
如果兩者都不適合,發明第三種風格。硬性規則:字幕最後套用(規則 1),輸出時間軸偏移(規則 5)。
動畫(當要求時)
動畫要匹配內容與品牌。從對話中取得色板、字型與視覺語言 — 絕不假設預設值。如果使用者未告知,在策略階段提出色板並在建立任何東西之前等待確認。
工具選項:
每個動畫插槽選擇引擎。不要僅僅因為動畫與網頁相關就預設使用 Remotion。
- HyperFrames — 瀏覽器原生 HTML/CSS/GSAP 影片合成:產品 UI 動畫、網站轉影片或模型轉影片捕捉、動態文字、登陸頁面/故事板宣傳、資料驅動 UI 狀態、透明 WebM 覆蓋層,以及需要確定性幀捕捉加上 HyperFrames lint/validate/render 檢查的片段。最適合動畫應像網頁合成而非 React 元件樹一樣創作與驗證的情況。
- Remotion — React/CSS 合成,具有元件狀態、可重複使用的 React 原語或現有 Remotion 品牌系統。最適合使用者特別要求 React/Remotion 或 React 合成是更簡單創作模型的情況。
- Manim — 正式圖表、狀態機、方程式推導、圖形變形。閱讀
skills/manim-video/SKILL.md及其參考資料以深入了解。 - PIL + PNG 序列 + ffmpeg — 簡單覆蓋卡片:計數器、打字機文字、單條揭示、漸進繪製。迭代快速,可實現任何美學。發布影片使用了這個。
對於 HyperFrames 插槽,在 edit/animations/slot_<id>/ 內使用 npx --yes hyperframes init . --example blank --non-interactive --skip-skills 建立脚手架,在那裡建立 HTML 合成,執行適合該插槽的 HyperFrames 檢查(lint、validate,以及在可行時進行草稿渲染),然後使用 npx --yes hyperframes render . -o render.mp4 或需要 Alpha 時使用 --format webm -o render.webm 產生最終覆蓋影片。將 EDL 覆蓋 file 指向實際渲染路徑。
對於 Remotion 插槽,將 Remotion 專案隔離在相同插槽目錄內,使用 npx create-video@latest 建立脚手架或在那裡本地安裝 Remotion,使用專案本地的 remotion render 指令將合成渲染為 render.mp4,並使用 ffprobe 驗證時長與尺寸。
沒有強制要求。如果混合有用則發明混合方式(例如,PIL 背景加上 HyperFrames 或 Remotion 圖層)。
時長經驗法則,視情境而定:
- 同步旁白的解釋。 觀眾需要以 1 倍速解析內容。粗略下限 3 秒,簡單卡片通常 5–7 秒,複雜圖表 8–14 秒。發布影片的簡單卡片為 5–7 秒。
- 節拍同步的重音(音樂影片、快速混剪)。0.5–2 秒即可 — 它們是視覺重音,而非資訊。"1 倍速可讀"規則變成"1 倍速可辨識",而非"完全可解析"。
- 在剪輯前保持最終幀 ≥ 1 秒(通用)。
- 在旁白之上: 總時長 ≥
narration_length + 1s(通用)。 - 絕不平行揭示獨立元素 — 眼睛無法同時追蹤兩個新事物。一個事物,暫停,下一個事物。
動畫時機(同步旁白規則): 取得關鍵詞的時間戳。在關鍵詞說出前 reveal_duration 秒開始覆蓋動畫,使最終幀與口語關鍵詞同時出現。沒有此同步,動畫會感覺脫節。
緩動函數(通用 — 絕不使用 linear,看起來像機器人):
def ease_out_cubic(t): return 1 - (1 - t) ** 3
def ease_in_out_cubic(t):
if t < 0.5: return 4 * t ** 3
return 1 - (-2 * t + 2) ** 3 / 2
ease_out_cubic 用於單次揭示(緩慢著陸)。ease_in_out_cubic 用於連續繪製。
打字文字錨點技巧: 以完整字串的寬度為中心,而非部分字串寬度 — 否則文字在揭示過程中會向左滑動。
範例色板(發布影片 — 無限美學中的一種):
- 背景
(10, 10, 10)近黑色 - 強調色
#FF5A00/(255, 90, 0)橘色 - 標籤
(110, 110, 110)暗灰色 - 字型:Menlo Bold 位於
/System/Library/Fonts/Menlo.ttc(索引 1) - ≤ 2 種強調色,約 40% 空白空間,極簡裝飾
- 結果:終端機 / 復古科技感
這是一種風格。如果品牌是溫暖且襯線的,使用那種。如果是色彩豐富且活潑的,使用那種。如果使用者給了你風格指南,遵循它。如果沒有,提出一個並確認。
平行子代理簡報 — 每個動畫是一個透過 Agent 工具產生的子代理。每個提示是自包含的(子代理沒有父上下文)。包含:
- 一句話目標:"建立一個動畫:[規格]。沒有其他。"
- 絕對輸出路徑(
<edit>/animations/slot_<id>/render.mp4) - 精確技術規格:解析度、fps、編解碼器、pix_fmt、CRF、時長
- 風格色板作為具體數值(RGB 元組、十六進位或參考設計系統)
- 字型路徑與索引
- 逐幀時間軸(何時發生什麼,附緩動函數)
- 反列表("無裝飾、無額外內容、除非指定否則無標題")
- 程式碼模式參考(內聯複製輔助工具,不要跨插槽匯入)
- 交付檢查清單(腳本、渲染、透過 ffprobe 驗證時長、報告)
- "不要提問。如果任何內容不明確,選擇最明顯的解釋並繼續。"
一個子代理 = 一個檔案(唯一檔名,平行代理不會互相覆蓋)。
輸出規格
除非使用者要求特定規格,否則匹配來源。常見目標:1920×1080@24 電影感、1920×1080@30 螢幕內容、1080×1920@30 垂直社交、3840×2160@24 4K 電影、1080×1080@30 方形。render.py 預設將縮放設為 1080p(從任何來源);傳遞 --filter 或編輯提取指令以用於其他目標。值得詢問使用者哪種交付格式重要。
EDL 格式
{
"version": 1,
"sources": {"C0103": "/abs/path/C0103.MP4", "C0108": "/abs/path/C0108.MP4"},
"ranges": [
{"source": "C0103", "start": 2.42, "end": 6.85,
"beat": "鉤子", "quote": "...", "reason": "最乾淨的表達,在 38.46 處口誤前停止。"},
{"source": "C0108", "start": 14.30, "end": 28.90,
"beat": "解決方案", "quote": "...", "reason": "唯一沒有錯誤開始的錄影。"}
],
"grade": "warm_cinematic",
"overlays": [
{"file": "edit/animations/slot_1/render.mp4", "start_in_output": 0.0, "duration": 5.0}
],
"subtitles": "edit/master.srt",
"total_duration_s": 87.4
}
grade 是預設名稱或原始 ffmpeg 濾鏡。overlays 是已渲染的動畫片段。subtitles 是可選的,並在最後套用。
記憶 — project.md
每個工作階段在 <edit>/project.md 附加一個章節:
## 工作階段 N — YYYY-MM-DD
**策略:** 一段描述方法
**決策:** 錄影選擇、剪輯、調色、動畫 + 原因
**推理記錄:** 非明顯決策的單行理由
**待辦事項:** 延後項目
啟動時,如果 project.md 存在則讀取它,並在詢問是否繼續之前用一句話總結上一個工作階段。
反模式
無論風格如何,始終失敗的事項:
- 分層預計算編解碼器格式,附可用性 / 語氣標籤 / 鏡頭層級。過度工程化。在決策時從轉錄稿推導。
- 手動調整的時刻評分函數。 LLM 的選擇比任何你寫的啟發式方法都好。
- Whisper SRT / 短語層級輸出。 遺失亞秒間隙資料。始終使用逐詞逐字。
- 在 CPU 上本地執行 Whisper。 慢且會標準化填充詞。使用託管 Scribe。
- 在合成覆蓋動畫之前將字幕燒入基底。 覆蓋動畫會遮住它們。(硬性規則 1。)
- 在有覆蓋動畫時使用單次濾鏡圖。 二次編碼。使用逐段提取 → 串接。
- 線性動畫緩動。 看起來像機器人。始終使用三次方。
- 在片段邊界處硬剪音訊。 可聽見的爆音。(硬性規則 3。)
- 打字文字以部分字串為中心。 文字在增長時向左滑動。
- 多個動畫使用循序子代理。 始終平行。
- 在確認策略之前編輯。 絕不。
- 重新轉錄已快取的來源。 不可變輸入的不可變輸出。
- 預設這是哪種影片。 先看,再問,最後編輯。






