2017-02-16 69 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() 
相關問題