当vspipe调用主Python程序时,我们如何设置输出节点?
以下不起作用:
def main(argv):
...
...
vapoursynth code
...
clip.set_output()
if __name__ == "__main__":
main(sys.argv[1:])
这两个都没有:
....
if __name__ == "__main__":
clip = main(sys.argv[1:])
clip.set_output()
错误消息是:无法检索输出节点。指定的索引无效?
答案 0 :(得分:2)
对于这个迟到的答案感到抱歉,但我认为这需要解决:
当脚本是Python解释器的主要目标时,__name__
变量通常包含"__main__"
,例如,当它从命令行调用时。
然而,由于没有文档知名度较低:当vspipe或任何其他基于vsscript的应用程序运行您的脚本时,字符串"__vapoursynth__"
存储在__name__
内。
因此,您的检查应该是:
if __name__ == "__vapoursynth__":
clip = main()
clip.set_output()
答案 1 :(得分:0)
如果您的VapourSynth
脚本不使用输入视频文件名进行参数化,i。即您的脚本中的输入文件名是硬编码,例如: G。在声明中
video = core.ffms2.Source("InputVideo.mkv")
您可以直接编写整个脚本 -
(没有定义main()
函数(示例代码的第1行)
和最后的if
块)
- 或 -
用
替换它们def main():
一开始,
if __name__ == "__main__":
main()
最后。
您可以将vspipe
视为专门的Python
解释器,因此知道(来自您的命令clip.set_output()
) 视频管道,e。 G。在命令中
vspipe -y -p your_script.vpy - | ffmpeg -i - output.mp4
或从哪个视频输出未压缩视频,例如: G。在命令中
vspipe -y -p your_script.vpy uncompressed_output.y4m