Communitygithub.com

Kinetic Film to DaVinci Resolve

シネマティック・キネティック・フィルム(spec.jsを含むフィルムフォルダ)を編集可能なDaVinci Resolveタイムラインに変換し、各ショットに1つのFusionコンポジションを配置し、同じビートグリッドを維持します。

Kinetic Film to DaVinci Resolve とは?

このスキルは、`scenario-kinetic-film`スキルで生成されたキネティック・タイポグラフィ・フィルム(`spec.js`を含むフィルムフォルダ)を、DaVinci Resolveの編集可能なタイムラインに変換します。各ショットは個別のFusionコンポジションとして配置され、Text+やText3D、キーフレームによるカメラアニメーション、ビートタイミングがそのまま保持されるため、編集者はFusionページで各ショットの単語を修正したり、トリミングしたり、音楽を差し替えたりすることができます。このスキルはResolve Studio上で動作し、シェル、Python(Pillow必須)、およびResolveのスクリプトAPI(`run_script_unsafe`経由)を組み合わせて、spec.jsのエクスポート、タイムラインの作成、フォントの計測、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に質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

Kinetic film to DaVinci Resolve (キネティックフィルムをDaVinci Resolveへ)

キネティックフィルムの spec.js を、すべてのショットが1つのクリップとそれ自身のFusionコンポジション(実際のText+およびText3D、キーフレーム付きカメラ、同じビートタイミング)を持つResolveタイムラインに変換します。編集者は、任意のショットをFusionページで開き、単語を打ち直したり、トリミングしたり、音楽を差し替えたりできます。

これはResolveのツールでの再構築であり、ピクセル単位の一致ではありません。オリジナルから何が変わったか(setup がリストを notes として返します)を伝え、ユーザーに報告してください。

開始前の確認

  • Resolve Studioが起動しており、プロジェクトが開いていること。get_resolve_status で確認し、get_whats_new を1回呼び出してください(Resolveサーバーが要求します)。
  • フィルムフォルダに spec.js とエンジンファイルがあり、その中で npm install playwright が実行されていること。
  • PillowがインストールされたPython(Resolveの外部)がタイプ計測のために利用可能であること。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 を介して行われ、1回の呼び出しにつき60秒の制限があります。以下のように開始します。

SKILL = r'<this skill folder>'; F = r'<film folder>'
exec(open(SKILL + r'\scripts\resolve_build.py', encoding='utf-8').read())

1. specのエクスポート(シェルから実行):

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

<F>/resolve/film.json とロゴの透明PNGを書き出し、見つかったブロックを出力します。

2. タイムラインの作成:

result = setup(resolve, project, F, 'My Film (Fusion)', 'Lato', 'Black', 'Inter', 'Medium')

最後の2つのフォントは小さな行やモックUI用です。タイムライン、Kinetic Films / <タイトル> ビン、黒のプレースホルダークリップを作成し、ショット数と notes を返します。タイムラインサイズとフレームレートはプロジェクトから取得されるため、60 fpsで作成されたフィルムを30 fpsのタイムラインに配置することもできます。1920x1080、60 fpsでのみ実績があるため、他のフォーマットでは注意深く確認してください。

3. タイプの計測(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, 'Music Edit'), markers=add_markers(project, F))

HUDはトラック2上のフィルム全体を覆う1つのFusionクリップです。編集者はそのクリップを無効にすることで削除できます。

5. フレームの確認。 Resolve 21.2以降では、レンダリングやレンダリング設定の変更なしに、数秒でタイムラインから各ショットの中間のラベル付きシートを書き出します。書き出し先は <F>/resolve/review/ です。黒くなっていないか、単語がフレーム内に収まっているか、キッカーが単語をクリアしているか、画像がフレームを覆っているかを確認してください。レンダリング前に問題を修正します。frame_grid(project, F, seconds=[4.2, 9.35]) は、ホイップの終わりなど、指定した瞬間のフルサイズ画像を取得します。

result = frame_grid(project, F)

フレームは同じフレームのレンダリングと一致します(21.2で確認済み)。ExportThumbnails がない古いResolveではエラーが発生するため、代わりにレンダリングから判断してください。

6. レンダリングとモーションの計測。

result = start_render(project, F, 'my_film')    # GPU H.264エンコーダがある場合はそれを選択
# 以降の呼び出し: result = wait_render(project, result_job_id, 50)

強力なGPUで1080p60の30秒の場合、約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 を変更する前、または問題が発生した場合に読んでください。

  • コンポジションの構築中にロックしないでください。 クリップが黒くレンダリングされます。Shot.loader が行うように、Loader作成時のみロックしてください。そうしないと、Loaderのクリップを設定すると、ユーザーの画面にモーダルファイルピッカーが開き、すべてのスクリプトが停止します。
  • レビューに ExportCurrentFrameAsStill を使用しないでください。 Fusionより先に実行され、黒または古いフレームを返します。Timeline.ExportFrame と ExportThumbnails を使用する frame_grid は信頼性がありますが、現在のタイムラインでのみ有効です。開かれていないタイムラインは、成功を報告しながら黒いフレームを書き出します。
  • モーションブラーを重ねないでください。 単語の移動とカメラの両方にブラーをかけると、作業が倍増します。カメラのみ、高速移動中のみブラーをかけます。
  • 高速なエンコーダーが遅いレンダリングを修正すると想定しないでください。 通常、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.

関連スキル