まとめ
この記事では、 Nuke Studioで使用可能なエクスポート トークンのリストを検索し、ユーザーがエクスポーターで使用されるエクスポート パスをさらにカスタマイズできるように追加のトークンを追加する方法について説明します。
詳しくは
Nuke Studio Exporter 内のエクスポート トークンは、エクスポート対象として選択されたタスクに基づいて文字列に解決される特別なキーワードです。たとえば、 {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/init.pyファイルに追加し、トークンが存在しない場合は作成することで、 Nuke Studioセットアップに永続的に追加できます。
参考文献
Nuke Studioエクスポート システムの詳細については、次のドキュメントを参照してください。
.nukeディレクトリの検索に関する情報は、次の場所にあります。
Python/Startup/init.pyに関する情報は、次の場所にあります。
私たちはそれを聞いて申し訳ございません
理由をお聞かせください