Log in

View Full Version : HAvsFunc


Pages : [1] 2 3 4 5 6 7 8 9 10 11 12 13

HolyWu
29th November 2012, 19:49
https://github.com/HomeOfVapourSynthEvolution/havsfunc

Usage Example:
Firstly, put havsfunc.py to Python\Lib\site-packages.

from vapoursynth import core
import havsfunc as haf

clip = yourclip
clip = haf.QTGMC(clip, Preset='Medium', TFF=True)

kolak
30th November 2012, 00:54
What plugins are needed for QTGMC? It has to be massive list? Is it?

HolyWu
30th November 2012, 02:30
What plugins are needed for QTGMC? It has to be massive list? Is it?
The core plugins are MVTools2, MaskTools v2, RemoveGrain and TemporalSoften (https://github.com/dubhater/vapoursynth-temporalsoften), they must be loaded. Others depending on your settings. If you don't use them, they don't have to be loaded.

BTW, if encountering deadlock, try setting the number of threads to a bigger number, vs.Core(threads=x). But no guarantee it will always work. The perfeck solution is to wait for the fix of MVTools2.

kolak
30th November 2012, 02:38
Is it more stable than avisynthMT, specially for HD sources?

Revgen
30th November 2012, 02:44
QTGMC(clip, Preset='Medium', SubPel=2, TFF=True) constantly crashes VirtualDub for VapourSynth. Picture looks great though. I'll try to fiddle with it later.

kolak
30th November 2012, 02:55
For HD you can use very fast or even ultrafast. Can you share vs script ?

HolyWu
30th November 2012, 04:03
Can't say if more stable than avisynthMT or not. Maybe it depends on your available threads or settings. I only tried encoding a 1440x1080 1m30s video with Medium preset without crash or deadlock. If you want to avoid the deadlock caused by MCompensate, try setting SLMode to 1 or 3(spatial sharpness limiting) for the time being. Be aware that activating NoiseProcess with some combination of settings will invoke MCompensate too.

Chikuzen
30th November 2012, 06:51
you should use 'if foo is None:' instead of 'if foo == None:'.
see this.
http://jaredgrubb.blogspot.jp/2009/04/python-is-none-vs-none.html

HolyWu
30th November 2012, 12:32
you should use 'if foo is None:' instead of 'if foo == None:'.
see this.
http://jaredgrubb.blogspot.jp/2009/04/python-is-none-vs-none.html
Thanks for the tip. ;)

HolyWu
30th November 2012, 17:19
Updated r2. Worked around memory leak problem in Bob. The memory consumption of QTGMC should be much lesser now.

Revgen
30th November 2012, 22:17
Memory hogging is still going on for me. Vdub still crashes with the new version.

Is it possible to implement fmtconv instead of Bob() as an alternative for those who have crashing issues? fmtconv is slower, but perhaps it could be more stable.

Myrsloik
30th November 2012, 23:55
Updated r2. Worked around memory leak problem in Bob. The memory consumption of QTGMC should be much lesser now.

Uh, what is this memory leak problem in Bob? I know I did a quick and bad job of ripping it out of avisynth but it still shouldn't crash... that much.

HolyWu
1st December 2012, 02:42
Memory hogging is still going on for me. Vdub still crashes with the new version.

Is it possible to implement fmtconv instead of Bob() as an alternative for those who have crashing issues? fmtconv is slower, but perhaps it could be more stable.
Did VirtualDub crash as soon as you loaded your vpy script, or after you seek/jump to another frame? I tried a 1440x1080 video with only haf.QTGMC(clip, TFF=True) in the script and then previewd it in both AvsPmod and VirtualDub. No matter how I seek/jump to random frames, AvsPmod and VirtualDub are still there without crash. The memory usage of both are always around 1GB. Is there any other function used besides QTGMC in your vpy script?

Uh, what is this memory leak problem in Bob? I know I did a quick and bad job of ripping it out of avisynth but it still shouldn't crash... that much.
http://i.imgur.com/pC2BF.png

Revgen
1st December 2012, 03:14
I tried using fmtconv instead of BicubicResize for Bob(). Still crashes at the same place in the video. Strangely enough, fmtconv doesn't appear to be any slower than using BicubicResize. The crash occurs when the ram usage jumps from 1 gb to 1.5 gb in 2-3 secs in one particular spot in the video, then it crashes. I may have to upload the video itself help you solve the problem.

Here's the fmtconv method I tried.

def Bob(self, input, b, c, tff):
return self.core.std.Interleave([self.core.fmtc.bitdepth(self.core.fmtc.resample(self.core.std.SelectEvery(self.core.std.SeparateFields(input, tff), cycle=2, offsets=0), w=input.width, h=input.height,kernel='bicubic', a1=b, a2=c, sx=0, sy=0.25, sw=input.width, sh=input.height/2, fulls=0, fulld=0)bits=8,fulls=0,fulld=0),
self.core.fmtc.bitdepth(self.core.fmtc.resample(self.core.std.SelectEvery(self.core.std.SeparateFields(input, tff), cycle=2, offsets=1), w=input.width, h=input.height,kernel='bicubic', a1=b, a2=c, sx=0, sy=-0.25, sw=input.width, sh=input.height/2, fulls=0, fulld=0)bits=8,fulls=0,fulld=0)])

My script is.

import vapoursynth as vs
import sys
import havsfunc
core = vs.Core()
haf = havsfunc.HAvsFunc(core)
core.std.LoadPlugin(r'C:\Program Files\VapourSynth\filters\avisource.dll')
core.std.LoadPlugin(r'C:\Program Files\VapourSynth\fmtconv.dll')
core.std.LoadPlugin(r'C:\Program Files\VapourSynth\d2vsource_beta3_mingw.dll')
core.std.LoadPlugin(r'C:\Program Files\VapourSynth\nnedi3.dll')
core.std.LoadPlugin(r'C:\Program Files\VapourSynth\filters\eedi3.dll')
core.std.LoadPlugin(r'C:\Program Files\VapourSynth\filters\temporalsoften.dll')
core.avs.LoadPlugin('C:/Program Files/VapourSynth/avisynthfilters.dll')
core.avs.LoadPlugin(r'E:\QTGMC\AddGrainC.dll')
core.avs.LoadPlugin(r'E:\QTGMC\dfttest.dll')
core.avs.LoadPlugin(r'E:\QTGMC\EEDI2.dll')
core.avs.LoadPlugin(r'E:\QTGMC\FFT3DFilter.dll')
core.avs.LoadPlugin(r'E:\QTGMC\mvtools2.dll')
core.avs.LoadPlugin(r'E:\QTGMC\nnedi.dll')
core.avs.LoadPlugin(r'E:\QTGMC\nnedi2.dll')
core.avs.LoadPlugin(r'E:\QTGMC\RemoveGrainSSE2.dll')
core.avs.LoadPlugin(r'E:\QTGMC\RepairSSE2.dll')
core.avs.LoadPlugin(r'E:\QTGMC\TDeint.dll')
core.avs.LoadPlugin(r'E:\QTGMC\VerticalCleanerSSE2.dll')
core.avs.LoadPlugin(r'E:\QTGMC\mt_masktools-25.dll')
vid = core.avisource.AVISource(r'E:\test6.avi')
vid = haf.QTGMC(vid,Preset='Medium',SubPel=2, TFF=True)
last = vid

Revgen
2nd December 2012, 03:17
Here's my source. It's a lossless H264 MKV file.

http://depositfiles.com/files/brzkx20yo

HolyWu
2nd December 2012, 17:09
No, I can't reproduce crash in VirtualDub here, no matter by seeking to random frames or using "Run video analysis pass" under File menu. In your script you used AVISource to load avi file, but the file you provided is mkv, hence I used ffms2 to load it. I don't know whether this difference matters. Did you ever try vid.output(file) way to see if it crashes?

BTW, updated r3. Added DeHalo_alpha, YAHR, HQDering and FastLineDarkenMOD.

Revgen
2nd December 2012, 19:00
I used avisource on the huffyuv file. I encoded it to lossless h264 in order to decrease filesize for upload. Both files crash for me.

Looks like it's a problem on my end.

kolak
3rd December 2012, 18:38
On my laptop anything different than ultra fast does not work at all. Which plugins are the best to use with vs- I use Vit's modified version (but not the one for avisynth 2.6).

matfra
3rd December 2012, 20:24
Can you post a picture to show what the output for this script plese. Im curious

kolak
3rd December 2012, 21:23
What do you mean?
It looks the same as from avisynth version.

HolyWu
4th December 2012, 02:40
On my laptop anything different than ultra fast does not work at all. Which plugins are the best to use with vs- I use Vit's modified version (but not the one for avisynth 2.6).
What exactly "does not work" means? Do you mean the output frame is the same as if QTGMC had no effect? Or is there any error message? If so, you should post it as well. The plugins I use mostly are the official ones, except nnedi3 and eedi3 are native VapourSynth plugin. I didn't use Vit's modified version, so no idea if it works with VapourSynth.

EDIT: Did you try replacing this new vsvfw.dll (http://forum.doom9.org/showthread.php?p=1601856#post1601856)? Though it maybe have nothing to do with your problem.

If in doubt, just try encoding a small range of your video and see whether the encoding could finish, and whether the frames of the encoded file has problems or not.

kolak
4th December 2012, 02:57
No- Vdub shows first frame and than does nothing- CPU stays at 0. I can't jump into any frame etc- just hangs.
I will try unmodified version, see if it changes anything. Looks like ultrafast uses different plugins than all others.

Revgen
9th December 2012, 00:54
I found out how to increase WinXP's memory limit to 3GB. That helps to make the process to go longer, but it still crashes after using over 2.2 GB of memory. How much memory does QTGMC need anyway?

Also I tried to use Vapoursynth's set_max_cache_size() but couldn't figure out how to use it. So then I tried using vs.Core(threads=2) to see if it would use less memory instead of utilizing all 4 CPU cores. The program hangs and doesn't do anything. Ditto with threads=1. The lowest I can go is threads=3, and even that reaches to 2.2gb and crashes. I tried the vsvfw.dll too. No luck.

I tried Vdub, x264, and FFPlay. Same results on all.

I'm wondering if I have a bad version of a plugin. Is there a way to monitor which plugin is utlizing the most memory?

Myrsloik
9th December 2012, 02:29
I found out how to increase WinXP's memory limit to 3GB. That helps to make the process to go longer, but it still crashes after using over 2.2 GB of memory. How much memory does QTGMC need anyway?

Also I tried to use Vapoursynth's set_max_cache_size() but couldn't figure out how to use it. So then I tried using vs.Core(threads=2) to see if it would use less memory instead of utilizing all 4 CPU cores. The program hangs and doesn't do anything. Ditto with threads=1. The lowest I can go is threads=3, and even that reaches to 2.2gb and crashes. I tried the vsvfw.dll too. No luck.

I tried Vdub, x264, and FFPlay. Same results on all.

I'm wondering if I have a bad version of a plugin. Is there a way to monitor which plugin is utlizing the most memory?

There's a bug in vs that makes the memory limit 1024 times bigger than it should be meaning that the default max is 1TB. As a temporary workaround try setting the max cache size to 1. Will be fixed in the next release which should be out sometime next week.

Revgen
9th December 2012, 03:15
I haven't been able to figure out how to do set_max_cache_size().

If I do it this way

import vapoursynth as vs
import sys
import havsfunc

core = vs.Core().set_max_cache_size(1)
haf = havsfunc.HAvsFunc(core)
#plugins#

I get a "avisynth open failure; Python exception. 'int' object has no attribute 'avs'" error.

I'm not sure exactly where it's supposed to go.

I guess I'll wait until next week for the new release.

Are_
9th December 2012, 03:34
core = vs.Core()
core.set_max_cache_size(1)

Revgen
9th December 2012, 05:10
Thanks Are. No error messages this time, but it's still exhibiting the same behavior. Looks like I'll just have to wait til the next release to see if the situation improves.

Myrsloik
14th January 2013, 14:32
The download link is broken. If you have trouble finding reliable hosting I can put a copy of the scripts on my website.

HolyWu
14th January 2013, 15:24
Updated r4.
Added 'dct' argument to SMDegrain to set the equivalent argument of MAnalyse.
Added FFT3dGPU to QTGMC as another Denoiser to NoiseProcess. Since FFT3dGPU doesn't support bt=5, the maximum of NoiseTR is restricted to 1.
Renamed 'DftThreads' of QTGMC to 'DenoiseThreads'. The threads of FFT3DFilter is not set in the original version. Now 'DenoiseThreads' sets the threads of both dfttest and FFT3DFilter.
Added nnedi3_rpow2 function.
Replaced HQDering function with HQDering mod(only 8-bit processing).
Added ivtc_txt60mc function.
Added InterFrame function.
Replaced some filters with the native VapourSynth plugins if possible.
Minor bug fixes.

For ivtc_txt60mc there is a problem. MFlowInter seems to have problem running in VapourSynth when pel=2. So you have to set draft=True in ivtc_txt60mc to let it use pel=1 right now.

For InterFrame there is a bigger problem. It's a pity that SVPflow runs about 10x slower in VapourSynth than it runs in AviSynth. Mostly because of the "Avisynth Compat: requested frame XXX not prefetched, using slow method that may deadlock" issue I guess.

The download link is broken. If you have trouble finding reliable hosting I can put a copy of the scripts on my website.
Ah...I was just about to update the new version so I deleted the old file. :D

Myrsloik
14th January 2013, 15:27
I'll have a look at the svpflow stuff later. I think I simply needed to add it properly to the avisynth prefetch lists.

kolak
14th January 2013, 16:25
Updated r4.

For InterFrame there is a bigger problem. It's a pity that SVPflow runs about 10x slower in VapourSynth than it runs in AviSynth. Mostly because of the "Avisynth Compat: requested frame XXX not prefetched, using slow method that may deadlock" issue I guess.



Yep- runs way slower than avs and uses almost 1 core only resources.

Chikuzen
14th January 2013, 16:48
on nnedi3_rpow2, you should use only std.Transpose() instead of your TurnLeft/Right functions. FlipHorizontal and FlipVertical are useless in this case.

yexpr = 'x 128 - y 128 - * 0 < 128 x 128 - abs y 128 - abs < x y ? ?'
I suspect that Lut2 is faster than Expr in the case of such a complicated expression.

and, since warpsharp package is not compatible with VS, you can't use UnsharpMask().

Myrsloik
15th January 2013, 04:35
The warpsharp package has been fixed since Chikuzen pointed it out and will work in r19 when that's done.

That's one confusing expression. What does it look like in readable form anyway?

Are_
15th January 2013, 04:53
That's one confusing expression. What does it look like in readable form anyway?

(((x-128)*(y-128))<0) ? 128 : ((abs(x-128)<abs(y-128)) ? x : y)

Chikuzen
15th January 2013, 10:49
a benchmark result


import vapoursynth as vs
import sys

def expr(x, y):
if (x - 128) * (y - 128) < 0: return 128
if abs(x - 128) < abs(y - 128): return x
return y

def get_lut():
lut = []
for y in range(256):
for x in range(256):
lut.append(expr(x, y))
return lut

core = vs.Core(threads=1)
core.std.LoadPlugin('vsrawsource.dll')
c0 = core.raws.Source('720p50_mobcal.y4m')
c0 = core.std.Loop(core.std.ShufflePlanes(c0, 0, vs.GRAY), 4) #2016(504x4) frames
c1 = core.raws.Source('720p50_parkrun.y4m')
c1 = core.std.Loop(core.std.ShufflePlanes(c1, 0, vs.GRAY), 4) #2016(504x4) frames

clip = core.std.Expr([c0, c1], ['x 128 - y 128 - * 0 < 128 x 128 - abs y 128 - abs < x y ? ?'])
#clip = core.std.Lut2([c0, c1], get_lut(), planes=0)

clip.output(sys.stdout)
-------------------------------------------------------------
$ for i in {1..3}; do time python3 benchmarch.py > /dev/null; done

std.Expr std.Lut2
1st 0m22.792s 0m17.316s
2nd 0m22.782s 0m16.963s
3rd 0m22.791s 0m17.004s

HolyWu
16th January 2013, 14:02
The most complicated expression in the script is probably the one used by LSFmod's Smode=5.

'x y = x x x y - abs 16 / log 1 4 / * exp 16 * 0.75 * x y - dup abs / * x y - dup * 16 dup * 4 + * x y - dup * 4 + 16 dup * * / * 1 48 0 = 0 16 48 / dup * dup * ? + 1 48 0 = 0 x y - abs 48 / dup * dup * ? + / * + ?'
# Infix notation: (x==y) ? x : (x+(((((((abs(x-y)/16)^(1/4))*16)*0.75)*((x-y)/abs(x-y)))*((((x-y)^2)*((16^2)+4))/((((x-y)^2)+4)*(16^2))))*((1+((48==0) ? 0 : ((16/48)^4)))/(1+((48==0) ? 0 : ((abs(x-y)/48)^4))))))


Then the difference is much significant. :sly:

import vapoursynth as vs
import sys

def get_lut():
lut = []
for y in range(256):
for x in range(256):
if x==y:
lut.append(x)
else:
lut.append(max(min(round(x+(((((((abs(x-y)/16)**(1/4))*16)*0.75)*((x-y)/abs(x-y)))*((((x-y)**2)*((16**2)+4))/((((x-y)**2)+4)*(16**2))))*((1+(0 if 48==0 else (16/48)**4))/(1+(0 if 48==0 else (abs(x-y)/48)**4))))), 255), 0))
return lut

core = vs.Core()
core.avs.LoadPlugin(r'C:\Program Files (x86)\AviSynth 2.5\plugins\DGDecodeNV.dll')
core.std.LoadPlugin(r'C:\Program Files (x86)\VapourSynth\filters\genericfilters.dll')
clip = core.std.Trim(core.avs.DGSource(r'a 1080p24 video.dgi'), 0, 4999)
blur = core.generic.Blur(clip, planes=0)

clip = core.std.Expr([clip, blur], ['x y = x x x y - abs 16 / log 1 4 / * exp 16 * 0.75 * x y - dup abs / * x y - dup * 16 dup * 4 + * x y - dup * 4 + 16 dup * * / * 1 48 0 = 0 16 48 / dup * dup * ? + 1 48 0 = 0 x y - abs 48 / dup * dup * ? + / * + ?', ''])
#clip = core.std.Lut2([clip, blur], lut=get_lut(), planes=0)

clip.output(sys.stdout)
-------------------------------------------------------------
$ time python test.vpy > /dev/null
std.Expr std.Lut2
10m10.820s 1m49.963s

Myrsloik
16th January 2013, 14:21
I suspect you can speed it up a bit. Not that it really matters when a lut is so much faster...

For example "16 dup *" is a constant expression and there are several more constants recalculated every time. You can also rewrite X ^ (1/4) as sqrt(sqrt(X)) which probably is a lot faster than using exp and log.

Chikuzen
16th January 2013, 14:46
'x y = x x x y - abs 16 / log 1 4 / * exp 16 * 0.75 * x y - dup abs / * x y - dup * 16 dup * 4 + * x y - dup * 4 + 16 dup * * / * 1 48 0 = 0 16 48 / dup * dup * ? + 1 48 0 = 0 x y - abs 48 / dup * dup * ? + / * + ?'
# Infix notation: (x==y) ? x : (x+(((((((abs(x-y)/16)^(1/4))*16)*0.75)*((x-y)/abs(x-y)))*((((x-y)^2)*((16^2)+4))/((((x-y)^2)+4)*(16^2))))*((1+((48==0) ? 0 : ((16/48)^4)))/(1+((48==0) ? 0 : ((abs(x-y)/48)^4))))))

is this expression really working ?

also, "... (1+((48==0)) ? 0 : ((16/48))^4)"
why you don't write just "1.012346"

HolyWu
16th January 2013, 14:59
In the original expression some constants are parameters, and are replaced with the function's argument values, for example (1/4) is one of it, so can't simply using sqrt(sqrt(X)) if someone specified (1/3) or so. I replaced all parameters with the default values for convenience here. That's why you wonder why I don't write values which could be calculated beforehand like (1+((48==0) ? 0 : ((16/48)^4))).

Chikuzen
16th January 2013, 18:25
another benchmark (Since HolyWu's script did not work on my box, I rewrote it by myself. )

import vapoursynth as vs
import sys

core = vs.Core(threads=1)
core.std.LoadPlugin('vsrawsource.dll')
core.std.LoadPlugin('genericfilters.dll')

def func(x, y, strength, szrp, spwr, sdmplo, sdmphi):
if x == y:
return x
diff = x - y
diff2 = diff * diff
tmp0 = ((abs(diff)/szrp)**(1 / szrp))*szrp*strength * (diff/abs(diff))
tmp1 = szrp ** 2 + sdmplo
tmp2 = szrp ** 2
tmp3 = 1 + ((szrp/sdmphi) ** 4 if (sdmphi != 0) else 0)
tmp4 = 1 + (abs(diff)/sdmphi ** 4 if (sdmphi != 0) else 0)
tmp3 /= tmp4
ret = x + tmp0 * ((diff2 * tmp1) / ((diff2 + sdmplo) * tmp2)) * tmp3
return min(255, max(0, int(round(ret))))

def get_lut(strength, szrp, spwr, sdmplo, sdmphi):
lut = []
for y in range(256):
for x in range(256):
lut.append(func(x, y, strength, szrp, spwr, sdmplo, sdmphi))
return lut

c0 = core.raws.Source('720p50_mobcal.y4m')
c0 = core.std.ShufflePlanes(c0, 0, vs.GRAY)
c1 = core.generic.Blur(c0)

strength, szrp, spwr, sdmplo, sdmphi = 0.75, 16, 4, 4, 0

expr = ('x y = x x x y - abs {Szrp} / log 1 {Spwr} / * exp {Szrp} * {Str} * x y - '
'dup abs / * x y - dup * {Szrp} dup * {SdmpLo} + * x y - dup * {SdmpLo} + '
'{Szrp} dup * * / * 1 {SdmpHi} 0 = 0 {Szrp} {SdmpHi} / dup * dup * ? + 1 '
'{SdmpHi} 0 = 0 x y - abs {SdmpHi} / dup * dup * ? + / * + ?')
expr = expr.format(Szrp=szrp, Spwr=spwr, Str=strength, SdmpLo=sdmplo, SdmpHi=sdmphi)
clip = core.std.Expr([c0, c1], [expr])
#clip = core.std.Lut2([c0, c1], get_lut(strength, szrp, spwr, sdmplo, sdmphi), planes=0)

clip.output(sys.stdout)

the result is

std.Expr 0m20.436s
std.Lut2 0m06.396s

Why was a different result brought?
Probably, HolyWo would use anime as a sample.
Since x and y become equal in many cases in the case of anime, almost part of expression does not evaluate and finishes with the head of them(if x == y then return x).

aegisofrime
27th October 2013, 06:36
Hi,

Due to the changes in VS r21, Will it be a difficult process rewriting HAvsFunc to use the new native RemoveGrain plugin instead of the Avisynth one?

HolyWu
27th October 2013, 06:50
Not that difficult. Already working on it. Maybe release today or tomorrow.

HolyWu
29th October 2013, 10:08
Updated r5.

Added the following functions: ediaa, daa, maa, SharpAAMCmod, Deblock_QED, Vinverse, LUTDeCrawl, LUTDeRainbow.
Added a simple wrapper Resize over fmtc.resample + fmtc.bitdepth, including a ringing-cancellation algorithm from Dither_resize16nr.
Added GammaToLinear and LinearToGamma function. The same as Dither_y_gamma_to_linear and Dither_y_linear_to_gamma, but some parameters name and default values are changed.
HQDering mod updated to v1.4. stack16 input/output is supported.
SMDegrain's Motion Vectors Globals Input/Output is supported.
LSFmod's Smode 1&2 are deleted. Smode 3~5 becomes 1~3 now.
Added 'noring' parameter to maa, SharpAAMCmod, Dehalo_alpha and LSFmod to indicate that a non-ringing algorithm must be used in case of supersampling.
Replaced RemoveGrain/Repair with the native plugin.
It's no need to pass in the core instance anymore.
Some bug fixes, optimizations and cosmetic changes.


EDIT: Fixed a very minor issue. Please redownload if you have downloaded hours ago.

HolyWu
30th October 2013, 13:36
Updated r6.
A quick bug fix release. I missed the 'planes' parameter in GammaToLinear/LinearToGamma and it mistakenly only processed the first(Y or R) plane. By the way I also add restriction on bitdepth to only allow 16-bit input clip in GammaToLinear/LinearToGamma.

Mystery Keeper
17th February 2014, 17:08
Couldn't get Deblock_QED to work. It uses mt_lutspa, but when I try to load mt_masktools-26.dll VS says it has no entry point.

Myrsloik
17th February 2014, 17:12
Couldn't get Deblock_QED to work. It uses mt_lutspa, but when I try to load mt_masktools-26.dll VS says it has no entry point.

Only 2.5 plugins supported for now. 2.6 won't happen until avisynth+ makes a sane 64bit api most likely.

Mystery Keeper
17th February 2014, 17:59
Thank you. Figured it out, got it to work.

Mystery Keeper
2nd July 2014, 20:55
Using Deblock_QED crashes my script if I seek far forward. Crash happens in mt_masktools-25.dll. Can these functions be made to not rely on it?

Reel.Deel
3rd July 2014, 17:49
Using Deblock_QED crashes my script if I seek far forward. Crash happens in mt_masktools-25.dll. Can these functions be made to not rely on it?

I don't think so, but it's been a while since I've used VS so if I remember correctly there is no native mt_lutspa equivalent.

Mystery Keeper
3rd July 2014, 21:56
mt_lutspa replacement from Myrsloik himself. (http://pastebin.com/ZQRchkkq)