如何使用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
相关产品推荐
相关产品推荐

