_Al_
23rd March 2025, 05:27
I have simple command line, which works ok, as it suppose to:
vspipe.exe test.vpy -c y4m - | ffmpeg.exe -y -i - out.mp4
test.vpy:
from vapoursynth import core
clip = core.ffms2.Source('source.avi')
clip.set_output()
print("Hi")
Notice that print() statement in it. In command prompt it works fine. Also it works in python script, as in code below, BUT only without that print() line in vapoursynth script:
import subprocess
import shlex
cmd = 'vspipe.exe test.vpy -c y4m - | ffmpeg.exe -y -i - out.mp4'
new_args = cmd.split('|')
cmd_lists = [shlex.split(arg) for arg in new_args]
process1 = subprocess.Popen(cmd_lists[0], stdout=subprocess.PIPE)
output, _ = process1.communicate()
process2 = subprocess.Popen(cmd_lists[1], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
output2, _ = process2.communicate(input=output)
So if that print() is in that script, it fails if using python to encode.
Does anyone know what is going on? I tried to redirect stdout to nul, like below , it did not help.
import subprocess
import shlex
import contextlib
import os
cmd = 'vspipe.exe test.vpy -c y4m - | ffmpeg.exe -y -i - out.mp4'
new_args = cmd.split('|')
cmd_lists = [shlex.split(arg) for arg in new_args]
with contextlib.redirect_stdout(open(os.devnull, 'w')):
process1 = subprocess.Popen(cmd_lists[0], stdout=subprocess.PIPE)
output, _ = process1.communicate()
process2 = subprocess.Popen(cmd_lists[1], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
output2, _ = process2.communicate(input=output)
vspipe.exe test.vpy -c y4m - | ffmpeg.exe -y -i - out.mp4
test.vpy:
from vapoursynth import core
clip = core.ffms2.Source('source.avi')
clip.set_output()
print("Hi")
Notice that print() statement in it. In command prompt it works fine. Also it works in python script, as in code below, BUT only without that print() line in vapoursynth script:
import subprocess
import shlex
cmd = 'vspipe.exe test.vpy -c y4m - | ffmpeg.exe -y -i - out.mp4'
new_args = cmd.split('|')
cmd_lists = [shlex.split(arg) for arg in new_args]
process1 = subprocess.Popen(cmd_lists[0], stdout=subprocess.PIPE)
output, _ = process1.communicate()
process2 = subprocess.Popen(cmd_lists[1], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
output2, _ = process2.communicate(input=output)
So if that print() is in that script, it fails if using python to encode.
Does anyone know what is going on? I tried to redirect stdout to nul, like below , it did not help.
import subprocess
import shlex
import contextlib
import os
cmd = 'vspipe.exe test.vpy -c y4m - | ffmpeg.exe -y -i - out.mp4'
new_args = cmd.split('|')
cmd_lists = [shlex.split(arg) for arg in new_args]
with contextlib.redirect_stdout(open(os.devnull, 'w')):
process1 = subprocess.Popen(cmd_lists[0], stdout=subprocess.PIPE)
output, _ = process1.communicate()
process2 = subprocess.Popen(cmd_lists[1], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
output2, _ = process2.communicate(input=output)