Welcome to Doom9's Forum, THE in-place to be for everyone interested in DVD conversion.

Before you start posting please read the forum rules. By posting to this forum you agree to abide by the rules.

 

Go Back   Doom9's Forum > Capturing and Editing Video > Avisynth Usage

Reply
 
Thread Tools Search this Thread Display Modes
Old 11th June 2006, 03:05   #181  |  Link
Revgen
Registered User
 
Join Date: Sep 2004
Location: Near LA, California, USA
Posts: 1,545
You need to download the corrector function separately since it's not included in recent versions of mvtools.

You can get it separately here http://avisynth.org.ru/mvtools/corrector.html
__________________
Pirate: Now how would you like to die? Would you like to have your head chopped off or be burned at the stake?

Curly: Burned at the stake!

Moe: Why?

Curly: A hot steak is always better than a cold chop.

Last edited by Revgen; 11th June 2006 at 03:08.
Revgen is offline   Reply With Quote
Old 11th June 2006, 09:16   #182  |  Link
zambelli
Doom9ing since 2001
 
zambelli's Avatar
 
Join Date: Oct 2001
Location: Seattle, WA, USA
Posts: 2,002
Quote:
Originally Posted by Revgen
You need to download the corrector function separately since it's not included in recent versions of mvtools.
You can get it separately here http://avisynth.org.ru/mvtools/corrector.html
Yeah, I've got it. My problem is not that MVbob() doesn't work at all - but that it produces combing artifacts even in non-moving images. See my linked post above.
zambelli is offline   Reply With Quote
Old 23rd October 2006, 18:42   #183  |  Link
boombastic
Registered User
 
Join Date: Oct 2003
Location: Ascoli Piceno-Italy
Posts: 279
With this script i'm getting the error:

ther's no mvfps function.Why?Thanks!!

SetMtMode(5)
mpeg2source("F:\1x02\VIDEO_TS\VTS_01_1.d2v")
import("d:\Programmi\AviSynth 2.5\plugins\SeeSaw.avs")
import("d:\Programmi\AviSynth 2.5\plugins\mvbob.avs")
#import("d:\Programmi\AviSynth 2.5\plugins\spresso.avs")
ColorMatrix(d2v="F:\1x02\VIDEO_TS\VTS_01_1.d2v")
Crop(8,80,-32,-80)
SeparateFields()
a=SelectEven().DeGrainMedian(limitY=0,limitUV=4,mode=1).SeeSaw(NRlimit=2, NRlimit2=2, Sstr=1.0, Slimit=7, Spower=2, Sdamplo=8, Szp=10, bias=1)
b=SelectOdd().DeGrainMedian(limitY=0,limitUV=4,mode=1).SeeSaw(NRlimit=2, NRlimit2=2, Sstr=1.0, Slimit=7, Spower=2, Sdamplo=8, Szp=10, bias=1)
weave()
#TomsMoComp(1,3,1)
mvbob()
mvfps(25)
LumaYV12(0,0.9)
boombastic is offline   Reply With Quote
Old 24th October 2006, 01:38   #184  |  Link
zambelli
Doom9ing since 2001
 
zambelli's Avatar
 
Join Date: Oct 2001
Location: Seattle, WA, USA
Posts: 2,002
Quote:
Originally Posted by zambelli View Post
Yeah, I've got it. My problem is not that MVbob() doesn't work at all - but that it produces combing artifacts even in non-moving images. See my linked post above.
If anyone runs into the same problem... Turns out this was causes by Avisynth's memory cap being set too low (16MB). It appears that some plugin in the MVBob suite doesn't report out of memory errors but produces bad results instead. So... Remember to give MVBob plenty of room to breathe!
zambelli is offline   Reply With Quote
Old 7th August 2007, 19:18   #185  |  Link
canuckerfan
Registered User
 
Join Date: Jul 2005
Posts: 317
not sure if this is the right place to ask, but here goes. is there anyway to update mvbob to take advantage of SSE2 capabilities?
canuckerfan is offline   Reply With Quote
Old 7th August 2007, 19:21   #186  |  Link
Revgen
Registered User
 
Join Date: Sep 2004
Location: Near LA, California, USA
Posts: 1,545
Quote:
Originally Posted by canuckerfan View Post
not sure if this is the right place to ask, but here goes. is there anyway to update mvbob to take advantage of SSE2 capabilities?
I don't think it would matter.

MVBob needs RAM more than SSE2 or a faster CPU.

It's also a function, so SSE2 would have to be present in all plugins in order to work.
__________________
Pirate: Now how would you like to die? Would you like to have your head chopped off or be burned at the stake?

Curly: Burned at the stake!

Moe: Why?

Curly: A hot steak is always better than a cold chop.

Last edited by Revgen; 7th August 2007 at 19:24.
Revgen is offline   Reply With Quote
Old 10th March 2008, 07:45   #187  |  Link
halsboss
likes to tinker
 
Join Date: Jan 2004
Location: girt by sea
Posts: 635
latest MVbob_MT2 ?

Is the latest MT2 version of MVbob here from foxyshadis ? http://forum.doom9.org/showthread.ph...334#post812334
halsboss is offline   Reply With Quote
Old 29th March 2008, 02:49   #188  |  Link
TSchniede
Registered User
 
Join Date: Aug 2006
Posts: 77
I think the newest version is on
http://forum.doom9.org/showthread.ph...18#post1052018

I myself use a modified version of mvbob as mvbob.mrestore usually gives better results than restore24 or other ivtc but it is really dead slow

Code:
#needs mvtools >= 1.8.2 for pelclip, was: clip2x, dct is available since 1.6.1
#based on mvbob, a motion compensated bobber, build by scharfis_brain.
##nnedi and nnedibob was made possible by tritical and the fellow Doom9 community who contributed CPU cycles.

#Helper functions:
		Function DumbBob(clip Input, int "Height")
	{
		Input.Bob(0, 0.5, height = Height)
		GetParity(Input) ? AssumeTFF() : AssumeBFF()
	}
	#slow, but accurate EEDI-bob, always dumb ;)
	function eedibob(clip i, bool "s")
	{
		s=default(s,false)
		i.separatefields().eedi2(field = (getparity(i) ? 3 : 2), nt = (s ? 35 : 50), pp = (s ? 3 : 1))
		assumeframebased()
		getparity(i) ? assumetff() : assumebff()
	}
	Function nnEDIbob(clip Input)
	{
	    Input.nnedi(field=-2)
	}
	# BSec is based on SecureBob, default is only different for YUY2 color.
	# l > 2 : different motiondedection, compares each field wih its temporal predessors, it reacts faster to "static" areas => anime
	#		similar to motion/interlacing dedection of Kerneldeint
	#
	# postprocessing: (touces even non-interpolated fields in default code, one possible solution is included below)
	# edgeth,calmHEddge calms all nearly horizontal edges with strong temporal filtering (ReduceFlicker), 
	#       makes the bob-weakness less obvious, luma only => anime, edgeth is the threshold for the edge dedection. 
	function BSec(clip Input, int "th", int "l",int "type", int "edgeth", bool "calmHEddge"){ 
		function staticmask(clip e, int th, int l, int chromafilt){	
			e0  = e.MotionMask(thY1 = th, thY2 = th, thC1 = Round(th * 0.5), thC2 = Round(th * 0.5), thSD = 255, U = 3, V = 3)
			e1  = e0.trim(1, 0)
			e2  = e0.trim(2, 0)
			e3  = e0.trim(3, 0)
			e4  = e0.trim(4, 0)
			e5  = e0.trim(5, 0)
			e6  = e0.trim(6, 0)
			e7  = e0.trim(7, 0)

			ea0 = mt_logic(e0,  e1,  "or", u = chromafilt, v = chromafilt)
			ea1 = mt_logic(e2,  e3,  "or", u = chromafilt, v = chromafilt)
			ea2 = mt_logic(e4,  e5,  "or", u = chromafilt, v = chromafilt)
			ea3 = mt_logic(e6,  e7,  "or", u = chromafilt, v = chromafilt)

			eb0 = mt_logic(ea0, ea1, "or", u = chromafilt, v = chromafilt)
			eb1 = mt_logic(ea2, ea3, "or", u = chromafilt, v = chromafilt)

			ec  = mt_logic(eb0, eb1, "or", u = chromafilt, v = chromafilt)

			(l==0) ? ec .duplicateframe(0).duplicateframe(0).duplicateframe(0) :\
			(l==1) ? eb0.duplicateframe(0) :\
			(l==2) ? ea0 : e0

			return last
		}

		th   = default(th, 3)
    		l    = default(l, 2)
		type=default(type,3)
		edgeth = default(edgeth, (default(calmHEddge,false) ? 110 : -1))
				
		YV12input = isyv12(Input)
		i2=YV12input ? Input : Input.converttoyv12(interlaced = true)
		i3=i2.separatefields()
		YVtype = YV12input ? 3 : 1

		Bobbed     =	(Type == 0) ? Input.DumbBob() :\ 
				(Type == 1) ? Input.eedibob() :\ 
				(Type == 2) ? Input.eedibob(s=true) :\ 
					      Input.nnEDIBob() 

		Weaved     =	i2.DoubleWeave()

		EvenFields = i3.SelectEven().StaticMask(th, l, YVtype)
		OddFields  = i3.SelectOdd() .StaticMask(th, l, YVtype)

		BobbedYV12= (YV12input ? Bobbed : Bobbed.converttoyv12())

		CombMaskT   = Interleave(EvenFields, OddFields).dumbbob()
		CombMask   = (l > 2) ? Weaved.StaticMask(th, l-2, YVtype).fadein0(3,color=$FFFFFF) : Merge(CombMaskT.Trim(1, 0), CombMaskT, 0.5).mt_binarize(threshold=20,upper=true,u = YVtype,v = YVtype).fadein0(2).invert()
		
		
		HLMask = edgeth > 0 ? mt_lutxy(BobbedYV12.mt_edge(mode = "3 3 3 -1 -1 -1 -2 -2 -2 4", thY1=0, thY2=255, thC1=255, thC2=255,u=1,v=1),
				\BobbedYV12.mt_edge(mode = "-2 -2 -2 -1 -1 -1 3 3 3 4", thY1=0, thY2=255, thC1=255, thC2=255,u=1,v=1)
				\,yexpr="x y + "+string(edgeth * 2)+" > 255 0 ?",u=1,v=1).mt_expand(u=1,v=1).removegrain(12) : i3 #HLMask chroma is garbage !!!
		
		BobbedYV12 = edgeth > 0 ? mt_merge(BobbedYV12,BobbedYV12.ReduceFlicker(),HLMask, u = 2, v = 2) : BobbedYV12
	
	####### restrict temporal filtering to interpolated fields, instead to only moving "horizontal" lines (IMHO those are always "moving" due to interpolation)
	#	BobbedYV12 = interleave(i2.separatefields(),BobbedYV12.separatefields().selectevery(4,1,2)).weave()
	
	#	merge bobbed moving areas with weaved static areas
		mt_merge(Weaved, BobbedYV12, CombMask, u = YVtype, v = YVtype)

	####### Debug: show difference between normal motiondedection and alternative eg. l==x and l==x+2, only useful for x <= 2
	#	stackhorizontal(mt_merge(Weaved, Bobbed, CombMask, u = 3, v = 3),mt_merge(Weaved, Bobbed, Weaved.StaticMask(th, l), u = 3, v = 3))		
		
		YV12input ? last : last.converttoyuy2().mergechroma(Bobbed,1.0)		
		getparity(Input) ? assumetff() : assumebff()	
		assumeframebased()
		return getparity(Input) ? assumetff() : assumebff()
	}


# MCF (MotionCompensateFields) is based on different versions of MVBob, BSec.MCF(simplemv=true) should yield results similar to recent MVBob()
# MCF makes motioncompensation on the interpolated fields on a bobbed clip, unlike MVBob which includes SecureBob.
# differences:
# uses pelclip instead of idx => more MT friendly
# uses dct option (mdct) helps for (flickering video / fadeout) but is slow
# thSAD (tSAD) makes motion compensation only in areas with reasonable results => 
#       the blurred check in the corrector makes nearly never obvious artifacts, even for threasholds >5
#	otherwise areas with very high contrast can still contain arifacts which cancel each other out in the smoother
# debugtSAD: show the input and the motion compensated predesor and succesor, try on scenechanges and blends
# coherence: coherence of the motion vectors, default is 1000 for mvtools, 6000 for mvbob, I took 2000 because bad blocks get thrown away - thSAD
# mblur: is clip for mismatch analysis burred by simple kernelblur or medianblur?
function MCF(clip bobc, int "blksize", int "th", int "tSAD", bool "debugtSAD", int "mdct", int "coherence", bool "mblur")
{
	function blurclip(clip oclip, bool blurtype){
		return blurtype ? oclip.removegrain(12).removegrain(12) : oclip.BicubicResize(oclip.Width * 2, oclip.Height).MedianBlur().BicubicResize(oclip.Width, oclip.Height)
	}
# threshold for correcting failed compensated motion 
	th=default(th, 10) 

# defaults for the mocomp
	blksize=default(blksize,8)
	ol = blksize/2
	tm = true
	mdct= default(mdct,0)

# recent versions of mvtools can implicitly mask away blocks with SAD > x, only for mvcompensate
	tSAD = default(tSAD,320)
	debugtSAD = default(debugtSAD,false)
	coherence = default(coherence,2000)

# blur type for mismatch analysis
	mblur = default(mblur,false)

#determine clip Fieldorder
	yv12 = isyv12(bobc)

# create the upscaled clips for mvtools
	bob2x   = bobc.Lanczos4Resize(bobc.width()*2,bobc.height()*2,src_left=0.25, src_top=0.25)	

# create motion vectors
	mvf=bobc.mvanalyse(blksize=blksize,pel=2,isb=false,chroma=true, pelclip=bob2x, truemotion=tm,overlap=ol, dct=mdct, lambda=coherence)
	mvb=bobc.mvanalyse(blksize=blksize,pel=2,isb=true, chroma=true, pelclip=bob2x, truemotion=tm,overlap=ol, dct=mdct, lambda=coherence)

# create the motion compensated clip that are passed through to the output
	mcf=bobc.MVCompensate(mvf,pelclip=bob2x, thSAD=tSAD)
	mcb=bobc.MVCompensate(mvb,pelclip=bob2x, thSAD=tSAD)

# create clips for mismatch detection
	bobcf= (yv12 == false) ? mcf.converttoyv12().blurclip(mblur).converttoyuy2() : mcf.blurclip(mblur)
	bobcb= (yv12 == false) ? mcb.converttoyv12().blurclip(mblur).converttoyuy2() : mcb.blurclip(mblur)
	bobcs= (yv12 == false) ? bobc.converttoyv12().blurclip(mblur).converttoyuy2() : bobc.blurclip(mblur)

# detect mismatches of mvtools and replace them with motion adaptive bobbed areas
	mc=corrector(bobcs,bobc,   bobcf,bobcb,  mcf,mcb,   mode=0,th=th)

# select the correct lines 
	compensated_even= mc.selecteven().separatefields().selectodd() 
	compensated_odd = mc.selectodd() .separatefields().selecteven()

# merge them with the original fields
	original_even=bobc.selecteven().separatefields().selecteven()
	original_odd =bobc.selectodd().separatefields().selectodd()

	even = interleave(original_even, compensated_even).weave()
	odd  = interleave(original_odd , compensated_odd ).weave()

	interleave(even,odd)

# output video
	(bobc.getparity()) ? last.assumetff() : last.assumebff()
	debugtSAD ? (isyv12 ? stackvertical(fields,mcf,mcb) : stackvertical(fields,mcf,mcb).converttoyuy2()) : last
}

# needed plugins
LoadPlugin("RemoveGrain.dll") #use SSE version if your CPU allows
LoadPlugin("masktools.dll")
LoadPlugin("mt_masktools.dll") #replacement for masktools, mt_motion broken - (th unused, at least when I checked, v29 I think) 
LoadPlugin("mvtools.dll")#newest version recommended
LoadPlugin("corrector.dll")#for new mvtools
LoadPlugin("medianblur.dll") # can be used for mismatch detection instead of removegrain
LoadPlugin("nnedi.dll")
LoadPlugin("eedi2.dll")
LoadPlugin("ReduceFlicker.dll") #use SSE version if your CPU allows

Last edited by TSchniede; 29th March 2008 at 03:02. Reason: changed plugin names to standard (no cpu specific version...)
TSchniede is offline   Reply With Quote
Reply

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT +1. The time now is 21:38.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2024, vBulletin Solutions Inc.