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. |
28th October 2008, 17:57 | #1 | Link |
Registered User
Join Date: Aug 2008
Posts: 233
|
Reversible YV12->YUY2->YV12
Hi all --
I know it's probably old-hat to most, but I am a big fan of the GrapeSmoother plugin: It's very fast, minimally destructive and seems to be ideal for already "mostly clean" material, like HDV or AVCHD footage. Unfortunately, it only works in YUY2. I think I've found a way to convert YV12->YUY2->YV12 without the goofy sort of resampling that takes place with the conventional method, which seems to be especially troublesome for interlaced sources: Code:
function GrapeSmootherYV12(clip c, int "strength") { strength=Default(Strength, 0) c wasYV12 = isYV12(c) SeparateFields() y = ConvertToYUY2() uv = PointResize(width, height*2) u = uv.UtoY().ConvertToYUY2() v = uv.VtoY().ConvertToYUY2() (wasYV12) ? YToUV(u,v,y).Weave().ConvertToYUY2(interlaced=true) : c (strength > 0) ? GrapeSmoother(strength) : last (wasYV12) ? ConvertToYV12(interlaced=true) : last } Or perhaps I'm totally wrong about my enitre approach? Advice would be appreciated Last edited by vampiredom; 28th October 2008 at 18:01. |
28th October 2008, 20:04 | #2 | Link |
AviSynth Enthusiast
Join Date: Jul 2002
Location: California, U.S.
Posts: 1,267
|
You might want to look at this thread http://forum.doom9.org/showthread.php?t=105313
Although I don't know if it's actually any better. |
28th October 2008, 20:38 | #3 | Link |
Registered User
Join Date: Aug 2008
Posts: 233
|
Thanks for the reply... we are essentially talking about the same kind of thing. I tried the code in your post here:
http://forum.doom9.org/showthread.ph...655#post764655 It's a bit slower than mine (averaging around around 12fps vs. 15fps on an HDV source via DGIndex): There are more colorplane-switcheroos and colorspace conversions. I also imagine theat Interleave(a,a).Weave() [x2] is probably slower than PointResize [x1], but I'm not certain. I also like that my method only requires ConvertToYV12(interlaced=true) to "restore" it to YV12. |
29th October 2008, 04:49 | #4 | Link |
Registered User
Join Date: Aug 2008
Posts: 233
|
I think I found a better approach to this, using something more like stickboy's suggestion. When input is YV12, the function converts to YUY2. When input is YUY2 it converts back to YV12.
Code:
function TogglePlanar(clip c) { c wasYV12 = isYV12() y = ConvertToYUY2() u = UtoY() u = Interleave(u,u).AssumeFieldBased().Weave().ConvertToYUY2() v = VtoY() v = Interleave(v,v).AssumeFieldBased().Weave().ConvertToYUY2() (wasYV12) ? YToUV(u,v,y) : c.ConvertToYV12() (GetParity(c)) ? AssumeTFF() : AssumeBFF() } Code:
# usage example: (isYV12) ? TogglePlanar().GrapeSmoother(30).TogglePlanar() \ : GrapeSmoother(30) Last edited by vampiredom; 29th October 2008 at 05:57. |
Tags |
conversion, grapesmoother, interlaced, yuy2, yv12 |
|
|