Selur's Little Message Board

Full Version: MClean + Vapoursynth does not work
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Hybrid version: 2021.07.18.1 (Windows 10 64bit)
What did happen? Using the Vapoursynth frameserver, enabling MClean on the job yields a weird error.

Code:
Failed to evaluate the script:
Python exception: No attribute with the name vcmod exists. Did you mistype a plugin namespace?

Traceback (most recent call last):
  File "src\cython\vapoursynth.pyx", line 2242, in vapoursynth.vpy_evaluateScript
  File "src\cython\vapoursynth.pyx", line 2243, in vapoursynth.vpy_evaluateScript
  File "D:\Hybrid\_temp\tempPreviewVapoursynthFile19_33_03_628.vpy", line 37, in <module>
    clip = G41Fun.mClean(clip=clip)
  File "C:\Hybrid\64bit\vsscripts\G41Fun.py", line 2517, in mClean
    c = core.vcmod.Median(clip, plane=[0, 1, 1]) if chroma else clip
  File "src\cython\vapoursynth.pyx", line 1891, in vapoursynth._CoreProxy.__getattr__
  File "src\cython\vapoursynth.pyx", line 1754, in vapoursynth.Core.__getattr__
AttributeError: No attribute with the name vcmod exists. Did you mistype a plugin namespace

As I've backtraced, vcmod is part of vcm.dll which I do have in c:\Hybrid\64bit\vsfilters\Support\vcm.dll and in the assembly vpy script I see it tries to load it:

Code:
# Imports
import os
import sys
import ctypes
# Loading Support Files
Dllref = ctypes.windll.LoadLibrary("C:/Hybrid/64bit/vsfilters/Support/libfftw3-3.dll")
import vapoursynth as vs
# getting Vapoursynth core
core = vs.core
# Import scripts folder
scriptPath = 'C:/Hybrid/64bit/vsscripts'
sys.path.append(os.path.abspath(scriptPath))
# Loading Plugins
core.std.LoadPlugin(path="C:/Hybrid/64bit/vsfilters/DebandFilter/Flash3kDeband/flash3kyuu_deband.dll")
core.std.LoadPlugin(path="C:/Hybrid/64bit/vsfilters/SharpenFilter/AWarpSharp2/libawarpsharp2.dll")
core.std.LoadPlugin(path="C:/Hybrid/64bit/vsfilters/Support/TCanny.dll")
core.std.LoadPlugin(path="C:/Hybrid/64bit/vsfilters/Support/fmtconv.dll")
core.std.LoadPlugin(path="C:/Hybrid/64bit/vsfilters/Support/libtemporalmedian.dll")
core.std.LoadPlugin(path="C:/Hybrid/64bit/vsfilters/Support/vcm.dll")
core.std.LoadPlugin(path="C:/Hybrid/64bit/vsfilters/Support/libmvtools.dll")
core.std.LoadPlugin(path="C:/Hybrid/64bit/vsfilters/SourceFilter/LSmashSource/vslsmashsource.dll")
# Import scripts
import mvsfunc
import muvsfunc
import G41Fun
# source: 'd:\Video\dvd\title_t00 (1)-004.mkv'
# current color space: YUV420P8, bit depth: 8, resolution: 720x480, fps: 29.97, color matrix: 470bg, yuv luminance scale: limited, scanorder: progressive
# Loading d:\Video\dvd\title_t00 (1)-004.mkv using LWLibavSource
clip = core.lsmas.LWLibavSource(source="d:/Video/dvd/title_t00 (1)-004.mkv", format="YUV420P8", cache=0, prefer_hw=0)
# making sure input color matrix is set as 470bg
clip = core.resize.Point(clip, matrix_in_s="470bg",range_s="limited")
# making sure frame rate is set to 29.970
clip = core.std.AssumeFPS(clip=clip, fpsnum=30000, fpsden=1001)
# Setting color range to TV (limited) range.
clip = core.std.SetFrameProp(clip=clip, prop="_ColorRange", intval=1)
# denoising using mClean
clip = G41Fun.mClean(clip=clip)
# adjusting output color from: YUV420P16 to YUV420P10 for x265Model (i420@8)
clip = core.resize.Bicubic(clip=clip, format=vs.YUV420P10, range_s="limited")
# adjusted resizing to achieve PAR 1:1 for preview
# resizing for preview to square pixel to 640x480
clip = core.resize.Bicubic(clip=clip, width=640, height=480)
# set output frame rate to 29.970fps
clip = core.std.AssumeFPS(clip=clip, fpsnum=30000, fpsden=1001)
# Output
clip.set_output()

I have no idea what is causing the issue.
I can reproduce the issue probably a typo somewhere.
Will report back.

Cu Selur
Found the issue.
G41Fun was using the old vcmod not the newer vcm + a bug in the mClean script which always required mvfs.
-> will send you a link to a dev veriso which should fix the issue on ~10min.

Cu Selur
I'd like to try the mClean filter on an old VHS capture, but I'm unable to locate it - any suggestions?
"Filtering->Vapoursynth->DeNoise->mClean" it's there you just have to scroll down, should be the 11th filter in the DeNoise-tab (unless I miscounted).
or "Filtering->Avisynth->DeNoise->Denoiser->mClean" (last in the drop-down)
I'm also having problems running mClean and CAS but no luck. Any suggestions?
For some reason a color conversion is missing at the end of the script.
Your script ends with:
Code:
clip = core.std.SetFrameProp(clip=clip, prop="_ColorRange", intval=1)
# adjusting color space from YUV422P10 to YUV444P8 for vsTemporalDegrain
clip = core.resize.Bicubic(clip=clip, format=vs.YUV444P8, range_s="limited")
# removing grain using TemporalDegrain
clip = havsfunc.TemporalDegrain(inpClip=clip, sigma=8.00, blockWidth=4, blockHeight=4, overlapWidth=8, overlapHeight=8, blockSize=4)
# denoising using mClean
clip = G41Fun.mClean(clip=clip)
# contrast sharpening using CAS
clip = core.cas.CAS(clip=clip)
# set output frame rate to 25.000fps
clip = core.std.AssumeFPS(clip=clip, fpsnum=25, fpsden=1)
# Output
clip.set_output()
but it should end with:
Code:
# adjusting color space from YUV422P10 to YUV444P8 for vsTemporalDegrain
clip = core.resize.Bicubic(clip=clip, format=vs.YUV444P8, range_s="limited")
# removing grain using TemporalDegrain
clip = havsfunc.TemporalDegrain(inpClip=clip)
# denoising using mClean
clip = G41Fun.mClean(clip=clip)
# contrast sharpening using CAS
clip = core.cas.CAS(clip=clip)
# adjusting output color from: YUV444P16 to YUV422P10 for ProResModel
clip = core.resize.Bicubic(clip=clip, format=vs.YUV422P10, range_s="limited")
# set output frame rate to 25.000fps
clip = core.std.AssumeFPS(clip=clip, fpsnum=25, fpsden=1)
# Output
clip.set_output()
Strange thing is, you are using the same verison I am.
But yours is missing the
Code:
# adjusting output color from: YUV444P16 to YUV422P10 for ProResModel
clip = core.resize.Bicubic(clip=clip, format=vs.YUV422P10, range_s="limited")

My guess is that some update isn't triggered properly.
Can you write a step-by-step (really everything you do), since the way I try to reproduce this the script looks like it should.

Cu Selur
It's strange because the file is already ProRes 422. I'll try it again and make notes for you.
Quote:It's strange because the file is already ProRes 422.
That doesn't matter since, TempDegrain doesn't support YUV422@10bit,...
Send you a link to my just updated dev to be sure we use the same version.

Cu Selur