2017-02-16 70 views
1

当vspipe调用主Python程序时,我们如何设置输出节点?使用vspipe的Python main(argv)函数中的Vapoursynth输出节点

下不起作用:

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

你想** **针对不同**输入视频的同** VapourSynth代码,并与视频文件名称使用它作为一个**参数**? “vspipe -p your_script.vpy your_input_file_name output_name”? – MarianD

回答

0

如果您的VapourSynth脚本是而不是通过输入视频文件名进行参数化,即输入文件名是硬编码在您的脚本中,例如, 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 
2

很抱歉这么晚的答案,但我认为这需要加以解决:

__name__变量通常包含"__main__"当脚本是Python解释器的主要目标,例如,当它被称为从命令行。

但是,由于未记录而不太知道:当vspipe或任何其他基于vsscript的应用程序运行脚本时,字符串"__vapoursynth__"存储在__name__的内部。

因此您的支票应该是这个:

if __name__ == "__vapoursynth__": 
    clip = main() 
    clip.set_output() 
相关问题