You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Foundry Nuke Python解释器读取视频及解决渲染仅首帧问题

问题原因

  • 你没有显式指定渲染帧范围,nuke.render()在非GUI模式下调用时默认仅渲染当前帧(默认值为1,也就是两段视频的首帧)
  • 脚本模式下的Read节点不会像GUI中那样自动探测输入视频的完整帧范围,需要手动触发探测或者直接指定帧范围属性

修复方案

首先让Read节点读取输入视频的元数据获取正确的起止帧,再在调用渲染方法时传入完整帧范围即可,修改后的代码如下:

import nuke

content = nuke.nodes.Read(file="/content.mp4")
# 给前景视频设置正确帧范围
content['origfirst'].setValue(content.firstFrame())
content['origlast'].setValue(content.lastFrame())
content['first'].setValue(content.firstFrame())
content['last'].setValue(content.lastFrame())

bg = nuke.nodes.Read(file="/bg.mov")
# 给背景视频设置正确帧范围
bg['origfirst'].setValue(bg.firstFrame())
bg['origlast'].setValue(bg.lastFrame())
bg['first'].setValue(bg.firstFrame())
bg['last'].setValue(bg.lastFrame())

merged = nuke.nodes.Merge(inputs=[bg, content])

output = nuke.nodes.Write(file="/output.mov", inputs=[merged])
# 取两段视频的重叠帧范围作为渲染区间,你也可以根据需求自定义起止值
start_frame = max(content.firstFrame(), bg.firstFrame())
end_frame = min(content.lastFrame(), bg.lastFrame())

# 渲染时显式传入帧范围
nuke.render(output, start_frame, end_frame)

补充说明

如果两段视频的帧率、分辨率不一致,建议在Merge之前额外添加Reformat和TimeWarp节点对齐参数,避免渲染结果出现异常。

内容的提问来源于stack exchange,提问作者shpindler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 14:09:00