Resolveタイムライン上の画面チュートリアル
チュートリアルの説明(film.json)とそのスクリーンショットから、編集者がそのまま作業を続けられるタイムラインを生成します。クリップには通常のインスペクターキーフレームが設定され、タイトルはインスペクターで制御可能なFusionタイトルとして配置され、シーンもマークされます。オーディオは追加されないため、ナレーションや音楽は後から追加できます。
Resolve APIではキーフレームやタイトルの長さを設定できないため、ビルドではタイムラインファイルにそれらを書き込んでインポートします。references/how-it-works.mdにその仕組みと既知の問題が説明されています。ステップが失敗した場合やResolveが21.2より新しい場合は、それを参照してください。
始める前に
- Resolve Studioが起動しており、プロジェクトが開かれていること。
get_resolve_statusで確認し、get_whats_newをsinceを21.0に設定して1回呼び出してください(Resolveサーバーが要求するため)。 - Resolve外部: Pythonと
pillow、およびffmpegがPATHに含まれていること。 - プロジェクトのタイムラインフォーマットは1920x1080であること。
preflightで確認します。
ユーザーと決定する
以下の項目について、会話から判断できる場合は判断し、不足しているものだけを質問してください。
- プロジェクト。 タイムラインは開かれているプロジェクトに追加されます。ユーザーにプロジェクト名を確認してください。プロジェクトを切り替えると未保存の作業が失われる可能性があるため、間違ったプロジェクトの場合はユーザー自身で切り替えてもらってください。
- スクリーンショット。 ユーザーから提供されるか、自分でキャプチャします。Playwrightを使用する場合は、1920x1080のビューポートと
deviceScaleFactor: 2を使用してください。画像は3840x2160で出力され、getBoundingClientRectで得られる位置はfilm.jsonにそのまま使用できます。提供された各画像を確認し、対象読者に適したものだけを使用し、除外したものをユーザーに伝えてください。 - ブランド。 色、フォント、ワードマーク、およびHostやAdminなどのラベル。まずユーザーのコードや以前のタイトルを確認してください。Text+はインストールされたフォントのみ表示されます。許可なくフォントをインストールしないでください。
- タイムラインの名前。 使用されていない名前を選んでください。自分で構築しなかったタイムラインを置き換えないでください。
フィルムを書く
フィルム用のフォルダを作成し、その中にfilm.jsonを書き込んでください。フォーマットはreferences/film-format.mdにあります。今すぐ読んでください。
適切なタイミングの目安:
- シーンは6〜10秒表示し、キャプションは2回読める時間(約8文字あたり1秒)を確保してください。
- カメラは約1秒で移動し、カーソルが動いたりハイライトが表示される前に落ち着く時間を取ってください。
- カーソルは約0.8秒で移動し、着地してから約0.3秒後にクリックします。
- クリックの結果は、新しいショットのレイアウトが現在のズームに合っていれば、クリック直後に新しいショットとして表示します。ページが完全に変わった場合は、クリック直後にシーンを終了し、ディゾルブで次のシーンに移行させてください。
- ディゾルブをまたいでカーソルを静止させるには、次のシーンのカーソルをフレーム上の同じ位置(
x' = tx + x * zoom)から開始してください。 - 各端に約3秒のカードを使用してください。
キャプションには、スクリーンショットに表示されている内容またはユーザーから指示された内容のみを記載し、推測した内容はレポートに記載してください。
このフォーマットで最も目立つ間違いは、ハイライトがボタンから外れることです。そのため、推定ではなく測定してください。画像は実際のサイズとは異なるスケールで表示されることがあるため、画像から直接位置を読み取らないでください。
python "<SKILL>/scripts/measure.py" grid shot.png grid.png
grid.png(フレーム座標がマークされた画像)を開いて、ボタンの塗りつぶし上の大まかな点を見つけてください。次に、正確な矩形を取得し、結果を確認します。
python "<SKILL>/scripts/measure.py" at shot.png 1250 470
python "<SKILL>/scripts/measure.py" show shot.png check.png 1200,450,180,40
近くの色と境界が似ているボタンはにじむ可能性があるため、警告を読み、矩形が大きすぎる場合は許容範囲を下げてください。
ビルド
SKILLはこのスキルのフォルダ、WORKはフィルムのフォルダです。シェルステップは任意の場所から実行します。Resolveステップはrun_script_unsafeを通して実行します。すべての呼び出しにtimeout: 60を渡してください(ツールのデフォルトは10秒で、ステップはそれより長くかかる可能性があるため)。各ステップは以下から始まります。
SKILL = r'<this skill folder>'; WORK = r'<film folder>'
exec(open(SKILL + r'\scripts\resolve_steps.py', encoding='utf8').read())
film.jsonが存在する前は、project_format(project)でプロジェクトのサイズ、フレームレート、タイムラインを取得し、fonts_available('Lato', ...)でインストールされているフォントとそのスタイルを取得できます。fpsは、特別な理由がない限りプロジェクトのフレームレートに設定してください。
1. プロジェクトを確認する。 先に進む前にproblemsにあるものを修正し、ユーザーの判断が必要なものはユーザーに確認し、notesがあれば伝えてください。このステップでは何も変更されません。
result = preflight(project, WORK)
2. 計画し、タイトルをインストールする。 警告を読み、film.jsonの中で重要なものを修正してください。これにより、ブランド用のタイトルがResolveのTemplatesフォルダにインストールされ(同じ名前のものがあれば置き換えられます)、そのことをユーザーに伝えてください。
python "<SKILL>/scripts/plan.py" "<WORK>"
python "<SKILL>/scripts/templates.py" "<WORK>" --install
3. タイムラインをビルドする。 構成要素をエクスポートし、タイムラインファイルを書き込み、インポートし、APIで設定できる設定を適用し、結果を確認し、このビルドで作成した2つのスクラッチタイムラインを削除します。このフォルダが構築したタイムラインのみを置き換え、それに対して行われた編集は失われるため、ユーザーが編集している可能性がある場合は先に確認してください。
result = build_film(project, WORK)
verify.problemsは空である必要があります。doneがfalseの場合、result = finish_batch(project, WORK)をtrueになるまで繰り返し、その後result = dict(verify=verify(project, WORK), cleanup=cleanup(project, WORK))を実行してください。Resolveが新しくインストールされたタイトルを認識するまでに数秒かかることがあるため、build_filmはそれを待ちます。それでも挿入できない場合は、ユーザーに作業を保存した後、Resolveを再起動するよう依頼してください。
ビンの削除は行わないでください。ここでも後片付けでも同様です。クリップはあるビンから別の場所のタイムラインにリンクされることがあります(references/how-it-works.mdを参照)。
4. 確認する。 タイムラインから直接、フレームのラベル付きシートをエクスポートします。各シーン、各ハイライトの中間、各クリックの直後です。これには数秒かかり、レンダリングは不要なため、レンダリング設定は変更されません。シートはbuild/review/に開かれます。
result = review_frames(project, WORK)
ハイライトが要素に合っているか、カーソルが正しい位置に着地しているか、リップルが見えるか、キャプションが収まっているか、黒くなっていないかを確認してください。より詳しく確認するには、review_frames(project, WORK, seconds=[10.5, 20.2])で、タイムライン秒で指定した瞬間のフルサイズ画像を取得できます。plan.pyは各シーンの開始時刻を出力するため、シーン時間から変換できます。
フレームは、Resolve 21.2でテストされた同じフレームのレンダリングと一致します。review_framesは21.2のフレームエクスポートAPIを必要とします。古いResolveではエラーが発生するため、以下のレンダリングで代用します。リファレンスなしでreview.pyを実行すると同じシートが得られます。
5. ファイルが必要な場合にレンダリングする。 ユーザーに動画を提供する場合、またはremotion-to-resolveの比較のためにレンダリングします。start_renderはプロジェクトのレンダリング設定を変更するため、そのことを伝えてください。
result = start_render(project, WORK, 'review')
result = wait_render(project, '<job id>', 50) # ステータスがCompleteになるまで繰り返す
python "<SKILL>/scripts/review.py" "<WORK>" "<WORK>/build/render/review.mp4"
自分のジョブのみを削除してください。キューにはユーザーのジョブが含まれている可能性があるためです。
result = remove_job(project, '<job id>')
何かを変更するには、film.jsonを編集し、plan.pyを実行し、再度build_filmを呼び出し、その後確認してください。レンダリングした場合は、先にジョブを削除してください。ブランドやfpsが変更された場合は、templates.pyも再実行してください。ユーザーが手動でタイムラインを編集した場合は、再構築前に確認するか、タイムライン上で手動で変更を行ってください。
終了
ユーザーから依頼がない限り、保存はユーザーに任せてください。保存は、開いている他の未保存の編集もコミットするためです。以下を報告してください。
- タイムラインとビン、およびトラック
- タイトルがインストールされた場所
- 新しいタイムラインが現在のタイムラインになったこと(
preflightが開いていたタイムラインの名前も記載)、レンダリングした場合はレンダリング設定が変更されたこと - 推測したキャプションの文言、およびスクリーンショットが指示と矛盾する点
- 確認した内容と確認しなかった内容。フレームは画像を表示しますが、動きやResolve上のインスペクターとタイムラインの見た目は確認できません。
- 近似した内容と以下の制限: オーディオなし、静止画のみ、カメラ移動中にフレーム上に固定されたハイライト
クリップはディスク上のファイルからリンクされるため、フィルムのフォルダやスクリーンショットを移動するとクリップがオフラインになります。build/assets/も保持してください。カーソルと背景がそこにあります。
Effects Libraryからブランドのタイトルを削除するには、templates.py "<WORK>" --uninstallを実行してください。このブランドの4つのファイルのみが削除されます。すでに構築されたタイムラインは独自のコピーを保持するため、削除後のレンダリングは同一でした。