资讯详情

资讯详情

Natron Python API 参考指南:NatronEngine 与 NatronGui 模块架构、核心类与实战脚本

音视频视频处理图形学桌面应用【免费下载链接】NatronOpen-source video compositing software. Node-graph based. Similar in functionalities to Adobe After Effects and Nuke by The Foundry.项目地址https://gitcode.com/gh_mirrors/na/Natron点击查看免费下载本篇技术指南以 Natron 官方文档《Python API》APIReference.rst为骨架系统梳理 Natron 暴露给 Python 的两大模块NatronEngine核心引擎、任何模式下可用与NatronGui仅 GUI 模式可用并深入讲解PyCoreApplication、App、Effect、Param等核心类的成员函数、参数语义与底层实现依据。读完本文你将能够直接编写可运行的 Natron Python 脚本创建与连接节点、读写参数与关键帧、设置表达式、添加用户参数并在命令行背景模式Natron -b/NatronRenderer下完成自动化渲染流程。一、Natron Python API 的总体架构Natron 在启动时将自身的 Python 接口划分为两个原生加载的内置模块所有类与全局对象都罗列在官方 API 参考中NatronEngine核心模块任何执行模式下都会由 Natron 原生加载即无需任何import即可在脚本中访问其中的类。参考 NatronEngine/index.rst。该模块包含App、Effect、Param、PyCoreApplication、Roto、Tracker等全部 43 个类页面。NatronGui仅在 GUI 模式下加载的扩展模块包含GuiApp、PyGuiApplication、PyModalDialog、PyPanel、PyTabWidget、PyViewer等 6 个类页面参考 NatronGui/index.rst。两个模块之间通过继承关系衔接NatronGui.GuiApp继承自NatronEngine.AppNatronGui.PyGuiApplication继承自NatronEngine.PyCoreApplication因此 GUI 对象天然拥有引擎模块的全部能力。1.1 全局对象 natron 与导入规范Natron 进程内存在唯一的natron变量分别指向NatronEngine.PyCoreApplication或NatronGui.PyGuiApplication具体取决于你导入哪个模块。官方文档natronobjects.rst明确给出以下导入规则# 错误同时导入会导致 natron 指向不符合预期 # from NatronEngine import * # from NatronGui import * # 正确分别导入模块 import NatronEngine import NatronGui # 方便起见可以给两个 natron 取别名 from NatronEngine import NatronEngine.natron as NE from NatronGui import NatronGui.natron as NG如果你只使用from NatronEngine import *则natron指向PyCoreApplication如果需要 GUI 功能必须改用from NatronGui import *获取PyGuiApplication。1.2 GUI 与背景模式的守卫写法由于NatronGui在命令行背景模式下并不存在任何既要后台跑又要 GUI的脚本都必须先查询运行模式。官方推荐写法if not NatronEngine.natron.isBackground(): # 仅在 GUI 模式下执行的代码放在这里 pass这一模式贯穿所有需要区分执行环境的 API 调用如Effect.setPosition、getPosition等 GUI 相关函数在背景模式中无效。二、自动声明变量script-name 与 labelNatron 为Effect、Param、Layer、BezierCurve、App、Track、PyCoreApplication、PyTabWidget、PyViewer、PyPanel等对象在创建时自动声明 Python 变量详见 scriptvslabel.rst使得可以直接用变量访问node app1.Blur1 # 而不是 app1.getNode(app1.Blur1)为了满足 Python 语法每个对象都有两个名字script-name用于自动声明变量的名字只含字母数字、不以数字开头、创建后不可更改、全局唯一label显示在界面上的名字可含任意字符、可重名。函数传参如getParam(name)、createNode的pluginID一律使用 script-name。script-name 的获取途径GUI 中悬停节点标签的工具提示见 nodeScriptName.png、参数工具提示paramScriptName.png或代码中调用getScriptName()。三、PyCoreApplication进程级全局 APIPyCoreApplication参考 PyCoreApplication.rst代表唯一的Natron 后台进程实例通过预声明的natron访问。它不承载项目数据只提供环境、版本、插件与回调管理能力。对应的 C 实现位于 Engine/PyAppInstance.cpp。3.1 环境与版本查询函数返回值语义isBackground()是否以命令行背景模式运行无 GUIisLinux()/isMacOSX()/isWindows()/isUnix()/is64Bit()平台判断isUnix()等价于isLinux() or isMacOSX()getNatronVersionString()版本字符串如1.1.0getNatronVersionMajor()/Minor()/Revision()主/次/修订版本号getNatronVersionEncoded()编码为整数的版本号可直接比较如 20101表示 2.1.1getBuildNumber()RC 构建号RC11、RC22…getNatronDevelopmentStatus()Alpha / Beta / RC / Release 之一getNumCpus()硬件最大并发数8 核超线程返回 163.2 插件发现ids natron.getPluginIDs() # 全部已加载插件 ID ids natron.getPluginIDs(Blur) # 仅包含 Blur不区分大小写3.3 回调注册与搜索路径natron.setOnProjectCreatedCallback(myOnProjectCreated) # 等价于 NatronEngine.settings.afterProjectCreated.set(...) natron.setOnProjectLoadedCallback(myOnProjectLoaded) # 等价于 NatronEngine.settings.defOnProjectLoaded.set(...) natron.appendToNatronPath(/path/to/plugins) # 追加插件搜索路径 paths natron.getNatronPath()回调函数注册可覆盖 Preferences → Python 中对应项官方推荐在init.py中利用它完成所有项目通用初始化例如批量添加格式。3.4 实例访问app natron.getInstance(0) # 0 基索引返回 app1 app natron.getActiveInstance() # 用户最后交互的项目 count natron.getNumInstances()注意getInstance的索引是0 基的取app1要传 0。四、App项目实例 APIApp参考 App.rst代表一个打开的项目继承自Group。每打开一个新项目自动创建一个 App由 Natron 预声明为app1、app2……背景模式下永远只有一个项目Natron 会自动执行app app1因此脚本无需关心实例编号。4.1 创建节点createNode(pluginID[, majorVersion-1[, groupNone[, propertiesNone]]])是核心入口reader app.createNode(fr.inria.openfx.ReadOIIO) # 最高版本 group app.createNode(fr.inria.built-in.Group) reader app.createNode(fr.inria.openfx.ReadOIIO, -1, group) # 放入 groupmajorVersion-1表示实例化插件最高可用版本。便捷封装createReader(filename)/createWriter(filename)会依据文件名自动挑选最佳解码/编码插件多个插件可处理同格式时如 ReadPSD 与 ReadOIIO 均可读 .psdNatron 按 Preferences 中的设置选择若需指定则改用createNode加精确插件 ID。相关 C 实现可参见 Engine/PyAppInstance.cpp 的App::createNode。4.1.1 createNode 的 properties 字典properties是一个字典键为下述属性名值为对应的包装类型实例BoolNodeCreationProperty、IntNodeCreationProperty、FloatNodeCreationProperty、StringNodeCreationProperty。官方完整示例app.createNode( net.sf.cimg.CImgBlur, -1, app, dict([ (CreateNodeArgsPropSettingsOpened, NatronEngine.BoolNodeCreationProperty(True)), (CreateNodeArgsPropNodeInitialParamValues, NatronEngine.StringNodeCreationProperty(size)), (CreateNodeArgsPropParamValue_size, NatronEngine.FloatNodeCreationProperty([2.3, 5.1])) ]) )全部受支持属性未知属性会在 Script Editor 打印警告属性名维数/类型默认值说明CreateNodeArgsPropPluginID1 / string无插件 ID必填由createNode首参自动设置CreateNodeArgsPropPluginVersion2 / int-1,-1插件版本(-1,-1) 取最高版本CreateNodeArgsPropNodeInitialPosition2 / float无节点在 NodeGraph 的初始位置默认按界面状态放置CreateNodeArgsPropNodeInitialName1 / string无节点初始 script-name默认插件 label 序号CreateNodeArgsPropNodeInitialParamValuesN / string无需要同时设置默认值的参数 script-name 序列各默认值以CreateNodeArgsPropParamValue_参数名属性给出类型须与参数数据类型一致CreateNodeArgsPropOutOfProject1 / boolFalseTrue 时节点不属于项目不出现在界面、不随项目保存仅供脚本内部使用CreateNodeArgsPropNoNodeGUI1 / boolFalseTrue 时不创建该节点的 GUIOutOfProjectTrue 隐含此项CreateNodeArgsPropSettingsOpened1 / boolFalseTrue 时创建后不自动打开设置面板CreateNodeArgsPropAutoConnect1 / boolFalseTrue 时依据当前选择自动连线CreateNodeArgsPropAddUndoRedoCommand1 / boolFalse创建时是否压入撤销/重做栈CreateNodeArgsPropSilent1 / boolTrueTrue 时创建过程不弹出任何信息/错误/警告/文件对话框其中初始参数值机制对应 C 端CreateNodeArgs的属性系统见 Engine/CreateNodeArgs.cpp 与 Engine/CreateNodeArgs.h。4.2 项目格式与图层管理app.addFormat(HD 1920x1080 1) # 名称(无空格) 宽x高 像素宽高比格式错误会被忽略并打印警告 app.addProjectLayer(ImageLayer) # 追加项目级图层名字唯一各节点图层菜单需手动刷新 names app.getViewNames() # 项目设置 Views 标签页中定义的所有视图名4.3 渲染两种重载形式# 形式一渲染单个 effect 的帧范围 app.render(effect, 1, 10, 2) # 渲染帧 1,3,5,7,9frameStep 默认取 Write 节点的 Frame Increment # 形式二任务列表各任务并发渲染多 Writer 后台渲染即走此路径 app.render([(writer1, 1, 10, 1), (writer2, 1, 10, 1)])render仅在背景模式下是阻塞调用渲染结束才返回且官方限定仅用于 Write 节点或 DiskCache 节点。GUI 模式下请使用NatronGui.GuiApp.renderBlocking。4.4 时间线与项目存取lb app.timelineGetLeftBound() # 项目帧范围左边界 rb app.timelineGetRightBound() # 右边界 t app.timelineGetTime() # 当前时间全部 Viewer 共享同一条时间线 appid app.getAppID() # 0 基实例编号 ok app.saveProject(path.ntp) # 保存GUI 模式下 filename 为空则弹窗询问 ok app.saveProjectAs(path.ntp) # 另存为 ok app.saveTempProject(path.ntp) # 保存副本但不更新项目路径/最后保存时间等项目属性 newApp app.loadProject(path.ntp) # GUI 下当前窗口有改动时开新窗口背景模式下替换当前项目 ok app.resetProject() # 关闭当前项目不关窗口GUI 下用户可取消 ok app.closeProject() # 同 resetProject 但关闭窗口最后一个 App 关闭时 Natron 退出 newApp app.newProject() # 新建项目项目参数与全局偏好设置均为Param类型param app.getProjectParam(frameRange) # 项目设置参数 settings natron.getSettings() # 全部偏好设置AppSettings 对象app.writeToScriptEditor(message)可向 Script Editor 面板输出信息、警告或错误是脚本与用户交互的重要通道。五、Effect节点 APIEffect参考 Effect.rst继承Group与UserParamHolder代表节点图中一个插件实例。节点创建后Natron 自动为它声明同名变量并暴露全部参数与输入。5.1 输入管理输入以0 基索引映射inp node.getInput(0) # 或按输入名 node.getInput(Source) ok node.connectInput(0, otherNode) # 内部先调用 canConnectInput 校验 node.disconnectInput(0) # 断开输入 n node.getMaxInputCount() # 输入箭头数量 lab node.getInputLabel(0) # 节点图中输入箭头上的标签canConnectInput(inputNumber, node)返回 False 的情形包括该输入位已有连接、node 为 None、输入位越界、node 不可被连接如 BackDrop/Output、存在循环引用等。5.2 参数访问p node.getParam(size) # 按 script-name 取参数不存在返回 None ps node.getParams() # 全部参数序列5.3 变更批处理beginChanges()/endChanges()构成阻塞评估的括号括号内所有setValue、输入连接变化都不会触发渲染与onParamChanged回调直到endChanges()将全部变更压缩为一次求值node.beginChanges() param1.setValue(...) param2.setValue(...) node.connectInput(0, otherNode) node.endChanges() # 此刻才触发一次新渲染这是避免改多个参数导致多次无效渲染的标准手段对应引擎层求值抑制机制。5.4 节点信息与销毁pid node.getPluginID() # 该节点实例化的插件 ID bd node.getBitDepth() # 输出位深ImageBitDepthEnum pm node.getPremult() # 输出预乘状态 fmt node.getOutputFormat() # 输出格式RectI像素单位 fps node.getFrameRate() par node.getPixelAspectRatio() rod node.getRegionOfDefinition(time, view) # 规范坐标下输出包围盒RectD即设置面板 Info 标签页的 Output 值 layers node.getAvailableLayers() # dict: ImageLayer - 产生该图层的最上游 Effect node.destroy(autoReconnectTrue) # 永久移除节点autoReconnectTrue 时下游自动改接本节点输入另有判定类函数isReaderNode()、isWriterNode()、isOutputNode()无输出的输出节点。5.5 节点图外观控制仅 GUI 有效node.setPosition(x, y) # 背景模式下无效getPosition 恒返回 [0,0] node.setSize(w, h) node.setColor(r, g, b) # [R,G,B] 三元组 node.setLabel(name) # 显示名 node.setScriptName(name) # 内部名重命名后旧变量失效需用新名访问 node.isUserSelected()setScriptName有重要副作用会删除旧 script-name 声明的变量并新建新变量例如把app1.Blur1改为BlurOne后app1.Blur1会抛出NameError。5.6 自定义输出平面node.addUserPlane(MyLayer, [R, G, B, A])planeName不得含空格或非 Python 合规字符通道数至少 1、至多 4。成功后最终用户可在节点设置面板的 Channels 选择器中选用该平面输出。5.7 子图与页面控制node.setSubGraphEditable(False) # 禁止用户在 GUI 中编辑该 group 子图防止误破坏 node.setPagesOrder([Settings, User]) # 按 script-name 重排设置面板页面顺序 node.getUserPageParam() # 用户页面参数PageParam不存在返回 None六、Param 体系参数基类与属性语义Param参考 Param.rst是所有参数的基类节点设置面板中的每个控件、项目设置、偏好设置都是一个 Param。其继承树为Param→ParametricParam、PageParam、GroupParam、ButtonParamParam→AnimatedParam→StringParamBase→StringParam、FileParam、OutputFileParam、PathParam、BooleanParam、ChoiceParam、ColorParam、DoubleParam/Double2DParam/Double3DParam、IntParam/Int2DParam/Int3DParam6.1 参数属性总表官方文档给出完整属性表下表为精简整合完整表见 Param.rst属性类型动态SetterGetter默认值name / labelstring否无getScriptName/getLabelhelpstring是setHelp(*)getHelpaddNewLinebool否setAddNewLine(*)getAddNewLineTruepersistentbool是setPersistant(*)getIsPersistantTrueevaluatesOnChangebool是setEvaluateOnChange(*)getEvaluateOnChangeTrueanimatesbool否setAnimationEnabled(*)getIsAnimationEnabled见注(1)visiblebool是setVisiblegetIsVisibleTrueenabledbool是setEnabledgetIsEnabledTruemin / max / displayMin / displayMaxint/double是setMinimum(*)等getMinimum等INT_MIN / INT_MAX仅 Int/Double/Color 类参数optionsliststring是setOptions/addOption(*)getOption空列表仅 ChoiceParamsequenceDialogbool是setSequenceEnabled(*)无False仅 File/OutputFileParamtypeTypeEnum否setType(*)无eStringTypeDefault仅 StringParammultiPathTablebool否setAsMultiPathTable(*)无False仅 PathParamisTabbool否setAsTab(*)无False仅 GroupParam重要语义带(*)的 Setter只能作用于用户参数对 OpenFX 插件声明的参数无效非动态属性必须在调用refreshUserParamsGUI()之前设置GUI 生成后不可再改注(1)animates默认仅在 IntParam/Int2DParam/Int3DParam、DoubleParam/Double2DParam/Double3DParam、ColorParam 上为 TrueParametricParam、GroupParam、PageParam、ButtonParam、FileParam、OutputFileParam、PathParam 完全不可动画enabledFalse时参数文字变黑且不可编辑visibleFalse时从界面隐藏。6.2 常用方法p.copy(otherParam) # 复制值/动画/表达式dimension-1 时复制 min(两个参数维度数)类型需可转换StringParam 不可转换 val p.curve(time) # 取动画曲线在该时间的值忽略叠加的表达式 p.slaveTo(otherParam, thisDim, otherDim) # 本参数 thisDim 受控于 otherParam 的 otherDim直到 unslave(thisDim) p.unslave(dimension) ok p.setAsAlias(otherParam) # 别名完全控制 otherParam同类型同维度Choice 菜单会同步更新copy与slaveTo要求类型匹配copy只复制值而不复制属性跨 ChoiceParam 复制时需保证索引对接收方有意义否则会产生未定义行为。6.3 可复现随机数r p.random(min0., max1.) # 同一参数在同一时间点恒返回相同值 r p.random(min, max, time, seed) # 显式 timeseed 精确复现random(0,1,frame,2)-random(0,1,frame,2) 恒为 0 i p.randomInt(min, max) # 整数版 i p.randomInt(min, max, time, seed)多次在同一表达式调用random()会返回不同值但同一时间点再次求值结果一致——这是制作循环、循环动画等程序化表达式的基石。底层实现见 Engine/PyParameter.cppParam::random/randomInt委托给 Knob 的random。七、动画与表达式AnimatedParamAnimatedParam参考 AnimatedParam.rst是所有可动画参数的基类。参数至少有 1 个关键帧才可动画两个关键帧后 Natron 自动插值新关键帧默认 Smooth 插值表达式优先级高于动画曲线表达式存在时参数值由表达式计算。p.setValueAtTime(value, time, dimension) # 派生类中具体实现添加关键帧 p.deleteValueAtTime(time, dimension0) p.getNumKeys(dimension0) # 关键帧数量 idx p.getKeyIndex(time, dimension0) # 关键帧索引不存在返回 -1 ok, t p.getKeyTime(index, dimension) # (是否存在, 关键帧时间) p.removeAnimation(dimension0) # 清除动画但不清除表达式 p.setInterpolationAtTime(time, NatronEngine.Natron.KeyframeTypeEnum.eKeyframeTypeConstant, 0) p.getIsAnimated(dimension0) # 曲线是否有 1 关键帧 d p.getDerivativeAtTime(time, dimension0) # 曲线导数有表达式时无意义 v p.getIntegrateFromTimeToTime(t1, t2) # 曲线区间积分有表达式时无意义 expr p.getExpression(dimension) p.setExpression(ret frame * 0.5, False, 0) # hasRetVariableFalse 时 Natron 自动声明 retsetExpression的hasRetVariable决定表达式是否自带ret变量若为 FalseNatron 替你声明。C 端实现在 Engine/PyParameter.cppAnimatedParam::setExpression/getExpression。八、常用参数类型速览IntParam / Int2DParam / Int3DParam参考 IntParam.rst1~3 维整数。get()/get(frame)、set(x)已动画时自动在当前位置打关键帧、set(x, frame)、setValue、setValueAtTime、getValueAtTime、getDefaultValue/setDefaultValue、getMinimum/setMinimum/getMaximum/setMaximum硬边界越界被 clamp与getDisplayMinimum/setDisplayMinimum滑块显示边界内部值可超。UI 截图见 doubleParam.pngInt 与 Double 界面相同、double2DParam.png、double3DParam.png。DoubleParam / Double2DParam / Double3DParam浮点版本方法签名与 Int 系列对称get、set、setValueAtTime、getValueAtTime、min/max/displayMin/displayMax 全套。BooleanParam复选框set/get。ChoiceParam参考 ChoiceParam.rst下拉菜单内部存 0 基索引addOption(option, help)、setOptions(list)、getOptions()、getNumOptions()、getOption(index)、set(label)不区分大小写匹配选项未命中无操作、set(x)、setValueAtTime。ColorParamRGBA 颜色useAlpha控制是否含 Alpha 维配合ColorTuple使用。StringParam / StringParamBase文本setType可切换类型默认eStringTypeDefault。FileParam / OutputFileParam / PathParam文件/输出文件/目录路径setSequenceEnabled控制序列对话框。GroupParam / PageParam / ButtonParam分组可折叠、可setAsTab变成选项卡、设置面板页面Tab、按钮点击回调见下文回调机制。ParametricParam参考 ParametricParam.rst参数化曲线如 ColorLookup 节点或 ColorCorrect 节点的 Ranges 标签页。维度数等于曲线数由createParametricParam(name,label,nbCurves)静态指定操作方式与动画曲线类似status curve.addControlPoint(dim, key, value) # 默认 Smooth 插值 status curve.addControlPoint(dim, key, value, lDeriv, rDeriv) # 带左右导数 status curve.setNthControlPoint(dim, nthCtl, key, value, lDeriv, rDeriv) status curve.setNthControlPointInterpolation(dim, nthCtl, NatronEngine.Natron.KeyframeTypeEnum.eKeyframeTypeConstant) n curve.getNControlPoints(dim) info curve.getNthControlPoint(dim, nthCtl) # [status, key, value, 左导数, 右导数] y curve.getValue(dim, parametricPosition) # X 轴上某位置的曲线 Y 值 curve.deleteControlPoint(dim, nthCtl) curve.deleteAllControlPoints(dim) curve.setCurveColor(dim, r, g, b) curve.setDefaultCurvesFromCurrentCurves()所有增删控制点类函数返回NatronEngine.Natron.StatusEnum.eStatusOK成功或eStatusFailed失败。九、用户参数UserParamHolderUserParamHolder参考 UserParamHolder.rst是Effect与PyModalDialog的抽象基类提供createXParam系列工厂createBooleanParam、createButtonParam、createChoiceParam、createColorParam(name,label,useAlpha)、createDoubleParam、createDouble2DParam、createDouble3DParam、createFileParam、createGroupParam、createIntParam、createInt2DParam、createInt3DParam、createOutputFileParam、createPageParam、createParametricParam(name,label,nbCurves)、createPathParam、createStringParam。关键规则node app.createNode(net.sf.cimg.CImgBlur) p node.createDoubleParam(mySize, My Size) # (script-name, label) # ... 设置属性、默认值 ... node.refreshUserParamsGUI() # 必须调用否则界面不更新 node.removeParam(p) # 只能移除用户参数不能移除 OpenFX 插件参数refreshUserParamsGUI()重建用户参数 GUI开销较大官方建议一次性批量修改后再调用一次参数基类中的非动态属性也必须在此调用前设置完毕。十、特殊上下文Roto 与 TrackerRoto参考 Roto.rst封装 Roto 节点的图层与形状管理通过Effect.getRotoContext()获取目前仅 Roto 节点有其余节点返回 None。roto app1.Roto1.roto layer roto.createLayer() bezier roto.createBezier(x, y, time) # 单控制点关键帧 ellipse roto.createEllipse(x, y, diameter, fromCenter, time) # fromCenterTrue 时 (x,y) 为中心 rect roto.createRectangle(x, y, size, time) # 边长 size 的正方形 base roto.getBaseLayer() # 顶层父图层 item roto.getItemByName(Bezier1) # 按 script-name 取项形状可经自动声明变量访问Roto1.roto.Layer1.Bezier1。Layer、BezierCurve、ItemBase详见各自参考页。Tracker参考 Tracker.rstEffect.getTrackerContext()获取跟踪上下文管理Track对象目前仅 Tracker 节点有。十一、AppSettings偏好设置编程访问AppSettings参考 AppSettings.rst通过natron.getSettings()获取行为与Effect的参数接口一致settings natron.getSettings() p settings.getParam(pluginID) # 按 script-name 取偏好参数 all settings.getParams() # 全部偏好参数 settings.restoreDefaultSettings() # 恢复出厂默认 settings.saveSettings() # 持久化到磁盘下次启动生效十二、NatronGui 模块GUI 专属 APIGUI 模式下natron指向PyGuiApplication继承PyCoreApplication项目对象为GuiApp继承App。参考 GuiApp.rst。12.1 系统对话框app.getFilenameDialog(filters, location) # 打开已存在文件filters 为扩展名列表 app.getSequenceDialog(filters, location) # 序列文件版 app.getDirectoryDialog(location) app.saveFilenameDialog(filters, location) # 保存对话框文件已存在时警告覆盖 app.saveSequenceDialog(filters, location) app.getRGBColorDialog() # 返回 ColorTuplelocation为空时显示上次打开的位置。12.2 选择、复制与布局sel app.getSelectedNodes(group) # groupNone 用最后交互的 NodeGraph传 app 取顶层 app.selectNode(node, clearPreviousSelection) app.deselectNode(node) app.setSelection(nodes) # 所有节点须在同一 NodeGraph app.selectAllNodes(group) / app.clearSelection(group) app.copySelectedNodes(group) / app.pasteNodes(group) tab app.getTabWidget(scriptName) # 按 script-name 取选项卡script-name 见 Manage layout 按钮提示 ok app.moveTab(tabScriptName, pane) viewer app.getViewer(scriptName) # viewer 的 script-name 即其关联节点的 script-name如 app1.pane1.Viewer1 panel app.getUserPanel(scriptName)12.3 自定义面板与模态对话框dialog app.createModalDialog() # 模态对话框可加用户参数或原生 PySide Qt 控件exec() 弹出 panel PyPanel(...) # 自定义 Python 面板子类 PyPanel 或基于用户参数构建 app.registerPythonPanel(panel, createPanelFunction) # 注册后随项目布局保存并出现在 Panes 菜单 app.unregisterPythonPanel(panel)面板重建依赖你提供的无参 Python 函数pythonFunction。相关类参考 PyModalDialog.rst、PyPanel.rst、PyTabWidget.rst、PyViewer.rst。12.4 GUI 模式阻塞渲染app.renderBlocking(effect, 1, 10, 2) # 与 App.render 语义一致但任何模式都阻塞 app.renderBlocking([(w1, 1, 10), (w2, 1, 10)]) # 多任务并发渲染十三、与命令行模式的衔接掌握 API 后最常见的落地场景是背景模式自动化完整命令行说明见 natronexecution.rst。Natron 有三种执行模式执行.ntp项目、执行 Python 脚本、交互式解释器-t。一个可复用的转码脚本模板# myStartupScript.py reader app.createReader(/Users/Toto/Sequences/Sequence__####.exr) writer app.createWriter(/Users/Toto/Sequences/Sequence.mov) writer.setScriptName(MyWriter) # 便于命令行 -w 引用 reader.setScriptName(MyReader) writer.getParam(formatType).setValue(0) # Input Stream Format按输入尺寸输出 writer.connectInput(0, reader) # 背景模式下渲染由命令行参数触发GUI 下需显式 app.render(writer, 10, 20)命令行用法# 背景模式渲染指定 Writer 的帧范围 10-20 NatronRenderer /path/to/myStartupScript.py -w MyWriter 10-20 # 覆盖 Reader/Writer 文件路径仅接受绝对路径 NatronRenderer /path/to/myStartupScript.py -i MyReader /Users/Toto/Sequences/AnotherSeq__####.exr -w MyWriter /Users/Toto/Sequences/mySeq.mov 10-20 # -c/--cmd 注入 Python 代码多次给出按顺序执行 NatronRenderer /path/to/myStartupScript.py -c fpsValue60 -w MyWriter 10-20 # 用 -o/--output 将脚本中的 Output1 替换为 Write 节点 NatronRenderer -o /FastDisk/Pictures/sequence###.exr 1-100 /Users/Me/MyNatronScripts/MyScript.py # 渲染统计每帧生成 -stats.txt不含视频文件 NatronRenderer -s -w MyWriter /path/to/myProject.ntp # 交互式解释器 NatronRenderer -t /path/to/myStartupScript.py关键提醒背景模式下一旦脚本中无createInstance(app, group)函数脚本全文按原生 Python 执行并拥有全部自动声明变量若存在createInstance则脚本以模块方式导入只能访问传入的 app/group 参数。-l/--onload指定的脚本在项目创建/加载后、回调之后执行与回调同规则。十四、结语从参考手册到工程实践Natron 的 Python API 是一套自洽的对象模型进程级PyCoreApplication→ 项目级App→ 节点级Effect→ 参数级Param/AnimatedParam再加上 GUI 专属的NatronGui扩展。官方 API 参考APIReference.rst是唯一的权威索引配套的 natronobjects.rst 讲解对象层次、scriptvslabel.rst 讲解命名体系、natronexecution.rst 讲解执行模式三份文档与源码如 Engine/PyAppInstance.cpp、Engine/PyParameter.cpp、Engine/CreateNodeArgs.cpp相互印证。写脚本时牢记三条铁律GUI 函数必须守卫isBackground()、用户参数修改后必须refreshUserParamsGUI()、批量改参务必包裹beginChanges()/endChanges()即可在 GUI 与命令行两种模式下写出稳定、可复现的自动化流程。赞分享音视频视频处理图形学桌面应用【免费下载链接】NatronOpen-source video compositing software. Node-graph based. Similar in functionalities to Adobe After Effects and Nuke by The Foundry.项目地址https://gitcode.com/gh_mirrors/na/Natron点击查看免费下载相关推荐Video2X老视频480p变4K如何本地免费超分Video2X老视频480p变4K如何本地免费超分 手里有一段 480p 的老动漫想在 4K 屏上看个清楚Video2X 提供本地视频超分辨率与 RIF音视频视频处理图像处理深度学习如何快速掌握Python-mastery核心APIStock类与数据验证模块全解如何快速掌握Python mastery核心APIStock类与数据验证模块全解 Python mastery是GitHub加速计划中的一个高级Python学示例工程教程boto EC2 API 参考指南模块结构、连接方式与核心对象实战解析boto EC2 API 参考指南模块结构、连接方式与核心对象实战解析 导读 本文基于仓库中 docs/source/ref/ec2.rst https://后端云原生上一篇终极指南5分钟学会用Open PS2 Loader无光盘畅玩PS2游戏下一篇VDesk如何在Windows 10中实现虚拟桌面高效管理的3种方法创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →