最近很多脚本工作都需要脱离nuke的gui环境运行,没有了script editor就必须要尝试Nuke Python module功能了。该模式可以执行大部分在GUI环境中的命令,在自动生成或者批量处理nuke工程时非常高效。
这意味着你现在可以在VFX流程中使用Python来做很多复杂的事,对于大部分的2DPython模块,3DPython模块以及视频编辑Python模块,这是一个易用的,产品级的,不可置信的,强有力的替代品。
无视python版本,通过Nuke你现在可以利用python.exe解释器而非Nuke.exe来充分的调用Nuke Python-API,来程序化的进行合成。这意味着你可以用python化的方法做一些事情,比如快速的对2000个镜头调色,或者通过五六行代码基于剪辑时间单子改变一系列淡入淡出效果的时间。你可以更容易的将Nuke连接到你的底层后端代码中,把Nuke集成到你的流程中甚至把Nuke放到其他的应用程序中。
要将Nuke作为一个Python模块使用你需要使用跟随Nuke一同装载的Python解释器(这个模块应该可以和其他的解释器一同工作,但随同Nuke一同装载的才受官方正式支持)。
<Nuke8.0-install-path>$ python.exe xxx.py
<Nuke8.0-install-path>$Nuke8.0v5.exe–t xxx.py
<Nuke8.0-install-path>$Nuke8.0v5.exe –x xxx.py
class nukeScriptOperator():
script_path = os.path.dirname(cmds.file(q =1 , location = 1)) + ‘/‘
if os.path.exists(‘C:/Program Files/Nuke8.0v5/‘):
nuke_folder = ‘C:/Program Files/Nuke8.0v5/‘
elif os.path.exists(‘C:/Program Files/Nuke8.0v1/‘):
nuke_folder = ‘C:/Program Files/Nuke8.0v1/‘
elif os.path.exists(‘C:/Program Files/Nuke9.0v1/‘):
nuke_folder = ‘C:/Program Files/Nuke9.0v1/‘
elif os.path.exists(‘C:/Program Files/Nuke9.0v5/‘):
nuke_folder = ‘C:/Program Files/Nuke9.0v5/‘
else:
nuke_folder = None
def __init__(self,script,firstframe,lastframe):
self.script = script
self.firstframe = firstframe
self.lastframe =lastframe
self.SourceSeqs = None
def writeRenderScript(self):
commandStr = "# -*- coding: utf-8 -*-\nimport nuke\nimport sys\nnuke.scriptOpen(‘%s‘)\nwriteNode = nuke.toNode(‘Write1‘)\np = os.path.dirname(nuke.toNode(‘Write1‘)[‘file‘].value())\nif not os.path.exists(p):\n os.makedirs(p)\nfirstframe = %s\nlastframe = %s\nnuke.execute(writeNode , firstframe , lastframe)\nprint ‘Success!‘"%(self.script,self.firstframe,self.lastframe)
f = open(script_path + ‘Render.py‘,‘w‘)
f.write(commandStr)
f.close()
def executePyScript(self):
if nuke_folder == None:
return None
nukeCommand = "%s/python.exe %s%s.py"%( nuke_folder , script_path , PyScript )
subPopen = subprocess.Popen( nukeCommand , cwd = nuke_folder )
return None
首先构建一个名为nukeScriptOperator的类,添加writeRenderScript()及executePyScript()两个方法,其中writeRenderScript()类用于生成一个执行渲染的py脚本,executePyScript()方法用于执行渲染。
其中executePyScript()中的nukeCommand = "%s/python.exe %s%s.py"%( nuke_folder ,script_path , PyScript )