video-use

video-use

熱門

透過對話編輯任何影片。轉錄、剪輯、調色、生成覆蓋動畫、燒錄字幕 — 適用於談話性頭像、混剪、教學、旅遊、訪談。無預設、無選單。提問、確認計畫、執行、迭代、持續。製作正確性規則是硬性的;其他一切都是藝術自由。

1.8萬星標
2198分支
更新於 2026/7/1
SKILL.md
readonlyread-only
name
video-use
description

透過對話編輯任何影片。轉錄、剪輯、調色、生成覆蓋動畫、燒錄字幕 — 適用於談話性頭像、混剪、教學、旅遊、訪談。無預設、無選單。提問、確認計畫、執行、迭代、持續。製作正確性規則是硬性的;其他一切都是藝術自由。

Video Use

原則

  1. LLM 從原始轉錄稿與隨需視覺素材推理。 唯一值得保留的衍生產物是打包的逐詞轉錄稿(takes_packed.md)。其他一切 — 填充詞標記、重拍偵測、鏡頭分類、強調評分 — 都在決策時即時推導。
  2. 音訊優先,視覺跟隨。 剪輯候選來自語音邊界與靜音間隙。只在決策點深入檢視視覺素材。
  3. 提問 → 確認 → 執行 → 迭代 → 持續。 在使用者以白話文確認策略之前,絕不觸碰剪輯。
  4. 通用化。 不要預設這是哪種影片。先看素材,問使用者,然後再編輯。
  5. 藝術自由是預設值。 本文件中的每個具體數值、預設、字型、顏色、時長、音高結構與技術,都是來自一個經過驗證的影片的實作範例 — 並非強制規定。閱讀它們以了解可能性與為何有效。然後根據素材實際情況與使用者實際需求,做出你自己的品味判斷。你唯一必須做的事在下方「硬性規則」章節。 其他一切都是你的自由。
  6. 自由發明。 如果素材需要此處未描述的技術 — 分割畫面、子母畫面、下三分之一身分卡、反應剪輯、速度斜坡、凍結幀、交叉淡出、匹配剪輯、L 剪輯、J 剪輯、呼吸間的速度斜坡等 — 就建立它。輔助工具是 ffmpeg 和 PIL。它們能處理格式支援的任何功能。無需等待許可。
  7. 在展示給使用者之前,先驗證自己的輸出。 如果你不會出貨,就不要呈現。

硬性規則(製作正確性 — 不可協商)

這些是偏離會導致靜默失敗或輸出損壞的事項。它們不是品味問題,而是正確性問題。牢記它們。

  1. 字幕在濾鏡鏈中最後套用,在所有覆蓋動畫之後。否則覆蓋動畫會遮住字幕。靜默失敗。
  2. 逐段提取 → 無損 -c copy 串接,而非單次濾鏡圖。否則在加入覆蓋動畫時,每個片段都會被二次編碼。
  3. 每個片段邊界加上 30ms 音訊淡入淡出afade=t=in:st=0:d=0.03,afade=t=out:st={dur-0.03}:d=0.03)。否則每個剪輯點都會有可聽見的爆音。
  4. 覆蓋動畫使用 setpts=PTS-STARTPTS+T/TB 將覆蓋動畫的幀 0 偏移到其視窗起點。否則在覆蓋視窗期間會看到動畫的中間部分。
  5. 主 SRT 使用輸出時間軸偏移量output_time = word.start - segment_start + segment_offset。否則在片段串接後字幕會錯位。
  6. 絕不在單詞中間剪輯。 每個剪輯邊緣都對齊到 Scribe 轉錄稿中的單詞邊界。
  7. 每個剪輯邊緣加上緩衝。 工作視窗:30–200ms。Scribe 時間戳有 50–100ms 的漂移 — 緩衝可吸收漂移。快節奏時較緊,電影感時較鬆。
  8. 僅使用逐詞逐字 ASR。 絕不使用 SRT/短語模式(會遺失亞秒間隙資料)。絕不使用標準化填充詞(會遺失編輯訊號)。
  9. 每個來源快取轉錄稿。 除非來源檔案本身變更,否則絕不重新轉錄。
  10. 多個動畫使用平行子代理。 絕不循序。透過 Agent 工具同時啟動 N 個;總耗時 ≈ 最慢的那個。
  11. 執行前先確認策略。 在使用者批准白話文計畫之前,絕不觸碰剪輯。
  12. 所有工作階段輸出放在 <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 syncpip 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.pyhelpers/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/*.jsontakes_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 工具產生子代理。

流程

  1. 盤點。 對每個來源執行 ffprobe。對目錄執行 transcribe_batch.py。執行 pack_transcripts.py 產生 takes_packed.md。取一兩個 timeline_view 樣本作為視覺第一印象。

  2. 預掃描問題。 快速瀏覽 takes_packed.md 一次,記錄口誤、明顯說錯或應避免的措辭。純列表,提供給編輯簡報。

  3. 對話。 用白話文描述你所看到的。提出根據素材形塑的問題。收集:內容類型、目標長度/比例、美學/品牌方向、節奏感、必須保留的時刻、必須剪掉的時刻、動畫與調色偏好、字幕需求。不要使用固定檢查清單 — 每次的正確問題都不同。

  4. 提出策略。 4–8 句話:形狀、錄影選擇、剪輯方向、動畫計畫、調色方向、字幕風格、長度估計。等待確認。

  5. 執行。 透過編輯子代理簡報產生 edl.json。在模糊時刻深入檢視 timeline_view。在平行子代理中建立動畫。逐段套用調色。透過 render.py 合成。

  6. 預覽。 render.py --preview

  7. 自我評估(在展示給使用者之前)。渲染輸出(而非來源)在每個剪輯邊界(±1.5s 視窗)執行 timeline_view。檢查每個影像是否有:

    • 剪輯處的視覺不連續 / 閃爍 / 跳動
    • 邊界處的波形尖峰(音訊爆音未被 30ms 淡入淡出捕捉)
    • 字幕被覆蓋動畫遮擋(違反規則 1)
    • 覆蓋動畫錯位或顯示錯誤幀(違反規則 4)

    同時抽樣:前 2 秒、後 2 秒、以及 2–3 個中間點 — 檢查調色一致性、字幕可讀性、整體連貫性。對輸出執行 ffprobe 以驗證時長是否符合 EDL 預期。

    如果有任何失敗:修正 → 重新渲染 → 重新評估。自我評估最多 3 輪 — 如果 3 輪後仍有問題,向使用者標記而非無限循環。只有在自我評估通過後才呈現預覽。

  8. 迭代 + 持續。 自然語言回饋、重新規劃、重新渲染。絕不重新轉錄。確認後進行最終渲染。附加到 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=35render.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 檢查(lintvalidate,以及在可行時進行草稿渲染),然後使用 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 工具產生的子代理。每個提示是自包含的(子代理沒有父上下文)。包含:

  1. 一句話目標:"建立一個動畫:[規格]。沒有其他。"
  2. 絕對輸出路徑(<edit>/animations/slot_<id>/render.mp4
  3. 精確技術規格:解析度、fps、編解碼器、pix_fmt、CRF、時長
  4. 風格色板作為具體數值(RGB 元組、十六進位或參考設計系統)
  5. 字型路徑與索引
  6. 逐幀時間軸(何時發生什麼,附緩動函數)
  7. 反列表("無裝飾、無額外內容、除非指定否則無標題")
  8. 程式碼模式參考(內聯複製輔助工具,不要跨插槽匯入)
  9. 交付檢查清單(腳本、渲染、透過 ffprobe 驗證時長、報告)
  10. "不要提問。如果任何內容不明確,選擇最明顯的解釋並繼續。"

一個子代理 = 一個檔案(唯一檔名,平行代理不會互相覆蓋)。

輸出規格

除非使用者要求特定規格,否則匹配來源。常見目標: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。)
  • 打字文字以部分字串為中心。 文字在增長時向左滑動。
  • 多個動畫使用循序子代理。 始終平行。
  • 在確認策略之前編輯。 絕不。
  • 重新轉錄已快取的來源。 不可變輸入的不可變輸出。
  • 預設這是哪種影片。 先看,再問,最後編輯。