Python main(argv)函数中的Vapoursynth输出节点使用vspipe

时间:2017-02-16 16:44:52

标签: python vapoursynth

当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()

错误消息是:无法检索输出节点。指定的索引无效?

2 个答案:

答案 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