首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用vspipe的Python main(argv)函数中的Vapoursynth输出节点

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

Stack Overflow用户
提问于 2017-02-17 00:44:52
回答 2查看 703关注 0票数 3

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

以下内容不起作用:

代码语言:javascript
复制
def main(argv):
   ...
   ... 
   vapoursynth code
   ...
   clip.set_output()

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

这也不是:

代码语言:javascript
复制
....
if __name__ == "__main__":
   clip = main(sys.argv[1:])
   clip.set_output()

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

EN

回答 2

Stack Overflow用户

发布于 2017-07-10 21:20:00

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

当脚本是__name__解释器的主要目标时,Python变量通常包含"__main__"

然而,鲜为人知的是,因为没有文档记录:当vspipe或任何其他基于vsscript的应用程序运行您的脚本时,字符串"__vapoursynth__"存储在__name__中。

因此你的支票应该是这样的:

代码语言:javascript
复制
if __name__ == "__vapoursynth__":
   clip = main()
   clip.set_output()
票数 2
EN

Stack Overflow用户

发布于 2017-04-15 04:46:18

如果您的VapourSynth脚本没有使用输入视频文件名进行参数化,即输入文件名在脚本中是硬编码的,例如,在语句中

代码语言:javascript
复制
video = core.ffms2.Source("InputVideo.mkv")

你可以直接写整个脚本-

(没有定义main()函数(示例代码的第一行)

和末尾的if块)

- or -

将它们替换为

代码语言:javascript
复制
def main():

在开始时,

代码语言:javascript
复制
if __name__ == "__main__":
    main()

在最后。

你可以把vspipe看作一个专门的Python解释器,这样它就可以(从你的命令clip.set_output()中)知道要传输哪个视频,例如在命令中

代码语言:javascript
复制
vspipe -y -p  your_script.vpy - |  ffmpeg -i -  output.mp4

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

代码语言:javascript
复制
vspipe -y -p  your_script.vpy  uncompressed_output.y4m
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42279927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档