Log in

View Full Version : SD upscaling and Bobbers


hanfrunz
17th June 2008, 14:40
Hello everyone,

today i upscaled (576i) material to HD (1080p). I used this script:


qtsource("somefile",mode=2,raw="2yuv")
mvbob()
selectevery(2,1)
lanczosresize(1920,1080)


it looks pretty good and is pretty slow :( ~1,8fps

While researching for a descent interlacing-technique i found mvbob on scharfi's website. But is this the "state of the art" method? Are there other bobbers which are faster with same quality? Or is there a totaly different method for upscaling SD?

I'd like to have a list with all bobbers in their latest version and a comparison. Maybe we could collect infos in this thread and then i write a new thread with a list of all the different bobbers. Or is there such a list out there?

regards,
hanfrunz

thetoof
17th June 2008, 15:01
MCBob (http://forum.doom9.org/showthread.php?t=124676), slower & better quality
TempGaussMC (http://forum.doom9.org/showthread.php?p=1138514#post1138514), a bit faster & better quality (for some sources, more than mcbob)
Tdeint (http://forum.doom9.org/showthread.php?t=82264)(mode=1), a lot faster, but worse
Tdeint + external interpolator & motion mask i.tdeint(1,edeint=i.nnedi (http://forum.doom9.org/showthread.php?t=129953)(-2),emask=i.tmm(1)), faster, lower quality
and a few others like yadif(mod)

Blue_MiSfit
17th June 2008, 20:47
The way I see it (for most content)

MCBob > TDeint (with external interpolation + motion masking) > YADIFmod > TDeint > YADIF

TDeint by itself will break sometimes, and let stray pixels through in high motion/ flashing / flickering scenes, whereas plain YADIF tends not to.

I haven't even heard of TempGaussMC - it must be new :D

But, since you're going for upscaling and high quality, I would say MCBob is kind of your best bet. It really, really impresses me.

Last I checked, it multithreads ok, so make sure you're doing that. You do have a multi-core machine, if you're encoding HD - right? ;)

I would say also that for such large upscaling, a different resize, like Blackman, Spline[16/36], or maybe lanczos4 (or maybe eedi2 if you want to get really crazy /slow with it :D)

Honestly though, I think you're usually better off (with true interlaced sources) bobbing to 60p, and then upscaling to 720p (or just keeping 480p). The extra motion fluidity is nice.

Finally, SelectEvery(2,1) is the same as SelectOdd().

~MiSfit

WorBry
18th June 2008, 04:00
...or maybe eedi2 if you want to get really crazy /slow with it :D)


or maybe NNEDIResize_YV12 plus a light LimitedSharpen (using internal resize) if you want even crazier/slower......for 576/50p to 720/50p that is.

http://forum.doom9.org/showthread.php?p=1045226#post1045226

I agree with Blue_Misfit, upscaling from SD to 1080p seems a bit overly ambitious, quality wise.

2Bdecided
18th June 2008, 10:22
Sometimes the cleverer you try to be, the more artificial the result looks.

addgrain can help at the end sometimes.

Not sure why you are halving the temporal resolution.

Cheers,
David.

hanfrunz
18th June 2008, 11:40
Okay i tried to use MCBob, but i get different errors (removeflicker.dll can't be loaded, mt_??? not found...). Can i download a MCBob-package (needi-version) with all plugins somewhere? Or can someone give a list of all links with working versions of each plugin?

@2Bdecided
after mvbob() i got 50fps, but i want 25fps. The scenes will be mixed with real 25p material, so i need the same framerate and progressive material.

hanfrunz

2Bdecided
18th June 2008, 11:46
Oh, you want to mix SD and 1920x1080p25 (HD) material - and this is the script for up-convering the SD to match the resolution and framerate of the HD?

I collected all the links to the mcbob required filters here:
http://www.hv20.com/showthread.php?t=2876
...but that's for the EEDI2 version. You need to grab the NNEDI version from elsewhere (and NNEDI itself).

Cheers,
David.

thetoof
18th June 2008, 11:53
You can also get all the up-to-date functions in the requirements.7z of animeivtc.
Use selecteven() or selectodd() to cut your temporal resolution by half.

hanfrunz
20th June 2008, 11:59
so i got mcbob() to work. thanks to thetoof (http://forum.doom9.org/member.php?u=144660)s requirements.7z.
BUT how to i process YUY2-Video? It says: "only planar color spaces are supported" Is there a YUY2 version of MCBob or is it impossible, because some of the used plugins can't process YUY2?

regards,
hanfrunz

Didée
20th June 2008, 12:09
Not impossible, but hard. See here. (http://forum.doom9.org/showthread.php?p=1139176#post1139176)

Feel free to make a YUY2 version. Me, I won't.

hanfrunz
20th June 2008, 12:12
OMG i'll have a look at the code...

GodofaGap
20th June 2008, 12:17
Of course you can also ask yourself if you really need it to work in YUY2.

hanfrunz
20th June 2008, 14:08
Yes definitely. My source is Digital Betacam which is 4:2:2 and if i resize in yv12 i would loose half of my color resolution. Which is bad enough because of 4:2:2.

Didée
20th June 2008, 14:15
YUY2source
yd = Yadif(mode=1)
mcb = ConvertToYV12(interlaced=true).MCBob().ConvertToYUY2()

mcb.MergeChroma(yd)

:cool::eek::p

2Bdecided
20th June 2008, 14:48
Oh Didée, how could you make his life so easy? Surely this is much better...

YUY2source

ui=utoy()
vi=vtoy()

up=ui.ConvertToYV12(interlaced=true).mcbob().ConvertToYUY2()
vp=vi.ConvertToYV12(interlaced=true).mcbob().ConvertToYUY2()

yp=last.converttoyv12(interlaced=true).mcbob().ConvertToYUY2()

ytouv(up,vp,yp)

;)

(Actually, it crashes for me - not sure why).

Cheers,
David.

Didée
20th June 2008, 16:13
MCBob uses fixed idx values, so it can be called only once in a script. Your script crashes because of idx collisions.

To use MCBob (or TempGaussMC) on a YUY2 source, a possible trick would be this:

c = YUY2source
stackhorizontal(c,c.UtoY(),c.VtoY())

ConvertToYV12(interlaced=true)
MCBob
ConvertToYUY2()

YtoUV( crop(width/2,0,width/4,height), crop(width-width/4,0,width/4,height), crop(0,0,width/2,height) )

Gavino
20th June 2008, 20:53
MCBob uses fixed idx values, so it can be called only once in a script.
That seems a pity. Can you elaborate on what the problem is? Perhaps someone here can suggest a solution.

Since MCBob is implemented as a function, I'm surprised it can't be made robust against multiple instances interfering with each other. Is it a threading problem? Or a problem in one of the plugins it uses?

scharfis_brain
20th June 2008, 22:30
It is just the idx-issue.

One could open mcbob() to allow to give an offset for the idx used within mcbob()

but I am to lazy to implement it.

LaTo
23rd June 2008, 14:40
That seems a pity. Can you elaborate on what the problem is? Perhaps someone here can suggest a solution.

Since MCBob is implemented as a function, I'm surprised it can't be made robust against multiple instances interfering with each other. Is it a threading problem? Or a problem in one of the plugins it uses?

open the mcbob.avsi and replace this line "idx_1 = 10" by "idx_1 = rand()"... :eek:

Didée
23rd June 2008, 16:51
"idx_1 = rand()"
The court issues twenty strikes on the plantars for putting contingency into a supposed-to-be-deterministic context.

Gavino
23rd June 2008, 17:34
I don't know enough about how the function works to know what values of idx are valid, but couldn't you do something like this:

#in mcbob.avsi, outside function:
global nMCBob = 0
...
#inside function:
global nMCBob = nMCBob + 1
idx_1 = 10*nMCBob # or some such thing

It would be a pity to have the one-per-script restriction if just a little effort is needed to turn this really great tool into a really greater one.