Topic: Генерация Vapoursynth-скриптов для Linux
Пользуюсь SVP4 под Ubuntu. Есть ли у него возможность генерации скрипта для offline-преобразования файлов как в Windows? Хочу создавать файлы с максимальным качеством для последующего просмотра уже без нагрузки на видеоадаптер и процессор. Или, может быть, где-то есть готовые скрипты?
Сделал свою настройку интерполяции, заглянул в последние использованные скрипты, скопировал оттуда скрипт. Но он не работает.
# This script was generated by SVP 4 Manager.
# Check https://www.svp-team.com for more details.
import vapoursynth as vs
core = vs.get_core(threads=7)
core.std.LoadPlugin("/home/igni/bin/SVP4/plugins/libsvpflow1_vs64.so")
core.std.LoadPlugin("/home/igni/bin/SVP4/plugins/libsvpflow2_vs64.so")
clip = video_in
clip = clip.resize.Bicubic(format=vs.YUV420P8)
crop_string = ""
resize_string = ""
super_params = "{scale:{up:0},gpu:1,rc:true}"
analyse_params = "{main:{search:{coarse:{distance:-8},type:2}},refine:[{thsad:250}]}"
smoothfps_params = "{gpuid:11,rate:{num:5,den:2},algo:13,mask:{area:1000},scene:{blend:true}}"
demo_mode = 0
stereo_type = 0
########## BEGIN OF base.py ##########
# This file is a part of SmoothVideo Project (SVP) ver.4
# This is NOT the full Vapoursynth script, all used variables are defined via
# JScript code that generates the full script text.
def interpolate(clip):
input = clip
if crop_string!='':
input = eval(crop_string)
if resize_string!='':
input = eval(resize_string)
super = core.svp1.Super(input,super_params)
vectors = core.svp1.Analyse(super["clip"],super["data"],input,analyse_params)
smooth = core.svp2.SmoothFps(input,super["clip"],super["data"],vectors["clip"],vectors["data"],smoothfps_params,src=clip,fps=container_fps)
smooth = core.std.AssumeFPS(smooth,fpsnum=smooth.fps_num,fpsden=smooth.fps_den)
if demo_mode==1:
return demo(input,smooth)
else:
return smooth
if stereo_type == 1:
lf = interpolate(core.std.CropRel(clip,0,(int)(clip.width/2),0,0))
rf = interpolate(core.std.CropRel(clip,(int)(clip.width/2),0,0,0))
smooth = core.std.StackHorizontal([lf, rf])
elif stereo_type == 2:
lf = interpolate(core.std.CropRel(clip,0,0,0,(int)(clip.height/2)))
rf = interpolate(core.std.CropRel(clip,0,0,(int)(clip.height/2),0))
smooth = core.std.StackVertical([lf, rf])
else:
smooth = interpolate(clip)
########### END OF base.py ###########
smooth.set_output()
Пробовал запустить его через vspipe:
vspipe --y4m ~/bin/vapour/fullqua.py - | ffmpeg -i pipe: encoded.mkv
Но получил ошибку, что переменная clip не определена:
Script evaluation failed:
Python exception: name 'video_in' is not defined
Traceback (most recent call last):
File "src/cython/vapoursynth.pyx", line 1491, in vapoursynth.vpy_evaluateScript (src/cython/vapoursynth.c:26972)
File "/home/igni/bin/vapour/fullqua.py", line 10, in <module>
clip = video_in
NameError: name 'video_in' is not defined
Вбил имя файла вручную (clip = "/tmp/video.mp4"), после чего вышла другая ошибка:
Script evaluation failed:
Python exception: 'str' object has no attribute 'resize'
Traceback (most recent call last):
File "src/cython/vapoursynth.pyx", line 1491, in vapoursynth.vpy_evaluateScript (src/cython/vapoursynth.c:26972)
File "/home/igni/bin/vapour/fullqua.py", line 11, in <module>
clip = clip.resize.Bicubic(format=vs.YUV420P8)
AttributeError: 'str' object has no attribute 'resize'
Решил, что изменение размера всё равно ни к чему, закомментировал эту строку и снова запустил. Получил следующее:
Script evaluation failed:
Python exception: Super: argument clip was passed an unsupported type (expected clip compatible type but got str)
Traceback (most recent call last):
File "src/cython/vapoursynth.pyx", line 1491, in vapoursynth.vpy_evaluateScript (src/cython/vapoursynth.c:26972)
File "/home/igni/bin/vapour/fullqua.py", line 53, in <module>
smooth = interpolate(clip)
File "/home/igni/bin/vapour/fullqua.py", line 34, in interpolate
super = core.svp1.Super(input,super_params)
File "src/cython/vapoursynth.pyx", line 1370, in vapoursynth.Function.__call__ (src/cython/vapoursynth.c:25121)
vapoursynth.Error: Super: argument clip was passed an unsupported type (expected clip compatible type but got str)
Я так понимаю, переменная clip должна быть не адресом файла, а видеопотоком? Как же его в таком случае передать в скрипт?
Можете помочь с решением этой проблемы? Ничего под Linux по этой теме не нашёл.