まとめ
この記事では、 Nuke Studioで使用可能なエクスポート トークンのリストを見つけて、エクスポーターで使用されるエクスポート パスをユーザーがさらにカスタマイズできるように追加のトークンを追加する方法について説明します。
詳細情報
Nuke Studioエクスポーター内のエクスポートトークンは、エクスポート対象として選択されたタスクに基づいて文字列に解決される特別なキーワードです。例えば、 {shot}エクスポートトークンはエクスポートするショットの名前を返します。このトークンはショットのエクスポート時にのみ使用できます。エクスポーターを使用しているユーザー名を返す{user}トークンなどの他のトークンは、シーケンス、ショット、またはクリップのエクスポート時に使用できます。
使用可能なトークンのリストは、次の方法で確認できます。
- パステンプレートにマウスを移動してツールチップを読む
- アクティブなパス テンプレートを右クリックし、 [キーワードの選択] を選択します。
- こちらのドキュメントをご覧ください: ローカルプリセットとプロジェクトプリセットの使用
追加トークンの追加
Python を使用すると追加のトークンを追加することができ、これにより、運用パイプラインなどの特定の環境でトークンがより適切に機能するようになります。
そのためには、特定のキーワードに対して呼び出され、トークンの代わりに最終パスで使用される文字列を返すリゾルバーを追加する必要があります。
リゾルバは次のインスタンスをオーバーライドすることで追加できます。
hiero .core.TaskPresetBase.addUserResolveEntries
メインのhiero .core.TaskPresetBase.addUserResolveEntriesをオーバーライドすると、リゾルバがすべてのエクスポート プロセッサに追加されます。
ただし、 hiero .exporters.FnShotProcessor.ShotProcessorPreset.addUserResolveEntriesなど、 addUserResolveEntriesの他のインスタンスの 1 つをオーバーライドすると、リゾルバはショット エクスポート プロセッサにのみ追加されます。
グローバルエクスポートトークンの追加
以下は、グローバル エクスポート トークンを追加する方法の例です。
import hiero .core
def global_addUserResolveEntries(self, resolver):
resolver.addResolver("{proj}", "First four characters of the project.", lambda keyword, task: task.projectName()[:4])
# This token can be applied to ANY export process, so add it to the base class
hiero .core.TaskPresetBase.addUserResolveEntries = global_addUserResolveEntries
この例では、プロジェクトの完全な名前を返すtask.projectName()[:4]を呼び出してプロジェクト名の最初の 4 文字を返し、次に Python 文字列構文を使用して最初の 4 文字のみを返します。
addResolver()関数には、トークンの名前 (キーワード)、ツールヒントとキーワードの選択ダイアログに表示されるトークンの説明、およびトークンの代わりにパスで使用される文字列を返す関数であるリゾルバの 3 つの引数が必要です。
ショット固有のエクスポートトークンの追加
以下は、ショット固有のエクスポート トークンを追加する方法の例です。
from hiero .exporters.FnShotProcessor import ShotProcessorPreset
def shot_addUserResolveEntries(self, resolver):
def plateWidth(task):
trackItem = task._item
media = trackItem.source().mediaSource()
return str(media.width())
resolver.addResolver("{platewidth}", "Returns the width of the source plate", lambda keyword, task: plateWidth(task))
resolver.addResolver("{plateheight}", "Returns the height of the source plate", lambda keyword, task: str(task._item.source().mediaSource().height()))
# This token will only be applied to the Shot Processor
ShotProcessorPreset.addUserResolveEntries = shot_addUserResolveEntries
この例では、ソースプレートの幅/高さの文字列を返します。幅はplateWidth()関数を呼び出すことで取得され、この関数はメディアソースの.width()メソッドの文字列を返します。高さも同様の方法で取得されますが、別の関数を呼び出すのではなく、1行で実行されます。両方のリボルバーはshot_addUserResolveEntries()関数に追加されるため、 addUserResolveEntriesオーバーライドすると、両方ともショットエクスポートプロセッサに追加されます。
上記の例をスクリプトエディタで実行すると、そのNuke Studioセッションのエクスポーターにトークンが追加されます。トークンが正しく動作していることを確認するには、パスにトークンを追加し、エクスポーターでパスのプレビューを確認してください。この場合、フルHD映像の解像度が返されます。
トークンは、 .nuke/Python/Startupディレクトリ内の Python (.py) ファイルに追加することで、 Nuke Studioセットアップに永続的に追加できます。 .nuke内に/Python/Startupディレクトリがまだ存在しない場合は、作成する必要があります。
さらに詳しく
Nuke Studioエクスポート システムの詳細については、次のドキュメントをご覧ください。
輸出システム
.nukeディレクトリを見つける方法については、次の場所を参照してください。
Q100048: Nukeディレクトリの場所
.nuke/ Python/Startupディレクトリに関する情報は、次の場所にあります。
Q100142: Nuke Studioの起動時にHiero Pythonコードを実行する方法
私たちはそれを聞いて申し訳ございません
理由をお聞かせください