- 音视频
- 视频处理
- 图形学
- 桌面应用
【免费下载链接】Natron
Open-source video compositing software. Node-graph based. Similar in functionalities to Adobe After Effects and Nuke by The Foundry.
Write 节点是 Natron 合成流程的“终点站”,负责把节点树的计算结果以.mov视频或编号图像序列的形式写入磁盘,是整个渲染输出流程的核心(对应 Engine/WriteNode.h 中WriteNode的实现)。本文基于官方指南 thenodes-image-write.rst,结合仓库源码,完整讲解 Write 节点的创建、参数面板(Filename、Format Type、Color、Interpretation、Encoding)以及渲染启动方式,读完即可独立完成从“节点树”到“磁盘成片”的完整输出流程。
Write 节点的角色与工作方式
从源码结构看,WriteNode并非一个独立的渲染器,而是继承自NodeGroup的“外壳”:它会根据输出文件的扩展名,动态地在内部挂载对应的 OpenFX Writer 插件,并把所有 Writer 统一呈现为一个带动态设置面板的 Write 节点。Engine/WriteNode.h中对类的注释明确写到:这是一个“围绕所有 OpenFX Writer 节点的包装(wrapper)”,其设置面板会随所选格式动态变化,所有调用最终都会转发给内部对应的 OpenFX 插件。
仓库中可用的内置 Writer 插件 ID 定义在 Engine/EffectInstance.h:
| 插件 | 插件 ID | 用途 |
|---|---|---|
| WriteOIIO | fr.inria.openfx.WriteOIIO | 基于 OpenImageIO 的多格式写插件(默认 Writer) |
| WriteFFmpeg | fr.inria.openfx.WriteFFmpeg | 视频类编码(MOV/MP4 等) |
| WritePFM | fr.inria.openfx.WritePFM | PFM 浮点图像格式 |
| WritePNG | fr.inria.openfx.WritePNG | PNG 图像格式 |
其中WriteNode::isVideoWriter()(Engine/WriteNode.cpp)只对WriteFFmpeg返回true,也就是说只有它被识别为视频类 Writer;而新建 Write 节点时未指定有效扩展名时使用的默认插件是PLUGINID_OFX_WRITEOIIO(见 Engine/WriteNode.cpp 中WRITE_NODE_DEFAULT_WRITER的定义)。这也解释了原文档的现象:一旦你在文件名后面填入.mov、.tga、.tiff等扩展名,Write 节点的参数面板就会立即展开为该格式专属的那一组参数。
快速上手:三步完成渲染输出
原文档给出了最简洁的渲染输出流程,配合 compositing-projects-render.rst 中的说明,完整步骤如下:
- 创建 Write 节点:按快捷键
w(或在节点图空白处右键新建节点)。创建时若偏好设置中启用了“Prompt with file dialog when creating Write node”(writeUseDialog,默认开启,定义于 Engine/Settings.cpp),会先弹出保存文件对话框让你直接选定输出路径;该对话框的调用链可在 Gui/Gui20.cpp 的Gui::createWriter()中看到——它会先收集getSupportedWriterFileFormats()支持的格式过滤器,再弹出保存对话框。 - 连接节点树:把 Write 节点接到你节点树的最后一个节点上,它会把整个上游的计算结果作为输入写出去。
- 指定输出位置:点击 “file” 参数旁边的小文件夹图标,浏览并选择结果要渲染到哪个目录。文件浏览器有收藏夹、自动分组编号文件等特性,详见 getstarted-environment-fileselect.rst。
- 指定帧范围:设置 “Frame Range / First Frame / Last Frame” 参数,例如官方截图示例中设置了 1 到 665 帧的范围。
- 启动渲染,两种方式任选其一:
- 点击节点属性面板中的Render按钮;
- 或通过菜单Render → Render Selected Writers(只渲染选中的 Write 节点)。若要渲染全部 Write 节点,菜单项为Render → Render All Writers,具体菜单语义见 getstarted-environment-menus.rst。
Filename:文件名、扩展名与格式识别
点击文件夹图标会打开文件浏览器,用于指定输出文件。这里有一条最关键的约定:输出文件名必须以目标格式的扩展名结尾(如.mov、.tga、.tiff)。扩展名一填好,Write 节点内部就会据此挑选对应的 Writer 插件并展开该格式专属的参数。这正是 Engine/WriteNode.cpp 中initializeKnobs()所建立的“通用参数 + 格式专属参数”动态面板机制的体现:Filename、Format Type、Color、Interpretation等通用参数始终保留(参见文件中genericWriterKnobNames[]列表),而编码器相关参数由挂载的 Writer 提供。
对于图像序列,文件名还可以使用帧占位符语法:
###:按三位数字补零编号,如render_###.tiff会生成render_001.tiff、render_002.tiff…;##则生成两位编号。- 多视图项目输出到多个独立文件时,可用
%v(展开为l/r)或%V(展开为left/right),详见 compositing-stereo.rst。
Format Type:输出格式与像素尺寸
“Format Type”控制输出图像的像素尺寸(宽高)。需要注意:这个尺寸不受查看器(Viewer)的 proxy 设置影响——Proxy 只影响预览时的显示分辨率,不影响最终写盘的分辨率。对应源码层面,Write 节点保留了一组格式相关参数:kParamOutputFormat(formatChoice格式选择)、kParamFormatType、kParamFormatSize、kParamFormatPar(像素宽高比),它们被列入genericWriterKnobNames通用参数列表(Engine/WriteNode.cpp 与 L116-L148),切换 Writer 时这些参数会被保留,不会在用户不知情时被重置。
Color:色彩空间转换
Write 节点可以对输出图像做色彩空间转换。文件会从“Input colorspace”(输入色彩空间)被转换到“File Colorspace”(文件色彩空间)。
原文档给出的三条实操建议:
- 建议将 “Input” 保持为linear(线性),这是 Natron 推荐的基础工作流;
- 当文件色彩空间与输入色彩空间相同时,不会发生任何转换;
- “File Colorspace” 通常设置为与主 Read 节点相同的色彩空间,这样输出的图像在色彩上与原素材保持一致(未修改状态)。
从源码看,色彩空间相关参数在通用参数表中占据一整组 OCIO 参数:ocioConfigFile(配置文件)、ocioInputSpace/ocioOutputSpace(输入输出空间)、ocioInputSpaceIndex/ocioOutputSpaceIndex(选择索引)等(Engine/WriteNode.cpp),且File Colorspace本身就是 Write 节点的通用参数kParamOutputSpaceLabel的显示名(Engine/WriteNode.cpp)。
Interpretation:预乘与输出通道
Write 节点的 Interpretation 部分控制图像“如何被解释后导出到磁盘”,主要包含两项:
Premultiplication(预乘)
- 当处理后的图像包含透明区域,且你的节点树中 “premultiplied”(预乘)标志已被正确处理时,Natron 会自动猜测“Input Premult”的取值;
- 若自动猜测结果不正确,你可以手动强制指定 “Input Premult” 为你想要的预乘状态;
- 特别值得注意的行为变更:从 Natron v2.4 起,当把 RGBA 写入不支持 alpha 通道的文件格式时,Write 节点会直接丢弃 alpha 通道而不再做预乘,这样写出的文件不会与 Nuke 中查看器看到的结果产生差异。
Output Components(输出通道)
- 该选项告诉 Natron 是否要丢弃 Alpha 通道;
- 当所选图像格式本身不支持 alpha 通道时,“A” 选项会被自动禁用;
- 对于 Quicktime(
.mov)文件,alpha 支持位于编码器选项中,且要注意:大多数编码器实际上并不支持 alpha 通道(支持 alpha 的典型如 DNxHD、ProRes)。
对应源码中,Write 节点保留了inputPremult参数(预乘状态)以及NatronOfxParamProcessR/G/B/A四个通道开关参数(Engine/WriteNode.cpp),这四个开关正是 “Output Components” 面板背后控制 RGB / Alpha 各通道是否写入的机制。
Encoding:编码器、帧率与视频格式参数
原文档此处明确指出:“Encoding(编码)”部分的选项会随所读取文件类型的不同而变化。对于 QuickTime 视频文件,关键参数是Frame rate(帧率):
- 默认取项目设置中的帧率值;
- 对于视频类文件格式可以单独覆盖;
- 图像序列没有帧率概念(帧率只存在于视频容器中)。
此外,Write 节点面板中还提供了一个Encoder(编码插件)选择参数(encodingPluginChoice),允许你在同一扩展名下显式选择具体的内部编码插件;其工具提示说明:默认使用偏好设置中为该文件扩展名指定的插件(Engine/WriteNode.cpp)。切换编码插件时,节点会按新的插件重新创建内部 Writer(见knobChanged()中对pluginSelectorKnob的处理,Engine/WriteNode.cpp)。
原文档给出了一条非常实用的工程建议(Tip):Natron 对编号图像序列(numbered image sequence)的支持远好于视频文件(quicktime、mp4 等),主要原因是图像序列更可靠、访问更快,并且允许在(重新)渲染时只覆盖序列中的部分帧。这与 getstarted-troubleshooting.rst 的提示一致——渲染图像序列中途崩溃后,重启 Natron 并取消勾选 Write 节点的 “Overwrite”,就只会补渲染缺失的帧。关于渲染的完整流程,可进一步参考 compositing-projects-render.rst。
进阶:Frame Increment、Read Back File 等原生控制参数
除格式相关参数外,Write 节点还自带一组由 Natron 本身管理的原生参数(定义于 Engine/WriteNode.h,创建于 Engine/WriteNode.cpp):
- Frame Increment(
frameIncr):时间线渲染新一帧前需要跳过的帧数。取 1 时渲染所有帧,取 2 时每两帧渲染一帧,以此类推。该值不能小于 1,默认值为 1,且不支持动画。渲染调度器在计算下一帧时同样会应用该步进(见 Engine/OutputSchedulerThread.cpp 中frameStep的处理逻辑)。 - Read Back File(
readBack):勾选后,Write 节点的输出将改为读取已写好的文件,而不是来自输入节点的上游结果。源码中的行为是:勾选时创建内部 Read 节点并接入图(createReadNodeAndConnectGraph),同时禁用 Render 按钮;渲染开始时临时切回输入,渲染结束后再切回读文件结果(Engine/WriteNode.cpp 与 Engine/WriteNode.cpp)。该参数默认关闭。 - PluginID(
encodingPluginID):隐藏的字符串参数,记录当前内部 Writer 的插件 ID,用于项目序列化与加载时重建正确的 Writer(Engine/WriteNode.cpp)。
输出格式实操建议:图像序列参数速查
针对常用输出格式,tutorials-imagesequence.rst 给出了可直接套用的参数组合:
TIFF(合成帧输出的首选格式)
- Output Components 可选 RGB(无透明)或 RGBA(带透明);
- 文件名用
###占位编号; - Bit depth(位深)可选
auto/8i/16i(不建议使用 float); - Compression(压缩)可选
none/lzw(HD 建议),4K 用deflate亦可。
PNG(另一个不错的选择)
- Output Components 同样可选 RGB 或 RGBA;
- 文件名用
###占位编号; - 位深支持 8/16 bit;
- 压缩级别 HD 建议 0,4K 建议 6 即可。
多视图与 EXR 输出补充
如果项目涉及多视图(如立体左右眼),Write 节点面板在输出 EXR 时会额外出现Views(选择要导出的视图)、Layer(选择要导出的图层,EXR/TIFF 可写多图层时才有 “All” 选项)以及Parts参数——Single Part保证与不支持 OpenEXR 2 的应用兼容,Split Views/Split Views,Layers则按视图/图层分 part 写入以提升解码速度;非 EXR 格式若需多视图独立成文件,则在文件名中使用%v/%V占位符。详见 compositing-stereo.rst。
小结
Write 节点是 Natron 输出链路的收口:以w快捷键创建、连接到节点树末端、通过带扩展名的文件名确定输出格式,再配合帧范围、色彩空间、预乘与通道选择、编码器参数即可完成渲染。理解其“动态挂载 OpenFX Writer”的架构(Engine/WriteNode.cpp)后,你就能预判为何更换扩展名会导致面板参数变化,也能更合理地选择图像序列或视频作为交付格式——多数情况下,图像序列是更稳妥的选择。
- 音视频
- 视频处理
- 图形学
- 桌面应用
【免费下载链接】Natron
Open-source video compositing software. Node-graph based. Similar in functionalities to Adobe After Effects and Nuke by The Foundry.
相关推荐
Natron 合成预览与渲染输出实战指南:从 Viewer 节点预览到 Write 节点渲染成片
Natron 合成预览与渲染输出实战指南:从 Viewer 节点预览到 Write 节点渲染成片 导读 :本文围绕 Natron 官方用户指南中的「Previe
音视频视频处理图形学桌面应用Natron 渲染指南:用 Python 渲染 Write 节点与 DiskCache 序列的完整实践
Natron 渲染指南:用 Python 渲染 Write 节点与 DiskCache 序列的完整实践 本指南以 Documentation/source/de
音视频视频处理图形学桌面应用Natron 合成项目中的磁盘缓存(DiskCache)使用指南:为大型节点树加速渲染与预防崩溃
Natron 合成项目中的磁盘缓存(DiskCache)使用指南:为大型节点树加速渲染与预防崩溃 本文聚焦 Natron(开源节点式合成软件)中 DiskCac
音视频视频处理图形学桌面应用
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考