Communitygithub.com

MusicProWorkshop/kinetic-film-to-resolve

將使用 scenario-kinetic-film 技能製作的動態排印影片(包含 spec.js 的影片資料夾)轉換為可編輯的 DaVinci Resolve 時間軸,每個鏡頭一個真實的 Fusion 合成,並對齊相同的節拍網格。

kinetic-film-to-resolve 是什麼?

這個技能會把一個動態排印(kinetic typography)影片的 spec.js 檔案,轉換成 DaVinci Resolve 的時間軸。轉換後的時間軸裡,每個鏡頭都是獨立的一個片段,並且擁有自己的 Fusion 合成,包含真實的 Text+ 和 Text3D 物件、關鍵幀攝影機,以及與原始影片一致的節拍時序。因此,剪輯師可以直接在 Resolve 的 Fusion 頁面中開啟任何一個鏡頭,自由修改文字、修剪長度或更換配樂。 此技能支援 Resolve Studio(需要正在運行並開啟專案),且需要原始影片資料夾內已安裝 Playwright 並完成 npm install。它會使用 Pillow 來測量字型,並依賴 ffmpeg。在開始轉換前,技能會引導使用者確認專案、時間軸名稱、字型(因為 Resolve 的 Text+ 僅能使用已安裝字型)以及音訊來源。整個工作流程包含匯出規格、建立時間軸、測量字型、分批建立 Fusion 合成、添加 HUD 與標記、輸出預覽幀與最終渲染,最後報告運動資料與審查結果。 為了確保可靠轉換,技能內建了多項限制與注意事項,例如:不要在建立合成時鎖定合成(否則片段會變黑)、不要使用 ExportCurrentFrameAsStill 進行預覽(會因 Fusion 尚未完成而回傳黑畫面或過時幀)、以及避免疊加動態模糊。詳情請參閱參考文件。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/MusicProWorkshop/davinci-resolve-skills/tree/HEAD/plugins/davinci-resolve-timelines/skills/kinetic-film-to-resolve

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

Kinetic 影片轉換至 DaVinci Resolve

將 kinetic 影片的 spec.js 轉換為 Resolve 時間軸,其中每個鏡頭都是一個獨立片段,並帶有其自身的 Fusion 合成:真實的 Text+ 和 Text3D、關鍵幀攝影機,以及相同的節拍時序。剪輯師隨後可以在 Fusion 頁面中開啟任何鏡頭,重新輸入文字、修剪或更換音樂。

這是使用 Resolve 工具進行的重建,而非像素級比對。請說明與原始版本相比有哪些變更(setup 會以 notes 形式回傳清單),並回報給使用者。

開始之前

  • Resolve Studio 正在運行中,且已開啟一個專案。請使用 get_resolve_status 檢查,並呼叫 get_whats_new 一次(Resolve 伺服器會要求)。
  • 影片資料夾包含 spec.js 及引擎檔案,且已在該資料夾中執行過 npm install playwright。
  • 在 Resolve 外部,需要有安裝 Pillow 的 Python 環境,用於測量字型。ffmpeg 需位於 PATH 環境變數中。

詢問使用者

在開始建置之前,請從對話中(如果可能的話)決定以下事項:

  1. **哪個專案。**時間軸會新增到已開啟的專案中。請告知使用者是哪個專案。切換專案可能會遺失他們未儲存的工作,因此如果是錯誤的專案,請要求他們切換。
  2. **時間軸名稱。**預設為 <標題> (Fusion)。檢視現有的時間軸,並選取一個未被使用的名稱。切勿重複使用或取代您在此工作階段中未建立的時間軸。
  3. **字型。**Text+ 只能看到已安裝的字型,而影片常用的 Archivo 通常不在其中。如果專案有顯示品牌字型,請使用它。呼叫 fonts_available(resolve, 'Lato', 'Inter') 來檢查;未經詢問請勿安裝字型。粗體字重(Black、Heavy、ExtraBold)閱讀效果最佳。
  4. **音訊。**可以來自現有時間軸的音樂剪輯(audio_from_timeline)、檔案(audio_from_file),或無音訊。如果某個時間軸已經包含此影片的音樂,請優先提供該選項,因為這樣可以保留使用者的編輯。

步驟

以下 SKILL 代表此技能的資料夾,F 代表影片資料夾。每個 Resolve 步驟都透過 run_script_unsafe 執行,該函數每次呼叫限制為 60 秒,並以以下程式碼開頭:

SKILL = r'<此技能資料夾路徑>'; F = r'<影片資料夾路徑>'
exec(open(SKILL + r'\scripts\resolve_build.py', encoding='utf-8').read())

1. 匯出規格(在 shell 中執行):

node "<SKILL>/scripts/export_film.mjs" "<F>"

此步驟會將檔案寫入 <F>/resolve/film.json,並將標誌匯出為透明 PNG,同時輸出它找到的區塊。

2. 建立時間軸:

result = setup(resolve, project, F, '我的影片 (Fusion)', 'Lato', 'Black', 'Inter', 'Medium')

最後兩個字型是給小文字列和模擬 UI 使用的。此步驟會建立時間軸、一個 Kinetic Films / <標題> 的資料夾、一個黑色佔位片段,並回傳鏡頭數量和 notes。時間軸尺寸和影格率來自專案設定,因此一個以 60 fps 製作的影片可以放到 30 fps 的時間軸上。此功能僅在 1920x1080、60 fps 下經過驗證,因此請仔細檢查其他格式。

3. 測量字型(在 shell 中執行,使用安裝了 Pillow 的 Python):

python "<SKILL>/scripts/measure_fonts.py" "<F>" Lato Black

如果沒有此步驟,文字將使用估計的寬度,可能無法很好地填滿畫面。如果回報找不到字型檔案,請繼續進行,但需仔細檢查排版是否正確。

**4. 建置。**重複執行直到 done 為 true;它會從上次中斷的地方繼續:

result = build_batch(project, F, 40)

然後添加 HUD(僅當影片有 HUD 時)、音訊和場景標記:

result = dict(hud=add_hud(project, F), audio=audio_from_timeline(project, F, '音樂剪輯'), markers=add_markers(project, F))

HUD 是時間軸上第二軌的一個 Fusion 片段,涵蓋整個影片。剪輯師可以停用該片段來移除 HUD。

**5. 檢查畫面。**在 Resolve 21.2 或更新版本上,此步驟會在幾秒內直接從時間軸匯出每個鏡頭中間畫面的標記圖表,無需渲染,也不會改變渲染設定。這些圖片會儲存到 <F>/resolve/review/。檢查是否有全黑畫面、文字是否保持在畫面內、提示文字是否清楚顯示、圖片是否覆蓋整個畫面。在渲染前修正任何問題。frame_grid(project, F, seconds=[4.2, 9.35]) 可以在指定時間點(例如甩鏡結尾)產出全尺寸畫面。

result = frame_grid(project, F)

這些畫面與相同影格渲染的結果一致(已在 21.2 上驗證)。在較舊的 Resolve 版本上,若沒有 ExportThumbnails 功能,則會引發錯誤,此時請改為從渲染結果判斷。

6. 渲染並測量動態。

result = start_render(project, F, 'my_film')    # 在有 GPU H.264 編碼器時優先選用
# 後續呼叫:result = wait_render(project, result_job_id, 50)

對於 30 秒、1080p60 的影片,在強勁的 GPU 上預計需要 2 到 4 分鐘。之後,僅移除您自己的工作,使用 remove_job。渲染佇列中可能包含使用者的其他工作。start_render 會變更專案的渲染設定,請告知使用者。

動態只能從影片中測量。如果 scenario-kinetic-film 的腳本已安裝,請對渲染結果執行 holds.py 和 dyn.py。目標是:靜止畫面不超過 40%,結束卡前無任何畫面停留超過 0.6 秒,中位數動態值為 2.5 或更高。請回報這些數字,包括未達標的項目。

若要修改內容,請修正後使用 setup(..., replace=True) 重建(僅限於此技能建立的時間軸),然後重複步驟 4 到 6。若要修正少數鏡頭,可以使用 rebuild_shots(project, F, [8.2, 13]) 僅替換指定時間點(以秒為單位)或鏡頭索引的合成,並保留其他所有內容。如果影片的文字有變更,請重新執行步驟 3。

**7. 完成。**除非使用者要求,否則將儲存動作留給使用者:儲存也會提交他們已開啟的其他未儲存編輯。回報時間軸名稱、備註、渲染時間和審查數據。請提及該佔位片段必須保留在其資料夾中,否則鏡頭可能會顯示為離線。

禁止事項及其原因

以下每一項都會耗費大量時間才能發現。詳細資訊請參閱 references/fusion-traps.md;在修改 fusion_lib.py 或遇到問題時,請先閱讀該文件。

  • **請勿在建立合成時鎖定合成。**否則片段會渲染為黑色。僅在建立 Loader 時可以鎖定,如同 Shot.loader 的做法;否則設定 Loader 的片段會在使用者螢幕上開啟一個強制性的檔案選擇器,從而停止所有腳本執行。
  • **請勿使用 ExportCurrentFrameAsStill 進行審查。**它會超過 Fusion 的處理速度,回傳黑色或過時的畫面。frame_grid 使用 Timeline.ExportFrame 和 ExportThumbnails,是可靠的,但僅限於目前時間軸:尚未開啟過的時間軸會在回報成功的同時匯出黑色畫面。
  • **請勿疊加動態模糊。**同時對文字自身的移動和攝影機套用模糊會使運算量倍增。僅對攝影機套用模糊,且僅在快速移動時。
  • **請勿假設更快的編碼器能解決渲染緩慢的問題。**Fusion 畫面生成通常是瓶頸。在變更設定前請先進行測量。

參考資料

  • references/block-map.md:說明 14 種區塊如何轉換以及哪些部分做了近似處理。如果影片使用了 Graph、Counters、Progress、Chain、Prompt、Notes 或 Rewind,或使用者詢問某個鏡頭的相似度,請閱讀此文件。
  • references/fusion-traps.md:透過經驗發現的 API 行為,以及如何恢復卡住的 Resolve。

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

相關技能