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

2024-05-19 05:22:18 发布

您现在位置:Python中文网/ 问答频道 /正文

当vspipe调用主Python程序时,如何设置输出节点?在

以下操作无效:

def main(argv):
   ...
   ... 
   vapoursynth code
   ...
   clip.set_output()

if __name__ == "__main__":
   main(sys.argv[1:])

这也不是:

^{pr2}$

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


Tags: name程序outputclipif节点maindef
2条回答

很抱歉这么晚才答复,但我认为这需要解决:

当脚本是Python解释器的主要目标时,__name__变量通常包含{},例如从命令行调用脚本时。在

但是,由于没有文档化而不为人所知:当vspipe或任何其他基于vsscript的应用程序运行脚本时,字符串"__vapoursynth__"存储在__name__中。在

因此,您的支票应该是:

if __name__ == "__vapoursynth__":
   clip = main()
   clip.set_output()

如果您的VapourSynth脚本不是用输入视频文件名参数化的,也就是说,输入文件名在脚本中是硬编码的,例如在语句中

video = core.ffms2.Source("InputVideo.mkv")

你可以直接写下你的整个脚本

没有定义main()函数(示例代码的第一行)
以及末尾的if块)

-或-

替换为

^{pr2}$

一开始

if __name__ == "__main__":
    main()

最后。在

您可以考虑vspipe作为一个专用的Python解释器,因此它知道(从您的命令clip.set_output()哪个视频到管道,例如在命令中

vspipe -y -p  your_script.vpy - |  ffmpeg -i -  output.mp4

或者从哪个视频输出未压缩的视频,例如在命令中

vspipe -y -p  your_script.vpy  uncompressed_output.y4m

相关问题 更多 >

    热门问题