View Full Version : MultiSWAR, a new resizing function
*.mp4 guy
18th June 2006, 00:28
[edit] This version is now out of date, I'm not going to change this post however (the old version is faster, and might work better on cell chaded stuff) see laterin the thread for up to date versions.
MultiSWAR (MultiStep Warp and Resize) Is The first Avisynth function I've made (thanks for the help Soulhunter). It is designed to reduce the blurring and aliasing associated with linear resizing, without introducing aditional artifacts or being too slow for practical use.
# MultiSWAR - Multi Step Warping And Resizing - V1 Beta3
#
#A modified version of LimitedSharpenFaster is included in this script
#
LoadPlugin("WarpSharp.dll")
LoadPlugin("aWarpSharp.dll")
LoadPlugin("GradFun2db.dll")
LoadPlugin("FrFun7.dll")
LoadPlugin("Addgrain.dll")
LoadPlugin("mt_masktools.dll")
LoadPlugin("RemoveGrain.dll")
function LimitedSharpenFaster( clip clp,
\ float "ss_x", float "ss_y",
\ int "dest_x", int "dest_y",
\ int "Smode" , int "strength", int "radius",
\ int "Lmode", bool "wide", int "overshoot", int "undershoot",
\ int "soft", int "edgemode", bool "special",
\ int "exborder" )
{
ox = clp.width
oy = clp.height
Smode = default( Smode, 3 )
ss_x = (Smode==4)
\ ? default( ss_x, 1.25)
\ : default( ss_x, 1.5 )
ss_y = (Smode==4)
\ ? default( ss_y, 1.25)
\ : default( ss_y, 1.5 )
dest_x = default( dest_x, ox )
dest_y = default( dest_y, oy )
strength = (Smode==1)
\ ? default( strength, 160 )
\ : default( strength, 100 )
strength = (Smode==2&&strength>100) ? 100 : strength
radius = default( radius, 2 )
Lmode = default( Lmode, 1 )
wide = default( wide, false )
overshoot = default( overshoot, 1)
undershoot= default( undershoot, overshoot)
softdec = default( soft, 0 )
soft = softdec!=-1 ? softdec : sqrt( (((ss_x+ss_y)/2.0-1.0)*100.0) ) * 10
soft = soft>100 ? 100 : soft
edgemode = default( edgemode, 0 )
special = default( special, false )
exborder = default( exborder, 0)
#radius = round( radius*(ss_x+ss_y)/2) # If it's you, Mug Funky - feel free to activate it again
xxs=round(ox*ss_x/8)*8
yys=round(oy*ss_y/8)*8
smx=exborder==0?dest_x:round(dest_x/Exborder/4)*4
smy=exborder==0?dest_y:round(dest_y/Exborder/4)*4
clp.isYV12() ? clp : clp.converttoyv12()
ss_x != 1.0 || ss_y != 1.0 ? last.Spline36Resize(xxs,yys) : last
tmp = last
edge = mt_logic( tmp.mt_edge(thY1=0,thY2=255,"8 16 8 0 0 0 -8 -16 -8 4")
\ ,tmp.mt_edge(thY1=0,thY2=255,"8 0 -8 16 0 -16 8 0 -8 4")
\ ,"max") .mt_lut("x 128 / 0.86 ^ 255 *") #.levels(0,0.86,128,0,255,false)
tmpsoft = tmp.removegrain(11,-1)
dark_limit1 = tmp.mt_inpand()
bright_limit1 = tmp.mt_expand()
dark_limit = (wide==false) ? dark_limit1 : dark_limit1 .removegrain(20,-1).mt_inpand()
bright_limit = (wide==false) ? bright_limit1 : bright_limit1.removegrain(20,-1).mt_expand()
minmaxavg = special==false
\ ? mt_average(dark_limit1, bright_limit1)
\ : mt_merge(dark_limit,bright_limit,tmp.removegrain(11,-1),Y=3,U=-128,V=-128)
Str=string(float(strength)/100.0)
normsharp = Smode==1 ? unsharpmask(strength,radius,0)
\ : Smode==2 ? sharpen(float(strength)/100.0)
\ : Smode==3 ? mt_lutxy(tmp,minmaxavg,yexpr="x x y - "+Str+" * +")
\ : mt_lutxy(tmp,tmpsoft,"x y == x x x y - abs 16 / 1 2 / ^ 16 * "+Str+
\ " * x y - 2 ^ x y - 2 ^ "+Str+" 100 * 25 / + / * x y - x y - abs / * + ?")
OS = string(overshoot)
US = string(undershoot)
mt_lutxy( bright_limit, normsharp, yexpr="y x "+OS+" + < y x y x - "+OS+" - 1 2 / ^ + "+OS+" + ?")
mt_lutxy( dark_limit, last, yexpr="y x "+US+" - > y x x y - "+US+" - 1 2 / ^ - "+US+" - ?")
Lmode==1 ? mt_clamp(normsharp, bright_limit, dark_limit, overshoot, undershoot) : last
normal = last
zero = mt_clamp(normsharp, bright_limit, dark_limit, 0,0)
Lmode==3 ? mt_merge(normal,zero,edge.mt_inflate()) : normal
edgemode==0 ? last
\ : edgemode==1 ? mt_merge(tmp,last,edge.mt_inflate().mt_inflate().removegrain(11,-1),Y=3,U=1,V=1)
\ : mt_merge(last,tmp,edge.mt_inflate().mt_inflate().removegrain(11,-1),Y=3,U=1,V=1)
AMNT = string(soft)
AMNT2 = string(100-soft)
sharpdiff=mt_makediff(tmp,last)
sharpdiff2=mt_lutxy(sharpdiff,sharpdiff.removegrain(19,-1),
\ "x 128 - abs y 128 - abs > y "+AMNT+" * x "+AMNT2+" * + 100 / x ?")
soft==0 ? last : mt_makediff(tmp,sharpdiff2)
(ss_x != 1.0 || ss_y != 1.0)
\ || (dest_x != ox || dest_y != oy) ? Spline36Resize(dest_x,dest_y) : last
ex=blankclip(last,width=smx,height=smy,color=$FFFFFF).addborders(2,2,2,2).coloryuv(levels="TV->PC")
\.blur(1.3).mt_inpand().blur(1.3).bicubicresize(dest_x,dest_y,1.0,.0)
tmp = clp.Spline36Resize(dest_x,dest_y)
clp.isYV12() ? ( exborder==0 ? tmp.mergeluma(last)
\ : mt_merge(tmp,last,ex,Y=3,U=1,V=1) )
\ : ( exborder==0 ? tmp.mergeluma(last.converttoyuy2())
\ : tmp.mergeluma( mt_merge(tmp.converttoyv12(),last,ex,Y=3,U=1,V=1)
\ .converttoyuy2()) )
(edgemode!= -1) ? last : edge.Spline36Resize(dest_x,dest_y).greyscale
return last
}
Function MultiSWAR(Clip Clp,Int"DestX",Int"DestY",Int"StepRatio",Int"Sharpen",Int"Warping",Int"Sthresh",Int"FDetail",Bool"Sharper",Bool"Warper",Bool"Smoothing",Bool"Edetail",Bool"Smoothing2",Bool"NthPass",Float"Sstrength",Float"Sthresh2",Float"Esharp", Float"SS", Int"Smode")
{
StepRatio = Default(StepRatio,2)
Sharpen = Default(Sharpen,100)
Warping = Default(Warping,4)
Sthresh = Default(Sthresh,128)
Sharper = Default(Sharper,True)
Warper = Default(Warper,True)
Smoothing = Default(Smoothing,False)
Sstrength = Default(Sstrength,1.2)
Sthresh2 = Default(Sthresh2,1.1)
EDetail = Default(Edetail,true)
Fdetail = Default(FDetail, 1)
Esharp = Default(Esharp,0.25)
NthPass = Default(NthPass, false)
Smoothing2 = Default(Smoothing2, Smoothing)
Smode = Default(Smode, 3)
SS = Default(SS, 1.25)
OX = m(16,Clp.Width)
OY = m(16,Clp.Height)
Clp.Spline36Resize(OX+round(OX/StepRatio/4)*4,OY+round(OY/StepRatio/4)*4)
Smoothing2 ? gradfun2db(thr=Sthresh2) : last
Warper ? aWarpSharp(Depth=Warping, Blurlevel=1, cm=0) : last
EDetail ? Addgrain(Fdetail, .1, .1).blur(-Esharp) : last
Sharper ? LimitedSharpenfaster(Smode=Smode, soft=8, strength=sharpen, overshoot=0, SS_X=SS, SS_Y=SS) : last
Smoothing ? FrFun7(Sstrength,Sthresh,Sthresh) : last
return (width < destx) ? MultiSWAR(DestX, DestY, Smoothing2=Smoothing2, Smoothing=NthPass, StepRatio=StepRatio, Sharpen=Sharpen, Warping=Warping, FDetail=FDetail, Sharper=Sharper, Warper=Warper, Edetail=Edetail, Sthresh2=Sthresh2, Sthresh=Sthresh, Sstrength=Sstrength, SS=SS, Smode=Smode, Esharp=Esharp/StepRatio) : lanczosresize(destx,desty)
}
function m(int r, float x) {return(x<16?16:int(round(x/float(r))*r))}
Parameters:
DestX/DestY: Set the output resolution (yes its really obvious)
StepRatio: Determines how many iterations of resizing wil be needed to reach your destination resolution, the default is 4. higher values are slower but should remove more alliasing. High values may result in more artifacts. The usable range is 1 to around 16.
Smoothing: When Smoothing is enabled (Which it is not by default) a light noise reduction filter is used to help avoid sharpening artifacts from the source image, this is most usefull for animated content. Smoothing also enables a gradient reinterpolater, to protect gradients from banding.
NthPass: Determines if smoothing will be used after the first step of resizing, if smoothing is enabled (By default smoothing will not be aplied on the NthPass).
Sstrength: Sets the strength of the noise removal, the default value is 1.2. Higher values of Sstrength will remove more Ringing artefacts and noise, but also remove small amounts of detail and in some cases soften edges.
Sthresh1: Sets the threshold which determines how much noise/ringing can be removed. the default value is 128, which is quite high, if you plan on raising the Sstrength value you should definately lower this value first, a value of 8 will be enough to get rid of most noise, but will not remove the majority of dvd compression artifacts.
Sthresh2: Sets the amount of gradient protection/restoration to be applied. The default value is 1.1, this should prevent the MultiSWAR from causing any banding artifacts, but may not remove bands that are present in the source.
EDetail: Enables an extra sharpening function that helps bring out detail, enabled by default.
FDetail: Sets the amount of "fake detal" (aka noise) to be added, helps the picture from becoming to smooth, but not really usefull for anything else. Default is 1, usable range is 0 to 16, Fdetail is oly enabled when EDetail=true.
Esharp: Sets the amount of sharpening used to bring out details, default is 0.25. Usable range is -1.2 to 1, negative values cause bluring and remove details, but also remove aliasing. High values will make haloing in the source worse, very high values tend to be ugly.
Sharper: When Sharper is enabled (which it is by default) an added sharpening operation is performed. The sharpener used is Xsharpen.
Sharpen: Sets the amount of additional sharpening to be aplied to the video, usable values are 0 to 160+ depending upon your source. the default value is 80, which works well most of the time, higher values run the risk of aliasing and banding. If you don't wan't sharpening you should switch sharper to "False" instead of lowering sharpen, to get some extra speed.
Warper: (warping was renamed, to keep things from getting confusing)When Warper is enabled (which it is by default) a very very mild warpsharpen is used to reduce aliasing. Disabling Warper is NOT recommended.
Warping: The strength parameter for Warper. The default of 4 should work the best on film, 8 is a good value for animated material. if you are getting aliasing you can raise this value to get rid of it. The acceptable range is 0 to 64
Smode: Sets the sharpening mode that LSF will use, the default is 3, usable values are 2, 3, and 4
SS: Determines the amount of supersampling to be used during sharpening, default is 1.25, usable values are 1 (with a low amount of sharpening) to 2
If you disable both Warper and sharper there isn't much benefit to using this instead of a standard resizer.
Required plugins:
AwarpSharp
WarpSharp
FrFun7
GradFun2db
Addgrain
Masktools 2.0
RemoveGrain
Make sure to edit the script to point to the correct location of the plugins, or use the MultiSWAR Package.
Example script and pics (http://forum.doom9.org/showthread.php?p=845192#post845192)
foxyshadis
18th June 2006, 03:46
The function could be greatly simplified with recursion...
[edited out, new versions below]
I'm pretty sure that's the correct logic but haven't tested yet. Anyway, a good idea, similar to what I was trying to do with the ekg thing, which is very important for large upsizes to not look so blobby. I need to find out whether xsharpen is a better fit for this than limitedsharpen! (I'm sure it's a lot faster.)
Soulhunter
18th June 2006, 04:19
Erm, its already late here (5:20) but does it still multiple resize -> filter steps this way? >.>
Bye
foxyshadis
18th June 2006, 04:50
Sure, it works fine for me. It still has the typical lanczos problems for a large upsize, a sort of fuzzy-grainy look, but it's slightly sharper than it normally would be. The multiple steps helps as well, it's a well known substitute for edge-directed or spline resize.
(I did leave a period off though, fixed...)
Soulhunter
18th June 2006, 05:26
Oh yeah, the "width < destx ? MultiSWAR : Lanczos" line, now I see it... ^^;
Thanks n' Bye
*.mp4 guy
18th June 2006, 22:14
Ok heres a new version.
# MultiSWAR - Multi Step Warping And Resizing - v.0.2
#
#
#
LoadPlugin("WarpSharp.dll")
LoadPlugin("aWarpSharp.dll")
Function MultiSWAR(Clip Clp,Int"DestX",Int"DestY",Int"StepRatio",Int"Sharpen",Bool"Sharper",Bool"Warper",Int"Warping")
{
StepRatio = Default(StepRatio,2)
Sharpen = Default(Sharpen,8)
Sharper = Default(Sharper,True)
Warper = Default(Warper,True)
Warping = Default(Warping,4)
OX = m(16,Clp.Width)
OY = m(16,Clp.Height)
Clp.LanczosResize(OX+round(OX/StepRatio/16)*16,OY+round(OY/StepRatio/16)*16)
Warper ? aWarpSharp(Depth=Warping, Blurlevel=1, cm=0) : last
Sharper ? Xsharpen(Sharpen, 255) : last
return (width < destx) ? MultiSWAR(destx,desty,sharpen=sharpen,sharper=sharper,warping=warping) : lanczosresize(destx,desty)
}
function m(int r, float x) {return(x<16?16:int(round(x/float(r))*r))}
New Parameters:
Warper: (warping was renamed, to keep things from getting confusing)When Warper is enabled (which it is by default) a very very mild warpsharpen is used to reduce aliasing. Disabling Warper is NOT recommended.
Warping: The strength parameter for Warper. The default of 4 should work the best, but if you are getting aliasing you can raise this value to get rid of it. The acceptable range is 0 to 64
StepRatio: Determines how many iterations of resizing wil be needed to reach your destination resolution, the default is 2. higher values are slower but should remove more alliasing. High values may result in more artifacts. The usable range is 1 to around 16.
Example usage: MultiSWAR(1280, 496, Warping=5, StepRatio=4)
Heres (http://img65.imageshack.us/img65/9956/multiswar46pl.png) an example resized from 352x192 to 1280x496, then cropped (so it was small enough to upload to imageshack).
Heres (http://img113.imageshack.us/img113/3893/multiswar58df.png) an example from an anime resized from 352x192 to 1280x768.
MrTroy
19th June 2006, 12:23
Interpolation is more precise if Spline36Resize is used instead of LanczosResize.
Original image (1920x816) (http://img124.imageshack.us/my.php?image=original0nf.png)
MultiSWAR(2560,1088) - original script (http://img124.imageshack.us/my.php?image=lanczos5go.png)
MultiSWAR(2560,1088) - Spline36 (http://img124.imageshack.us/my.php?image=spline367nn.png)
Script:
# MultiSWAR - Multi Step Warping And Resizing - Spline36Resize
#
#
#
Function MultiSWAR(Clip Clp,Int"DestX",Int"DestY",Int"StepRatio",Int"Sharpen",Bool"Sharper",Bool"Warper",Int"Warping")
{
StepRatio = Default(StepRatio,2)
Sharpen= Default(Sharpen,8)
Sharper= Default(Sharper,True)
Warper= Default(Warper,True)
Warping = Default(Warping,4)
OX = m(16,Clp.Width)
OY = m(16,Clp.Height)
Clp.Spline36Resize(OX+round(OX/StepRatio/16)*16,OY+round(OY/StepRatio/16)*16)
Warper ? aWarpSharp(Depth=Warping, Blurlevel=1, cm=0) : last
Sharper ? Xsharpen(Sharpen, 255) : last
return (width < destx) ? MultiSWAR(destx,desty,sharpen=sharpen,sharper=sharper,warping=warping) : Spline36Resize(destx,desty)
}
function m(int r, float x) {return(x<16?16:int(round(x/float(r))*r))}
*.mp4 guy
19th June 2006, 13:11
Yeah, you're right. I was worried that Spline36 would be to slow, thats why its not in the script. The version of MultiSWAR that I've been playing around with uses spline36, because I found the speed hit acceptable, and because I was getting artifacts on very large resizes with lanczos. I didn't post the new version because It didn't seem like anyone was actually using the function. On that note is anyone actually using the function?
MrTroy
19th June 2006, 13:39
I think that those who bother to use an alternative resizer like this one can live with a small reduction in speed. I know I do. I'd rather use Spline36 and get a bit more quality, than use Lanczos and have a nearly unnoticeable speed gain.
*.mp4 guy
19th June 2006, 14:12
# MultiSWAR - Multi Step Warping And Resizing - v.0.3.1
#
#
#
LoadPlugin("WarpSharp.dll")
LoadPlugin("GradFun2db.dll")
LoadPlugin("FrFun7.dll")
Function MultiSWAR(Clip Clp,Int"DestX",Int"DestY",Int"StepRatio",Int"Sharpen",Int"Warping",Int"Sthresh",Bool"Sharper",Bool"Warper",Bool"Smoothing",Float"Sstrength",Float"Sthresh2")
{
StepRatio = Default(StepRatio,2)
Sharpen = Default(Sharpen,8)
Warping = Default(Warping,4)
Sthresh = Default(Sthresh,128)
Sharper = Default(Sharper,True)
Warper = Default(Warper,True)
Smoothing = Default(Smoothing,False)
Sstrength = Default(Sstrength,1.2)
Sthresh2 = Default(Sthresh2,1.1)
OX = m(16,Clp.Width)
OY = m(16,Clp.Height)
Clp.Spline36Resize(OX+round(OX/StepRatio/4)*4,OY+round(OY/StepRatio/4)*4)
Smoothing ? gradfun2db(Sthresh2) : last
Warper ? aWarpSharp(Depth=Warping, Blurlevel=1, cm=0) : last
Sharper ? Xsharpen(Sharpen, 255) : last
Smoothing ? FrFun7(Sstrength,Sthresh,Sthresh) : last
return (width < destx) ? MultiSWAR(destx,desty,sharpen=sharpen,sharper=sharper,warping=warping) : Spline36Resize(destx,desty)
}
function m(int r, float x) {return(x<16?16:int(round(x/float(r))*r))}
This version of the filter requires two new plugins, FrFun7.dll (http://soulhunter.chronocrossdev.com/data/frfun7_rev6.zip) and GradFun2db.dll (http://kosmos.kawaii-shoujo.net/gradfun2db/gradfun2db-v1.0.zip)
Four new parameters have been added.
Smoothing: When Smoothing is enabled (Which it is not by default) a light noise reduction filter is used to help avoid sharpening artifacts from the source image, this is most usefull for animated content. Smoothing also enables a gradient reinterpolater, to protect gradients from banding.
Sstrength: Sets the strength of the noise removal, the default value is 1.2. Higher values of Sstrength will remove more Ringing artefacts and noise, but also remove small amounts of detail and in some cases soften edges.
Sthresh1: Sets the threshold which determines how much noise/ringing can be removed. the default value is 128, which is quite high, if you plan on raising the Sstrength value you should definately lower this value first, a value of 8 will be enough to get rid of most noise, but will not remove the majority of dvd compression artifacts.
Sthresh2: Sets the amount of gradient protection/restoration to be applied. The default value is 1.1, this should prevent the MultiSWAR from causing any banding artifacts, but may not remove bands that are present in the source.
*.mp4 guy
26th June 2006, 04:14
This is the (probably) final version.
# MultiSWAR - Multi Step Warping And Resizing - V1 Beta1
#
#
#
LoadPlugin("WarpSharp.dll")
LoadPlugin("aWarpSharp.dll")
LoadPlugin("GradFun2db.dll")
LoadPlugin("FrFun7.dll")
Function MultiSWAR(Clip Clp,Int"DestX",Int"DestY",Int"StepRatio",Int"Sharpen",Int"Warping",Int"Sthresh",Int"FDetail",Bool"Sharper",Bool"Warper",Bool"Smoothing",Bool"Edetail",Float"Sstrength",Float"Sthresh2",Float"Esharp")
{
StepRatio = Default(StepRatio,4)
Sharpen = Default(Sharpen,8)
Warping = Default(Warping,4)
Sthresh = Default(Sthresh,128)
Sharper = Default(Sharper,True)
Warper = Default(Warper,True)
Smoothing = Default(Smoothing,False)
Sstrength = Default(Sstrength,1.2)
Sthresh2 = Default(Sthresh2,1.1)
EDetail = Default(Edetail,true)
FDetail = Default(FDetail, 4)
Esharp = Default(Esharp,0.25)
OX = m(16,Clp.Width)
OY = m(16,Clp.Height)
Clp.Spline36Resize(OX+round(OX/StepRatio/4)*4,OY+round(OY/StepRatio/4)*4)
Smoothing ? gradfun2db(thr=Sthresh2) : last
Warper ? aWarpSharp(Depth=Warping, Blurlevel=1, cm=0) : last
EDetail ? Addgrain(Fdetail, .1, .1).blur(-Esharp) : last
Sharper ? Xsharpen(Sharpen, 255) : last
Smoothing ? FrFun7(Sstrength,Sthresh,Sthresh) : last
return (width < destx) ? MultiSWAR(destx,desty,sharpen=sharpen,sharper=sharper,warping=warping) : lanczosresize(destx,desty)
}
function m(int r, float x) {return(x<16?16:int(round(x/float(r))*r))}
One new plugin is required, Addgrain (http://mywebpages.comcast.net/trbarry/AddGrain.zip).
New Parameters are...
EDetail: Enables an extra sharpening function that helps bring out detail, enabled by default.
FDetail: Sets the amount of "fake detal" (aka noise) to be added, helps the picture from becoming to smooth, but not really usefull for anything else. Default is 4, usable range is 0 to 16, Fdetail is oly enabled when EDetail=true.
Esharp: Sets the amount of sharpening used to bring out details, default is 0.25. Usable range is -1.2 to 1, negative values cause bluring and remove details, but also remove aliasing. High values will make haloing in the source worse, very high values tend to be ugly.
*.mp4 guy
26th June 2006, 04:50
Examples.
This is the script used to make the examples.
SetMemoryMax(512)
Import("MultiSWAR_V1-Beta3.avs") # Change to the directory to where you have saved MultiSWAR
ImageSource("Scan02.jpg").crop(0,0,3000,2000).Converttoyv12(matrix="PC.709").LancZosResize(720,576)# Film source
mpeg2source("C:\Captures\rips\Steam Boy.d2v").crop(2,6,716,464)# Anime source
#The "#" symbol was removed from in front of each resizer to test it.
#MultiSWAR(1920, 1280, StepRatio=2, warping=3,) # for the film source
#MultiSWAR(1280, 720, smoothing=true, Sharpen=400, Sthresh=8, Sstrength=.8, StepRatio=4, warping=1, EDetail=false) # for the anime source
#LanczosResize(X, Y) # X=1920, and Y=1280 for film, X=1280, and Y=720 for anime
Film - Source Image, (http://soulhunter.chronocrossdev.com/data/Scan02.jpg) Lanczos, (http://img478.imageshack.us/img478/7305/lanczos3tv.jpg) MultiSWAR. (http://img80.imageshack.us/img80/7103/multiswarmt1.jpg)
Anime - Source, (http://img208.imageshack.us/img208/263/sourceub6.png) Lanczos, (http://img208.imageshack.us/img208/3599/lanczosanimehl5.jpg) MultiSWAR. (http://img146.imageshack.us/img146/4058/multiswaranimerq9.jpg)
[edit] Edited up to coincide with the new version.
Backwoods
26th June 2006, 19:23
It appears there is too much warping being applied. Maybe bringing that down will keep details and leave out that play-doh look that awarpsharp gives off at moderate values.
Revgen
26th June 2006, 20:07
My Mom always told me that I shouldn't SWAR.:D
But in this case, I'll make an exception. I'll check this out as soon as I'm off work.
*.mp4 guy
26th June 2006, 21:56
It appears there is too much warping being applied. Maybe bringing that down will keep details and leave out that play-doh look that awarpsharp gives off at moderate values.
I assume your talking about the soft version, that kind of processing is aimed at animated content. I agree it doesn't look good on film content, but I needed to give an example of what it looked like.
*.mp4 guy
27th June 2006, 01:01
Just download the MultiSWAR package, and load MultiSWAR from the extracted folder with the "import" command. Then you can use MultiSWAR like any other plugin.
*.mp4 guy
27th June 2006, 10:11
:o Man I feal dumb, I forgot to cange part of the script to reflect the changes I've made. Heres a fixed version, with 1 new parameter added.
# MultiSWAR - Multi Step Warping And Resizing - V1 Beta2
#
#
#
LoadPlugin("WarpSharp.dll")
LoadPlugin("aWarpSharp.dll")
LoadPlugin("GradFun2db.dll")
LoadPlugin("FrFun7.dll")
Function MultiSWAR(Clip Clp,Int"DestX",Int"DestY",Int"StepRatio",Int"Sharpen",Int"Warping",Int"Sthresh",Int"FDetail",Bool"Sharper",Bool"Warper",Bool"Smoothing",Bool"Edetail",Bool"Smoothing2",Bool"NthPass",Float"Sstrength",Float"Sthresh2",Float"Esharp")
{
StepRatio = Default(StepRatio,2)
Sharpen = Default(Sharpen,8)
Warping = Default(Warping,4)
Sthresh = Default(Sthresh,128)
Sharper = Default(Sharper,True)
Warper = Default(Warper,True)
Smoothing = Default(Smoothing,False)
Sstrength = Default(Sstrength,1.2)
Sthresh2 = Default(Sthresh2,1.1)
EDetail = Default(Edetail,true)
Fdetail = Default(FDetail, 1)
Esharp = Default(Esharp,0.25)
NthPass = Default(NthPass, false)
Smoothing2 = Default(Smoothing2, Smoothing)
OX = m(16,Clp.Width)
OY = m(16,Clp.Height)
Clp.Spline36Resize(OX+round(OX/StepRatio/4)*4,OY+round(OY/StepRatio/4)*4)
Smoothing2 ? gradfun2db(thr=Sthresh2) : last
Warper ? aWarpSharp(Depth=Warping, Blurlevel=1, cm=0) : last
EDetail ? Addgrain(Fdetail, .1, .1).blur(-Esharp) : last
Sharper ? Xsharpen(Sharpen, 255) : last
Smoothing ? FrFun7(Sstrength,Sthresh,Sthresh) : last
return (width < destx) ? MultiSWAR(DestX, DestY, Smoothing2=Smoothing2, Smoothing=NthPass, StepRatio=StepRatio, Sharpen=Sharpen, Warping=Warping, FDetail=FDetail, Sharper=Sharper, Warper=Warper, Edetail=Edetail, Sthresh2=Sthresh2, Sthresh=Sthresh, Sstrength=Sstrength, Esharp=Esharp/StepRatio) : lanczosresize(destx,desty)
}
function m(int r, float x) {return(x<16?16:int(round(x/float(r))*r))}
New Parameter:
NthPass: Determines if smoothing will be used after the first step of resizing, if smoothing is enabled (By default smoothing will not be aplied on the NthPass).
*.mp4 guy
26th July 2006, 12:15
New version, uses a modified version of LimitedSharpenFaster instead of Xsharpen, LSF is included in the script.
# MultiSWAR - Multi Step Warping And Resizing - V1 Beta3
#
#A modified version of LimitedSharpenFaster is included in this script
#
LoadPlugin("WarpSharp.dll")
LoadPlugin("aWarpSharp.dll")
LoadPlugin("GradFun2db.dll")
LoadPlugin("FrFun7.dll")
LoadPlugin("Addgrain.dll")
LoadPlugin("mt_masktools.dll")
LoadPlugin("RemoveGrain.dll")
function LimitedSharpenFaster( clip clp,
\ float "ss_x", float "ss_y",
\ int "dest_x", int "dest_y",
\ int "Smode" , int "strength", int "radius",
\ int "Lmode", bool "wide", int "overshoot", int "undershoot",
\ int "soft", int "edgemode", bool "special",
\ int "exborder" )
{
ox = clp.width
oy = clp.height
Smode = default( Smode, 3 )
ss_x = (Smode==4)
\ ? default( ss_x, 1.25)
\ : default( ss_x, 1.5 )
ss_y = (Smode==4)
\ ? default( ss_y, 1.25)
\ : default( ss_y, 1.5 )
dest_x = default( dest_x, ox )
dest_y = default( dest_y, oy )
strength = (Smode==1)
\ ? default( strength, 160 )
\ : default( strength, 100 )
strength = (Smode==2&&strength>100) ? 100 : strength
radius = default( radius, 2 )
Lmode = default( Lmode, 1 )
wide = default( wide, false )
overshoot = default( overshoot, 1)
undershoot= default( undershoot, overshoot)
softdec = default( soft, 0 )
soft = softdec!=-1 ? softdec : sqrt( (((ss_x+ss_y)/2.0-1.0)*100.0) ) * 10
soft = soft>100 ? 100 : soft
edgemode = default( edgemode, 0 )
special = default( special, false )
exborder = default( exborder, 0)
#radius = round( radius*(ss_x+ss_y)/2) # If it's you, Mug Funky - feel free to activate it again
xxs=round(ox*ss_x/8)*8
yys=round(oy*ss_y/8)*8
smx=exborder==0?dest_x:round(dest_x/Exborder/4)*4
smy=exborder==0?dest_y:round(dest_y/Exborder/4)*4
clp.isYV12() ? clp : clp.converttoyv12()
ss_x != 1.0 || ss_y != 1.0 ? last.Spline36Resize(xxs,yys) : last
tmp = last
edge = mt_logic( tmp.mt_edge(thY1=0,thY2=255,"8 16 8 0 0 0 -8 -16 -8 4")
\ ,tmp.mt_edge(thY1=0,thY2=255,"8 0 -8 16 0 -16 8 0 -8 4")
\ ,"max") .mt_lut("x 128 / 0.86 ^ 255 *") #.levels(0,0.86,128,0,255,false)
tmpsoft = tmp.removegrain(11,-1)
dark_limit1 = tmp.mt_inpand()
bright_limit1 = tmp.mt_expand()
dark_limit = (wide==false) ? dark_limit1 : dark_limit1 .removegrain(20,-1).mt_inpand()
bright_limit = (wide==false) ? bright_limit1 : bright_limit1.removegrain(20,-1).mt_expand()
minmaxavg = special==false
\ ? mt_average(dark_limit1, bright_limit1)
\ : mt_merge(dark_limit,bright_limit,tmp.removegrain(11,-1),Y=3,U=-128,V=-128)
Str=string(float(strength)/100.0)
normsharp = Smode==1 ? unsharpmask(strength,radius,0)
\ : Smode==2 ? sharpen(float(strength)/100.0)
\ : Smode==3 ? mt_lutxy(tmp,minmaxavg,yexpr="x x y - "+Str+" * +")
\ : mt_lutxy(tmp,tmpsoft,"x y == x x x y - abs 16 / 1 2 / ^ 16 * "+Str+
\ " * x y - 2 ^ x y - 2 ^ "+Str+" 100 * 25 / + / * x y - x y - abs / * + ?")
OS = string(overshoot)
US = string(undershoot)
mt_lutxy( bright_limit, normsharp, yexpr="y x "+OS+" + < y x y x - "+OS+" - 1 2 / ^ + "+OS+" + ?")
mt_lutxy( dark_limit, last, yexpr="y x "+US+" - > y x x y - "+US+" - 1 2 / ^ - "+US+" - ?")
Lmode==1 ? mt_clamp(normsharp, bright_limit, dark_limit, overshoot, undershoot) : last
normal = last
zero = mt_clamp(normsharp, bright_limit, dark_limit, 0,0)
Lmode==3 ? mt_merge(normal,zero,edge.mt_inflate()) : normal
edgemode==0 ? last
\ : edgemode==1 ? mt_merge(tmp,last,edge.mt_inflate().mt_inflate().removegrain(11,-1),Y=3,U=1,V=1)
\ : mt_merge(last,tmp,edge.mt_inflate().mt_inflate().removegrain(11,-1),Y=3,U=1,V=1)
AMNT = string(soft)
AMNT2 = string(100-soft)
sharpdiff=mt_makediff(tmp,last)
sharpdiff2=mt_lutxy(sharpdiff,sharpdiff.removegrain(19,-1),
\ "x 128 - abs y 128 - abs > y "+AMNT+" * x "+AMNT2+" * + 100 / x ?")
soft==0 ? last : mt_makediff(tmp,sharpdiff2)
(ss_x != 1.0 || ss_y != 1.0)
\ || (dest_x != ox || dest_y != oy) ? Spline36Resize(dest_x,dest_y) : last
ex=blankclip(last,width=smx,height=smy,color=$FFFFFF).addborders(2,2,2,2).coloryuv(levels="TV->PC")
\.blur(1.3).mt_inpand().blur(1.3).bicubicresize(dest_x,dest_y,1.0,.0)
tmp = clp.Spline36Resize(dest_x,dest_y)
clp.isYV12() ? ( exborder==0 ? tmp.mergeluma(last)
\ : mt_merge(tmp,last,ex,Y=3,U=1,V=1) )
\ : ( exborder==0 ? tmp.mergeluma(last.converttoyuy2())
\ : tmp.mergeluma( mt_merge(tmp.converttoyv12(),last,ex,Y=3,U=1,V=1)
\ .converttoyuy2()) )
(edgemode!= -1) ? last : edge.Spline36Resize(dest_x,dest_y).greyscale
return last
}
Function MultiSWAR(Clip Clp,Int"DestX",Int"DestY",Int"StepRatio",Int"Sharpen",Int"Warping",Int"Sthresh",Int"FDetail",Bool"Sharper",Bool"Warper",Bool"Smoothing",Bool"Edetail",Bool"Smoothing2",Bool"NthPass",Float"Sstrength",Float"Sthresh2",Float"Esharp", Float"SS", Int"Smode")
{
StepRatio = Default(StepRatio,2)
Sharpen = Default(Sharpen,100)
Warping = Default(Warping,4)
Sthresh = Default(Sthresh,128)
Sharper = Default(Sharper,True)
Warper = Default(Warper,True)
Smoothing = Default(Smoothing,False)
Sstrength = Default(Sstrength,1.2)
Sthresh2 = Default(Sthresh2,1.1)
EDetail = Default(Edetail,true)
Fdetail = Default(FDetail, 1)
Esharp = Default(Esharp,0.25)
NthPass = Default(NthPass, false)
Smoothing2 = Default(Smoothing2, Smoothing)
Smode = Default(Smode, 3)
SS = Default(SS, 1.25)
OX = m(16,Clp.Width)
OY = m(16,Clp.Height)
Clp.Spline36Resize(OX+round(OX/StepRatio/4)*4,OY+round(OY/StepRatio/4)*4)
Smoothing2 ? gradfun2db(thr=Sthresh2) : last
Warper ? aWarpSharp(Depth=Warping, Blurlevel=1, cm=0) : last
EDetail ? Addgrain(Fdetail, .1, .1).blur(-Esharp) : last
Sharper ? LimitedSharpenfaster(Smode=Smode, soft=8, strength=sharpen, overshoot=0, SS_X=SS, SS_Y=SS) : last
Smoothing ? FrFun7(Sstrength,Sthresh,Sthresh) : last
return (width < destx) ? MultiSWAR(DestX, DestY, Smoothing2=Smoothing2, Smoothing=NthPass, StepRatio=StepRatio, Sharpen=Sharpen, Warping=Warping, FDetail=FDetail, Sharper=Sharper, Warper=Warper, Edetail=Edetail, Sthresh2=Sthresh2, Sthresh=Sthresh, Sstrength=Sstrength, SS=SS, Smode=Smode, Esharp=Esharp/StepRatio) : lanczosresize(destx,desty)
}
function m(int r, float x) {return(x<16?16:int(round(x/float(r))*r))}
There are two new parameters.
Smode: Sets the sharpening mode that LSF will use, the default is 3, usable values are 2, 3, and 4
SS: Determines the amount of supersampling to be used during sharpening, default is 1.25, usable values are 1 (with a low amount of sharpening) to 2
buzzqw
26th July 2006, 12:45
i like it ! ths is going to be a very complete resizer , not only upsizer !
(now will need an autocrop and resize while retain aspect ratio... and of course a beer :) )
great work !
BHH
foxyshadis
26th July 2006, 14:57
What's modified about it? Just replacing lanczos with spline36?
*.mp4 guy
26th July 2006, 15:15
Yeah thats it, lanczos introduces way to much haloing for my taste, which then gets shaprened by LSF, spline36 introduces haloing aswell, but its much better then lanczos in that respect.
DarkZell666
24th August 2006, 09:47
Actually, the 1st link (yousendit) is down :)
The 2nd link (megaupload) is file : MultiSWAR V1 beta3.exe (7zip autoexec)
Is it the very latest version ?
I'll be interested in using this to downsize some HD anime, since every downsizing method i've tried introduces aliasing on the characters' outlines.
*.mp4 guy
24th August 2006, 13:25
MultiSWAR V1 Beta3 is the latest version. However multiSWAR is not useful for downsizing, if you wan't to downsize without aliasing try.
BilinearResize(twice destination rez).blur(1.42)
Spline36resize(Destination rez)
nickolasemp
4th September 2006, 11:12
Hello!
As you can probably imagine from my title, I'm a newbie in Avisynth encoding part and I just want to use your script in order to upsize some video clips. I know i mayu be giving youy a hard time but could you just tell me what exactly to do so as to encode my clips with your script?
I have AddGrain.dll, frfun7.dll, gradfun2db.dll, (i cannot download the other package so I would be grateful if you could just upload it someplace else) warpsharp.vdf, mt_masktools.dll (v 2.30), removegrain.dll in the same directory and nothing else, right?
The script should look like this:
SetMemoryMax(512)
Import("I:\Program Files\Encoding tools\AviSynth 2.5\plugins\MultiSWAR_V1-Beta3.avs")
ImageSource("Scan02.jpg").crop(0,0,3000,2000).Converttoyv12(matrix="PC.709").LancZosResize(720,576)
mpeg2source("I:\AltDvb\records\temp\Madonna - Get together.d2v").crop(2,6,716,464)
MultiSWAR(1024, 576, StepRatio=2, warping=3,)
What exactly does the ImageSource line do?
Where do I change my height and width settings? Is it where I have put 1024,576 the right place to do such a thing?
So when I 'll use megui to encode this file, I'll just open MultiSWAR_V1-Beta3.avs and everything is going to be ok?
Thank you very much in advance... I hope I have been as accurate as possible.
nickolasemp
4th September 2006, 11:19
Hello!
As you can probably imagine from my title, I'm a newbie in Avisynth encoding part and I just want to use your script in order to upsize some video clips. I know i mayu be giving youy a hard time but could you just tell me what exactly to do so as to encode my clips with your script?
I have AddGrain.dll, frfun7.dll, gradfun2db.dll, (i cannot download the other package so I would be grateful if you could just upload it someplace else) warpsharp.vdf, mt_masktools.dll (v 2.30), removegrain.dll in the same directory and nothing else, right?
The script should look like this:
SetMemoryMax(512)
Import("I:\Program Files\Encoding tools\AviSynth 2.5\plugins\MultiSWAR_V1-Beta3.avs")
ImageSource("Scan02.jpg").crop(0,0,3000,2000).Converttoyv12(matrix="PC.709").LancZosResize(720,576)
mpeg2source("I:\AltDvb\records\temp\Madonna - Get together.d2v").crop(2,6,716,464)
MultiSWAR(1024, 576, StepRatio=2, warping=3,)
What exactly does the ImageSource line do?
Where do I change my height and width settings? Is it where I have put 1024,576 the right place to do such a thing?
So when I 'll use megui to encode this file, I'll just open MultiSWAR_V1-Beta3.avs and everything is going to be ok?
Thank you very much in advance... I hope I have been as accurate as possible.
*.mp4 guy
4th September 2006, 14:59
Here's a link (http://www.yousendit.com/transfer.php?action=download&ufid=5CC999534C6107C8) to the package.
To use MultiSWAR, just extract the files in the package to a folder, then load multiswar from within that folder. You do not need the imagesource line, because you already have a video source. heres an example script:
SetMemoryMax(512)
Import("I:\Program Files\Encoding tools\AviSynth 2.5\plugins\MultiSWAR_V1-Beta3.avs")
mpeg2source("I:\AltDvb\records\temp\Madonna - Get together.d2v").crop(2,6,716,464)
MultiSWAR(1024, 576, StepRatio=3, warping=3,) #settings should be changed according to your source, and your desired sharpness/smoothness.
To encode with the example script, you would save it and encode from it like you would encode from any other file.
nickolasemp
4th September 2006, 16:06
Thank you for your answer... I am now using it on a new video clip to see the results. I must admit though that it is quite slow. Put that together with x264 and you have an 0.68fps instead of a 6fps..!! Nonetheless, the output is great!
Great job!:)
*.mp4 guy
4th September 2006, 16:49
I'm glad you like the results :) .
A substantial part of the slow down is because X264 has to encode a video that is about twice its previous size when you use MultiSWAR to upsize it.
Adub
6th January 2007, 02:42
So, what's new in version 2.0?
It looks very interesting, yet slow.
foxyshadis
6th January 2007, 04:10
btw, I forgot to mention, you mentioned in another thread aWarpSharp's many chroma bugs. You can either use the japanese warpsharp entirely, or at least use it for the chroma portion, and it should work fine.
*.mp4 guy
6th January 2007, 04:10
Version 2 hasn't been released yet, I still have to fix some stuff (mostly the color issue, can't figure out whats causing it) When I get that fixed, or find a workaround I'll post the new version and all the params. Your free to cludge together something with the version in the other thread (http://forum.doom9.org/showthread.php?p=924139#post924139) though, if you wan't. At the moment I think I may just have to bypass chroma sharpening entirely.
The bigest change is the introduction of masking to differentiate edges and details, which makes it possible to use more aggresive sharpening. The mask is derived from Tbilateral.
@ foxyshais where is the japanese version? does it have any issues of its own?
Didée
6th January 2007, 04:35
To the color issue: There's also a luma issue ...
You're working you way by "Subtract()", and are using value "127" as "neutral". That's wrong. Subtract() has neutral at "126" for Y, and at "128" for U + V. That's why your colors are off, and also why luma is getting darker.
Moreover, there's a bulk of levels().levels().levels() ... altogether it's a chain of 3+3 levels(), one invert(), and finally one MaskedMerge().
In this case, the complete operation (8 filters) could be done by one single LUT expression. :)
Regarding speed: Have a look if TBilateral really is needed in each step of the multistep process. TBilateral is slow. Perhaps it's enough to use it only once, or only in the first two steps, or like that.
Also, the usage of GaussianBlur seems a little off. You're using a default variance of 1, which is a radius=1 gaussian blur. And this you can have waaay faster by using RemoveGrain(11) instead. (Precision is good and all, but GaussianBlur with a variance of 1 is OvErKiLl.)
Lastly, v2 just crashes for me. (The famous "Avisynth read error: ..."). Culprit is FrFun7 ... taking FrFun7 out of the script, it works. Leaving it in, MultiSWAR crashes even with "easy" settings (one step only).
Can't explain why, because in an easy test script FrFun7 works as supposed.
foxyshadis
6th January 2007, 08:08
http://www.geocities.co.jp/SiliconValley-PaloAlto/2382/
There's documentation somewhere or another. It's a massive multifunction plugin, but the warpsharp is all I care about - it has two arguments, bump and depth, that are 0 to 255. Bump is the warpiness, depth is the strength, both default to 128, I think.
afaik it has no bugs, I've not seen any, aside from setting bump way too high makes it go all acid trip. I use it in EKG and realtime movie watching.
I like both the hollow crystally look of EKG and the fuller look of MultiSWAR, I've been trading off between them for poster print samples. Either does a good job, usually, similar to the pay-for tools that I love to test.
*.mp4 guy
6th January 2007, 18:44
@ Didée, yv12lutxy is throwing avisynth acces violations when I use it in multiswar, I think it doesn't like the recursion it uses.
@ foxyshadis, I'll use it for chroma processing once I get everything else worked out.
[edit]actually I get avisynth access violations just with this
ss = last
Nodetail = ss.tbilateral(diameterl=7, diameterc=3, sdevl=1, sdevc=1)
mask2 = yv12lutxy(ss, nodetail, "xy -", "xy -", "xy -")
mask2
[edit2] nm the acces violations, I figured it out.
[edit3] yv12lutxy is working now, but it ouputs junk, it switches between a blank green video, and video made up of only chroma information and no luma.
Didée
6th January 2007, 20:16
yv12lutxy is working now, but it ouputs junk, it switches between a blank green video, and video made up of only chroma information and no luma
yv12lutxy(ss, nodetail, "xy -", "xy -", "xy -")
yv12luxy cn'd worg prbrli iv yo uze wrnk snytx. :)
Try
yv12lutxy(ss, nodetail, "x y -", "x y -", "x y -", U=3, V=3)
# ^ ^ ^ ^^^ ^^^
*.mp4 guy
6th January 2007, 22:50
[edit] aparently yv12lutxy does not allow the use of variables in its notation, so for now mask thresholding will be unchangeable.
Ok, Here is a new version of multiswar, the color bug has been fixed and masking should work better now, I still have to test it more, set better defaults and implement chroma warping.
# MultiSWAR - Multi Step Warping And Resizing - V2 alpha2
#
#
#
Function MultiSWAR(Clip Clp,Int"DestX",Int"DestY",Int"StepRatio",Int"Sharpen", float "ssm", int "dblur", float "thr", float "dthr", int "smode", int "esharp", float "ss", int "sthresh", float "sstrength", int "sthresh2", float "sblur")
{
OX = m(16,Clp.Width)
OY = m(16,Clp.Height)
DestX = Default(DestX, OX*2)
Desty = Default(Desty, OY*2)
Stepratio = Default(Stepratio, 3)
Sharpen = Default(Sharpen, 20)
SSm = Default(SSm, 2)
dblur = Default(Dblur, 5)
thr = Default(thr, 1)
dthr = Default(dthr, 10)
smode = Default(smode, 4)
esharp = Default(esharp, 0)
ss = Default(ss, 1)
sthresh = Default(sthresh, 1)
sstrength = Default(sstrength, 0.8)
sthresh2 = Default(sthresh2, 255)
sblur = Default(sblur, 1)
Clp.Spline36Resize(OX+round(OX/StepRatio/4)*4,OY+round(OY/StepRatio/4)*4)
OXo = OX+round(OX/StepRatio/4)*4
OYo = OY+round(OY/StepRatio/4)*4
o = last.converttoyv12()
s = o.aWarpSharp(Depth=4, Blurlevel=1, cm=0)
ss = s.spline36resize(OX*SSm, OY*SSm)
Nodetail = ss.tbilateral(diameterl=dblur, diameterc=3, sdevl=thr, sdevc=thr)
mask = yv12lutxy(ss, nodetail, "x y - abs 250 *", "x y - abs 75 *", "x y - abs 75 *", U=3, V=3).bilinearresize(OXo, OYo)
lines = s.LimitedSharpenfaster(Smode=Smode, soft=8, strength=sharpen, overshoot=Esharp, SS_X=1.25, SS_Y=1.25, lmode=1).DCTFun4b(Sthresh,Sthresh).FrFun7(Sstrength,Sthresh2,Sthresh2)
detail = o.unsharp(vary=sblur, varc=sblur, strength=1)
maskedmerge(detail, lines, mask)
return (width < destx) ? MultiSWAR(DestX, DestY, StepRatio=StepRatio, Sharpen=sharpen, ssm=ssm, dblur=dblur, thr=thr, dthr=dthr, smode=smode, esharp=esharp, ss=1, sthresh=sthresh, sstrength=sstrength, sthresh2=sthresh2, sblur=sblur) : spline36resize(destx,desty)
}
function m(int r, float x) {return(x<16?16:int(round(x/float(r))*r))}
Just for the hell of it I ported the sharpening to its own separate function if anyone wants to test it separately.
# Protected sharpen
#
#
#
Function sharp(Clip Clp,Int"Sharpen", float "ssm", int "dblur", float "sharpthr", float "dthr", int "smode", int "esharp", float "ss", float "sblur", float "dsharpen")
{
OX = Clp.Width
OY = Clp.Height
Sharpen = Default(Sharpen, 20)
SSm = Default(SSm, 2)
dblur = Default(Dblur, 7)
sharpthr = Default(sharpthr, 10)
dthr = Default(dthr, 0.65)
smode = Default(smode, 3)
esharp = Default(esharp, 0)
ss = Default(ss, 1)
sblur = Default(sblur, 1)
dsharpen = default(dsharpen, 1)
source = clp
s1 = source.spline36resize(OX*ssm, OY*ssm)
#sb = source.levels(255, 1, 255, 0, 0, false)
Nodetail = s1.tbilateral(diameterl=dblur, diameterc=3, sdevl=dthr, sdevc=dthr)
mask = yv12lutxy(s1, nodetail, "x y - abs 250 *", "x y - abs 75 *", "x y - abs 75 *", U=3, V=3).bilinearresize(OX, OY)#.mergechroma(sb, 1)
s2 = source#.LimitedSharpenfaster(Smode=Smode, soft=8, strength=sharpen, overshoot=Esharp, SS_X=1.25, SS_Y=1.25, lmode=1)
sharp = s2.unsharp(vary=sblur, varc=sblur, strength=dsharpen)
Result = maskedmerge(sharp, s2, mask)
return (Result)
}
Ill get to the parameters later after I have tested more and tweaked a few things, I wont be posting the parameters for protected sharpen, I made it to test an idea.
Didée
6th January 2007, 23:44
[edit] aparently yv12lutxy does not allow the use of variables in its notation, so for now mask thresholding will be unchangeable.
Really. So how comes I use variables in yv12lutxy (resp. mt_lutxy) quite much & without problems ... :)
If you want to do, say,
# result = clip1 + foo - clip2
foo = some_number
yv12lutxy(c1,c2, "x [foo] + y -")
then you have to do that like
foo= string(some_number)
yv12lutxy(c1,c2, "x "+foo+" + y -")
Mind you, I'm not bothered if you use like 20 single filters to achieve one single operation. I just saw that there was some unnecessarily complicated code, and thought it should be mentioned that it could be simplified substantially.
Edit:
Ooops, just noticed the masking changes from v2.a1 to v2.a2 :
No more levels cascading ... sorry.
*.mp4 guy
8th January 2007, 06:13
Here is the latest update to multiswar v2, masking parameters work now, chroma warping has been added and can be specified separately or will be set automatically based on the warping parameter, Frfun7 and dctfun are commented out, you can uncomment them out and use them with out changing anything else if you want the functionality, lastly an experimental new line mode has been added, it can be activated by setting slines=true.
# MultiSWAR - Multi Step Warping And Resizing - V2 Beta1
#
#
#
LoadPlugin("D:\Media\Plugins\WarpSharp.dll")
LoadPlugin("D:\Media\Plugins\GradFun2db.dll")
Import("D:\Media\Plugins\LimitedSharpenFaster_v2.0b\LimitedSharpenFaster.avs")
import("D:\Media\Plugins\SeeSaw.avs")
Function MultiSWAR(Clip Clp,Int"DestX",Int"DestY",Int"StepRatio",Int"Sharpen", float "ssm", int "dblur", float "thr", string "dthr", int "smode", int "esharp", float "ss", int "sthresh", float "sstrength", int "sthresh2", float "sblur", bool "slines", string "bias", int "warping", int "chromawarp")
{
OX = m(16,Clp.Width)
OY = m(16,Clp.Height)
DestX = Default(DestX, OX*2)
Desty = Default(Desty, OY*2)
Stepratio = Default(Stepratio, 4)
Sharpen = Default(Sharpen, 40)
SSm = Default(SSm, 2)
dblur = Default(Dblur, 7)
thr = Default(thr, 0.65)
dthr = Default(dthr, "245")
smode = Default(smode, 3)
esharp = Default(esharp, 0)
ss = Default(ss, 1)
sthresh = Default(sthresh, 1)
sstrength = Default(sstrength, 0.6)
sthresh2 = Default(sthresh2, 255)
sblur = Default(sblur, 1)
slines = Default(slines, false)
bias = default(bias, "25")
warping = default(warping, 4)
chromawarp = default(chromawarp, warping*25)
Clp.Spline36Resize(OX+round(OX/StepRatio/4)*4,OY+round(OY/StepRatio/4)*4)
OXo = OX+round(OX/StepRatio/4)*4
OYo = OY+round(OY/StepRatio/4)*4
o = last.converttoyv12()
s01 = o.aWarpSharp(Depth=warping, Blurlevel=1, cm=0)
s02 = o.warpsharp(chromawarp, chromawarp)
s = s01.mergechroma(s02, 1)
ss = s.spline36resize(OX*SSm, OY*SSm)
Nodetail = ss.tbilateral(diameterl=dblur, diameterc=3, sdevl=thr, sdevc=thr)
mask = yv12lutxy(ss, nodetail, "x y - abs "+dthr+" * "+bias+" +", "x", "x", U=3, V=3).bilinearresize(OXo, OYo)
lines = s.LimitedSharpenfaster(Smode=Smode, soft=8, strength=sharpen, overshoot=Esharp, SS_X=1.25, SS_Y=1.25, lmode=1)#.DCTFun4b(Sthresh,Sthresh).FrFun7(Sstrength,Sthresh2,Sthresh2)
lines
slines ? S.pointresize(OXo*2, OYo*2).gaussianblur(vary=1, varc=2).aWarpSharp(Depth=4, Blurlevel=1, cm=0).limitedsharpenfaster(strength=sharpen, smode=3, SS_X=1, SS_Y=1, overshoot=0).bilinearresize(OXo, OYo) : last
linesf = last
detail = o.unsharp(vary=sblur, varc=sblur, strength=1)
maskedmerge(detail, linesf , mask)
return (width < destx) ? MultiSWAR(DestX, DestY, StepRatio=StepRatio, Sharpen=sharpen, ssm=ssm, dblur=dblur, thr=thr, dthr=dthr, smode=smode, esharp=esharp, ss=1, sthresh=sthresh, sstrength=sstrength, sthresh2=sthresh2, sblur=sblur, slines=slines, bias=bias, warping=warping, chromawarp=chromawarp) : spline36resize(destx,desty)
}
function m(int r, float x) {return(x<16?16:int(round(x/float(r))*r))}
I will only explain parameters that are new, or have changed since version 1.
SSm = Default(SSm, 2): sets the supersampling used during mask creation, don't change it
dblur = Default(Dblur, 7): sets the radius used to detedt details during mask creation, higher values are slower, but probably better, the default is adequate in almost all situations.
thr = Default(thr, 0.65): sets the threshold for detail detection, worth experimenting with, higher values makes more things detected as details, higher values may cause oversharpening.
dthr = Default(dthr, 245): sets how strongly the mask protects against oversharpening, higher values give more protection, 0 gives none. Must be set in quotes, ie multiswar(dthr="225").
esharp = Default(esharp, 0): sets how much oversharpening can be used by limited sharpen, on very blury sources it might be worth raising this value, otherwise it will just cause halos.
sblur = Default(sblur, 1): sets the radius of the sharpening used on detail areas.
slines = Default(slines, false): if set to true a different line resizing aproach is used, see if you like it, probably good on cartoons.
bias = default(bias, 25): determines how detailed areas are treated, higher values cause them to be treated more like lines, lower values (down to 0) cause them to be treated more like texture. Must be set in quotes, ie multiswar(bias="0").
warping = default(warping, 4): unless chromawarp is specified separately this parameter now has a maximum value of 10
chromawarp = default(chromawarp, warping*25): chroma warping, usefull range 100-255.
I will pack up all of the dependencies and make it easier to get running when enough people ask, or sometime when I feal like it. Let me know of any bugs, or posible improvements, please limit the improvements to things I might actually be able to do ( so, not that much).
*.mp4 guy
18th January 2007, 08:07
New version, better sharpening, use bias and lbias to control the strength of the sharpening, high bias sharpens texture less, high lbias sharpens lines and some texture less, higher stepratios require higher bias settings to avoid artefacts, higher sthresh settings can counteract artefacts to a small extent, but is most usefull on cartoons. The script could use some cleanup, but it works fine so I'm not going to bother changing anything unless I think of further improvements.
# MultiSWAR - Multi Step Warping And Resizing - V2 Beta 2
#
#
#
Function MultiSWAR(Clip Clp,Int"DestX",Int"DestY",Int"StepRatio",Int"Sharpen", float "ssm", int "dblur", float "thr", string "dthr", int "smode", int "esharp", float "ss", int "sthresh", float "sstrength", int "sthresh2", float "sblur", bool "slines", string "bias", int "warping", int "chromawarp", string "lthr", string "lbias", int "lblur")
{
OX = m(16,Clp.Width)
OY = m(16,Clp.Height)
DestX = Default(DestX, OX*2)
Desty = Default(Desty, OY*2)
Stepratio = Default(Stepratio, 4)
Sharpen = Default(Sharpen, 40)
SSm = Default(SSm, 2)
dblur = Default(Dblur, 7)
thr = Default(thr, 0.65)
dthr = Default(dthr, "1024")
smode = Default(smode, 3)
esharp = Default(esharp, 0)
ss = Default(ss, 1)
sthresh = Default(sthresh, 1)
sstrength = Default(sstrength, 0.6)
sthresh2 = Default(sthresh2, 255)
sblur = Default(sblur, 1)
slines = Default(slines, false)
bias = default(bias, "215")
warping = default(warping, 4)
chromawarp = default(chromawarp, warping*25)
lthr = default(lthr, "23")
lbias = default(lbias, "127")
lblur = default(lblur, 4)
Clp.Spline36Resize(OX+round(OX/StepRatio/4)*4,OY+round(OY/StepRatio/4)*4)
OXo = OX+round(OX/StepRatio/4)*4
OYo = OY+round(OY/StepRatio/4)*4
o = last.converttoyv12()
s01 = o.aWarpSharp(Depth=warping, Blurlevel=1, cm=0)
s02 = o.warpsharp(chromawarp, chromawarp)
s = s01.mergechroma(s02, 1)
ss = s.spline36resize(OX*SSm, OY*SSm)
#s_antiartifact = s.dctfun4b(sthresh, sthresh)
detail = o.unsharp(vary=sblur, varc=sblur, strength=1)
MedianSharp = o.Xsharpen(strength=sharpen,threshold=255).dctfun4b(sthresh, sthresh)
lsharp = s.LimitedSharpenfaster(Smode=Smode, soft=8, strength=sharpen, overshoot=Esharp, SS_X=1.25, SS_Y=1.25, lmode=1)
diff1 = ss.tbilateral(diameterl=7, diameterc=3, sdevl=thr, sdevc=thr)
mask1 = yv12lutxy(ss, diff1, "y x - abs "+dthr+" * "+bias+" +", "x", "x", U=3, V=3).bilinearresize(OXo, OYo)
diff2 = ss.medianblur(radiusy=lblur, radiusu=-256, radiusv=-256)
mask2 = yv12lutxy(ss, diff2, "y x - abs "+lthr+" * "+lbias+" +", "x", "x", U=3, V=3).bilinearresize(OXo, OYo)
lines = maskedmerge(mediansharp, s, mask2)
maskedmerge(detail, lines , mask1)
return (width < destx) ? MultiSWAR(DestX, DestY, StepRatio=StepRatio, Sharpen=sharpen, ssm=ssm, dblur=dblur, thr=thr, dthr=dthr, smode=smode, esharp=esharp, ss=1, sthresh=sthresh, sstrength=sstrength, sthresh2=sthresh2, sblur=sblur, slines=slines, bias=bias, warping=warping, chromawarp=chromawarp, lthr=lthr, lbias=lbias, lblur=lblur) : spline36resize(destx,desty)
}
function m(int r, float x) {return(x<16?16:int(round(x/float(r))*r))}
*.mp4 guy
5th February 2007, 20:03
New Version, with documetation, 1 new feature, and a minor script cleanup.
# MultiSWAR - Multi Step Warping And Resizing - V2 Beta 3
#
#
#
#DestX/DestY: Default 2x input resolution. Sets the output resolution
# (yes its really obvious)
#
#
# StepRatio: Determines how many iterations of resizing wil be
# needed to reach your destination resolution, the default is 4.
# Higher values are slower but should remove more alliasing.
# High values may result in more artifacts. The usable range is
# 1 to around 16.
#
#
# Smoothing: When Smoothing is enabled (Which it is not by
# default) a light noise reduction filter is used to help avoid
# sharpening artifacts from the source image, this is most
# usefull for animated content.
#
#
# Sthresh: Sets the strength of the smoother, default value is 1
# useful range is 0 to ~8.
#
#
# Sharpen: Sets the amount of sharpening aplied by the main
# sharpening functions, usable values are 10 to 65
# depending upon your source, the default is 40
# higher values run the risk of aliasing and banding.
#
#
# Sharpen2: Sets the amount of additional sharpening to be aplied
# to the video, used to make faint details more prominent
# usable values are 0.33 to 1 depending upon the source.
# The default value is 1 which doesn't usually cause any
# problems, both this and sharpen are also affected by
# the masking parameters, higher values run the risk of
# excessive noise and banding.
#
#
# Warping: The strength parameter for Warper. The default of 4
# should work the best on film, 8 is a good value for animated
# material. if you are getting aliasing you can raise this value
# to get rid of it. The acceptable range is 0 to 64. Unless
# chromawarp is specified separately this parameter has a maximum
# value of 10.
#
#
# chromawarp: Default warping*25. Chroma warping, usefull range 100-255.
#
#
# SSm: Default 2. Sets the supersampling used during mask creation,
# don't change it.
#
#
# bmrad Default 7. Sets the radius used to detect details during mask
# creation, higher values are slower, but probably better, the
# default is adequate in almost all situations.
#
#
# thr: Default 0.65. Sets the threshold for detail detection, worth
# experimenting with, higher values makes more things detected as
# details, higher values may cause oversharpening.
#
#
# dthr Default 245. Sets how strongly the mask protects against
# oversharpening, higher values give more protection, 0 gives
# none. does not need to be set in quotes anymore.
#
#
# dbias: Default 25. Determines how detailed areas are treated, higher
# values cause them to be treated more like lines, lower values
# (down to 0) cause them to be treated more like texture. does
# not need to be set in quotes anymore.
#
#
# lthr: default 25. The same as dthr, but used to protect lines from being
# oversharpened, oversharpening causes aliasing.
#
#
# lbias: default 225. The same as dbias, but used on lines, higher values
# cause less overall sharpening of lines and detail that
#` would otherwise be treated as lines.
#
#
#hthr/hbias: The same parameters as d/llthr and d/lbias, used in the
# creation of the halo prevention mask, higher values
# offer more protection, defaults are hthr=48, hbias=-48
#
#
# srad: Default 1. Sets the radius of the sharpening used on
# detailed areas.
#
#mmrad: default 4. Sets the radius used in creating the median mask
#
#
#agmrad: default 1. sets the radius used in creating the halo mask, higher
# values give more protection against halos, but will cause bluring.
#
#
#reducehalos: Default true. enables halo protection, will not reduce halos
# in the source, only those added by multiswar.
#
#
#lanczos: Defualt true. enables use of lanczos resizing instead of
# spline36 resizing, lanczos is sharper but more artifact
# prone, good for film content.
#
#
#
#Misc parameters:
#DestX
#Desty
#Stepratio
#warping
#chromawarp
#SSm
#sthresh
#Sharpen
#Sharpen2
#thr
#
#Masking parameters:
#dthr
#lthr
#hthr
#dbias
#hbias
#lbias
#
#Radius parameters:
#Srad
#bmrad
#mrad
#agmrad
Function MultiSWAR(Clip Clp, Int"DestX", Int"DestY" ,Int"StepRatio", int "warping", int "chromawarp", float "ssm", int "sthresh", Int"Sharpen", float"Sharpen2", float "thr", int "dthr", int "lthr", int "hthr", int "dbias", int "lbias", int "hbias", int "srad", int "bmrad", int "mmrad", int "agmrad", bool "reducehalos", bool "smoothing", bool "lanczos")
{
OX = m(16,Clp.Width)
OY = m(16,Clp.Height)
DestX = Default(DestX, OX*2)
Desty = Default(Desty, OY*2)
Stepratio = Default(Stepratio, 4)
warping = default(warping, 4)
chromawarp = default(chromawarp, warping*25)
SSm = Default(SSm, 2)
sthresh = Default(sthresh, 1)
Sharpen = Default(Sharpen, 40)
Sharpen2 = Default(Sharpen2, 0.5)
thr = Default(thr, 0.65)
dthr = Default(dthr, 1024)
lthr = default(lthr, 25)
hthr = default(hthr, 48)
dbias = default(dbias, 100)
hbias = default(hbias, -48)
lbias = default(lbias, 225)
Srad = default(srad, 1)
bmrad = default(bmrad, 7)
mmrad = default(mmrad, 4)
agmrad = default(agmrad, 1)
reducehalos = default(reducehalos, true)
smoothing = default(smoothing, false)
lanczos = default(lanczos, true)
Clp.Spline36Resize(OX+round(OX/StepRatio/4)*4,OY+round(OY/StepRatio/4)*4)
lanczos ? Clp.lanczos4resize(OX+round(OX/StepRatio/4)*4,OY+round(OY/StepRatio/4)*4) : last
#Smooth = Clp.Bilinearresize(OX+round(OX/StepRatio/4)*4,OY+round(OY/StepRatio/4)*4)
OXo = OX+round(OX/StepRatio/4)*4
OYo = OY+round(OY/StepRatio/4)*4
o = last.converttoyv12()
s01 = o.aWarpSharp(Depth=warping, Blurlevel=1, cm=0)
s02 = o.warpsharp(chromawarp, chromawarp)
s = s01.mergechroma(s02, 1)
ss = s.spline36resize(OX*SSm, OY*SSm)
s
smoothing ? s.dctfun4b(sthresh, sthresh) : last
detail = o.unsharp(vary=srad, varc=srad, strength=sharpen2)
MedianSharp = o.Xsharpen(strength=sharpen,threshold=255).dctfun4b(sthresh, sthresh)
#lsharp = s.LimitedSharpenfaster(Smode=Smode, soft=8, strength=sharpen, overshoot=Esharp, SS_X=1.25, SS_Y=1.25, lmode=1)
diff1 = ss.tbilateral(diameterl=bmrad, diameterc=3, sdevl=thr, sdevc=thr)
mask1 = yv12lutxy(ss, diff1, "y x - abs "+string(dthr)+" * "+string(dbias)+" +", "x", "x", U=3, V=3).bilinearresize(OXo, OYo)
diff2 = ss.medianblur(radiusy=mmrad, radiusu=-256, radiusv=-256)
mask2 = yv12lutxy(ss, diff2, "y x - abs "+string(lthr)+" * "+string(lbias)+" +", "x", "x", U=3, V=3).bilinearresize(OXo, OYo)
Ablur = s.averageblur(rady=agmrad, radc=0)
gblur = s.gaussianblur(vary=agmrad, varc=0)
mask3 = yv12lutxy(Ablur, Gblur, "y x - abs "+string(hthr)+" * "+string(hbias)+" +", "x", "x", U=3, V=3)
s = last
lines = maskedmerge(mediansharp, s, mask2)
detail_and_lines = maskedmerge(detail, lines , mask1)
reducehalos ? Maskedmerge(detail_and_lines, S, Mask3) : last
return (width < destx) ? MultiSWAR(destx=destx, desty=desty, stepratio=stepratio, warping=warping, chromawarp=chromawarp, ssm=ssm, sthresh=sthresh, sharpen=sharpen, sharpen2=sharpen2, thr=thr, dthr=dthr, lthr=lthr, hthr=hthr, dbias=dbias, lbias=lbias, hbias=hbias, srad=srad, bmrad=bmrad, mmrad=mmrad, agmrad=agmrad, reducehalos=reducehalos, smoothing=smoothing, lanczos=lanczos) : spline36resize(destx,desty)
}
function m(int r, float x) {return(x<16?16:int(round(x/float(r))*r))}
[credit for the formatting and some of the information about the parameters goes to Check, thanks for the help]
#DestX/DestY: Default 2x input resolution. Sets the output resolution
# (yes its really obvious)
#
#
# StepRatio: Determines how many iterations of resizing wil be
# needed to reach your destination resolution, the default is 4.
# Higher values are slower but should remove more alliasing.
# High values may result in more artifacts. The usable range is
# 1 to around 16.
#
#
# Smoothing: When Smoothing is enabled (Which it is not by
# default) a light noise reduction filter is used to help avoid
# sharpening artifacts from the source image, this is most
# usefull for animated content.
#
#
# Sthresh: Sets the strength of the smoother, default value is 1
# useful range is 0 to ~8.
#
#
# Sharpen: Sets the amount of sharpening aplied by the main
# sharpening functions, usable values are 10 to 65
# depending upon your source, the default is 40
# higher values run the risk of aliasing and banding.
#
#
# Sharpen2: Sets the amount of additional sharpening to be aplied
# to the video, used to make faint details more prominent
# usable values are 0.33 to 1 depending upon the source.
# The default value is 1 which doesn't usually cause any
# problems, both this and sharpen are also affected by
# the masking parameters, higher values run the risk of
# excessive noise and banding.
#
#
# Warping: The strength parameter for Warper. The default of 4
# should work the best on film, 8 is a good value for animated
# material. if you are getting aliasing you can raise this value
# to get rid of it. The acceptable range is 0 to 64. Unless
# chromawarp is specified separately this parameter has a maximum
# value of 10.
#
#
# chromawarp: Default warping*25. Chroma warping, usefull range 100-255.
#
#
# SSm: Default 2. Sets the supersampling used during mask creation,
# don't change it.
#
#
# bmrad Default 7. Sets the radius used to detect details during mask
# creation, higher values are slower, but probably better, the
# default is adequate in almost all situations.
#
#
# thr: Default 0.65. Sets the threshold for detail detection, worth
# experimenting with, higher values makes more things detected as
# details, higher values may cause oversharpening.
#
#
# dthr Default 245. Sets how strongly the mask protects against
# oversharpening, higher values give more protection, 0 gives
# none. does not need to be set in quotes anymore.
#
#
# dbias: Default 25. Determines how detailed areas are treated, higher
# values cause them to be treated more like lines, lower values
# (down to 0) cause them to be treated more like texture. does
# not need to be set in quotes anymore.
#
#
# lthr: default 25. The same as dthr, but used to protect lines from being
# oversharpened, oversharpening causes aliasing.
#
#
# lbias: default 225. The same as dbias, but used on lines, higher values
# cause less overall sharpening of lines and detail that
#` would otherwise be treated as lines.
#
#
#hthr/hbias: The same parameters as d/llthr and d/lbias, used in the
# creation of the halo prevention mask, higher values
# offer more protection, defaults are hthr=48, hbias=-48
#
#
# srad: Default 1. Sets the radius of the sharpening used on
# detailed areas.
#
#mmrad: default 4. Sets the radius used in creating the median mask
#
#
#agmrad: default 1. sets the radius used in creating the halo mask, higher
# values give more protection against halos, but will cause bluring.
#
#
#reducehalos: Default true. enables halo protection, will not reduce halos
# in the source, only those added by multiswar.
#
#
#lanczos: Defualt true. enables use of lanczos resizing instead of
# spline36 resizing, lanczos is sharper but more artifact
# prone, good for film content.
#
#
#
#Misc parameters:
#DestX
#Desty
#Stepratio
#warping
#chromawarp
#SSm
#sthresh
#Sharpen
#Sharpen2
#thr
#
#Masking parameters:
#dthr
#lthr
#hthr
#dbias
#hbias
#lbias
#
#Radius parameters:
#Srad
#bmrad
#mrad
#agmrad
digitalone
7th February 2007, 15:14
thx for the new version mate. can you please update the package link? all the links are dead except the backup link which is for MultiSWAR v1 Beta 3.
buzzqw
7th February 2007, 16:26
@*.mp4 guy
got an error:
http://img441.imageshack.us/img441/6199/unsharpuj7.png (http://imageshack.us)
previus version of multiswar run ok, missed i some fiters ?
BHH
*.mp4 guy
7th February 2007, 21:45
This link (http://www.megaupload.com/?d=ZYETT29X) has an archive with all of the plugind needed for V2.
buzzqw
8th February 2007, 08:18
thanks ! i missed new versione of dctfun4b!!
i had repacked needed plugin + MultiSWAR_V2-Beta3.avsi
here is the direct link www.64k.it/andres/data/m/MultiSWAR_V2-Beta3.rar
if it's ok i will be glad host it, else post you comments :)
BHH
Soulhunter
8th February 2007, 21:41
@ *.mp4 guy
I can host the stuff as well, same goes for ya other functions... Just send me the zips and I add the stuff to my crappy page! Btw, seems you learned a lot and made huge progress since back then on IRC when all this started... Thumbs up! :]
Bye
Terranigma
8th February 2007, 21:57
.mp4 guy. you can host files for free at pcpages.com. They allow you to host up to 50mb's. :)
Btw, thanks for the updated script. :)
*.mp4 guy
9th February 2007, 03:54
@buzzqw - Thanks for hosting it, feel free to host anything I've written, the only condition is that I'm listed as the author.
@Soulhunter - I'll take you up on that when Multiswar's replacement is finnished :devil:. Your help was invaluable in learning how to script, its much easier to learn when you know what a function is actually doing :sly:. I've dropped by irc a few times, but everyone is always afk =/.
@Terranigma - I'll keep that in mind If I need a dedicated host
[edit] This post (http://forum.doom9.org/showthread.php?p=950985#post950985) has a sneak peak of multiswars succesor.
Soulhunter
9th February 2007, 05:19
I've dropped by irc a few times, but everyone is always afk =/.
Hmm, yeah... Atm Im sorta busy in real life [girlfriend, job...] so Im only in front of my pc 2-3 hours per day [somewhere between 17-22h gmt+1] but you can always leave me a pm here in the forum! :]
Bye
Chainmax
8th March 2007, 20:49
http://www.geocities.co.jp/SiliconValley-PaloAlto/2382/
There's documentation somewhere or another. It's a massive multifunction plugin, but the warpsharp is all I care about - it has two arguments, bump and depth, that are 0 to 255. Bump is the warpiness, depth is the strength, both default to 128, I think.
afaik it has no bugs, I've not seen any, aside from setting bump way too high makes it go all acid trip. I use it in EKG and realtime movie watching.
...
I love MarcFD's aWarpSharp for its line thinning effect. Can this package you linked to do the exact same thing as aWarpSharp(depth=16,cm=1)? If so, at what settings?
Chainmax
20th March 2007, 23:12
*.mp4 guy, do you think MultiSWAR would be suited for a 2x upsize on this kind of video:
http://img214.imageshack.us/img214/4618/schfilt0pi.png (http://imageshack.us)
?
[edit]How about adding a dependencies list within the .AVS for us filter hunters?
vBulletin® v3.8.11, Copyright ©2000-2026, vBulletin Solutions Inc.