Log in

View Full Version : please try my interlaced crt simulation script


blankblank1980
12th July 2012, 12:39
it's heavy on the cpu and it's making the image darker, do you think you can make it better? i will be so glad if someone make a standalone filter of it with perfect visibility and light cpu load.

even=separatefields().selecteven().converttorgb32()
odd=separatefields().selectodd().converttorgb32()
evenblank=blankclip(even)
oddblank=blankclip(odd)
field0=interleave(evenblank,even).assumefieldbased().weave()
field1=interleave(odd,oddblank).assumefieldbased().weave()
vid=interleave(field0,field1).turnleft()
blank=blankclip(vid)
interleave(vid,blank).assumefieldbased().weave().turnright()
pointresize(width*1,height*2)

marcusj0015
12th July 2012, 13:24
... What kind of script is it? what's it supposed to be used with?

blankblank1980
12th July 2012, 13:36
to view live tv and play music dvd's

marcusj0015
12th July 2012, 14:08
... -_- What app does it use?

Atak_Snajpera
12th July 2012, 14:10
... -_- What app does it use?

AviSynth ?

marcusj0015
12th July 2012, 14:22
Oh lol. sorry. I don't use Avisynth. :/

blankblank1980
12th July 2012, 14:30
i play live tv and dvd's with mpc-hc with ffdshow and avisynth installed

TheSkiller
12th July 2012, 15:43
Interesting script, kinda cool. I'm always in when it comes to giving something the "TV look". :)
It may be a good idea to adjust the base video's gamma before applying the TV effect. I think a curve would be best suited here, i.e. using SmoothCurve (but that's going to make it even slower...).

blankblank1980
12th July 2012, 16:13
thank you, by the way i modified the script so it always sync with 60 hz refresh rate:

even=assumetff().separatefields().selecteven().changefps(29.97003).converttorgb32()
odd=assumetff().separatefields().selectodd().changefps(29.97003).converttorgb32()
evenblank=blankclip(even)
oddblank=blankclip(odd)
field0=interleave(evenblank,even).assumefieldbased().weave()
field1=interleave(odd,oddblank).assumefieldbased().weave()
vid=interleave(field0,field1).turnleft()
blank=blankclip(vid)
interleave(vid,blank).assumefieldbased().weave().turnright()
pointresize(width*1,height*2)

librarian
12th July 2012, 22:51
You might want to see tvdeint (http://forum.doom9.org/showthread.php?p=454828#post454828) by scharfis_brain, this function considers also the kell factor and doesn't appear too slow.

EDIT: I found this plugin http://www.avisynth.org/warpenterprises/files/scanlines_25_dll_20031103.zip (never used though).

blankblank1980
13th July 2012, 03:26
wow, they already did it in 2004, thank you for pointing that out, but they missed the vertical scanlines, i think the scanlines has anti jagging effect when it scaled by multiple of input size, i wish there's a way to add vertical scanlines without losing performance, chroma and luma purity.

blankblank1980
13th July 2012, 06:55
i'm sorry, but i modify it again for better motion with 24p videos

even=doubleweave().changefps(59.9400599).selecteven().assumeframebased().separatefields().selecteven().converttorgb32()
odd=doubleweave().changefps(59.9400599).selectodd().assumeframebased().separatefields().selectodd().converttorgb32()
evenblank=blankclip(even)
oddblank=blankclip(odd)
field0=interleave(even,evenblank).assumefieldbased().weave()
field1=interleave(oddblank,odd).assumefieldbased().weave()
vid=interleave(field1,field0).turnleft()
blank=blankclip(vid)
interleave(vid,blank).assumefieldbased().weave().turnright()
pointresize(width*1,height*2)

2Bdecided
13th July 2012, 10:26
IMO it works better if the black lines aren't completely black.

Years ago I tried this...


directshowsource("Psi.avi",audio=true)
assumebff()

separatefields()

black=blankclip(length=90,width=last.width,height=last.height,pixel_type="YUY2")

interleave(last,black)
converttoRGB()
weave

blur(0,0.7)
levels(0,1,150,0,255,coring=false)

assumefps(6001,100)


...of course it could be tweaked and improved, but you get the idea.


Hope this helps.

Cheers,
David.

blankblank1980
13th July 2012, 11:00
that is the best i've ever seen, but on second look, the interline twittering look bolder, but can you show me how to make vertical scanlines with no performance hit

blankblank1980
13th July 2012, 11:42
i think the cause of the dark picture is the black blankclip, maybe if it interleaved with transparent blankclip the black compositing can be avoided, does anyone know how to do this?

blankblank1980
14th July 2012, 18:00
just as suggested by david, to lighten image, it has to be blurred and the video levels has to be adjusted, this weird combination actually compensate dark image caused by scanlines, but in some videos, highlights are washed out.
but if you don't mind that, here's the latest script:

even=doubleweave().changefps(59.9400599).selecteven().assumeframebased().separatefields().selecteven().converttorgb32()
odd=doubleweave().changefps(59.9400599).selectodd().assumeframebased().separatefields().selectodd().converttorgb32()
evenblank=blankclip(even)
oddblank=blankclip(odd)
field0=interleave(even,evenblank).assumefieldbased().weave()
field1=interleave(oddblank,odd).assumefieldbased().weave()
vid=interleave(field1,field0).turnleft().blur(0.7,0).levels(0,1,127,0,255)
blank=blankclip(vid)
interleave(vid,blank).assumefieldbased().weave().turnright().blur(0.7,0).levels(0,1,127,0,255)
pointresize(width*1,height*2)

blankblank1980
15th July 2012, 05:53
i was so tired last night that i made a mistake to the script causing the video to washed out, i wake up today and fixed it:

even=doubleweave().changefps(59.9400599).selecteven().assumeframebased().separatefields().selecteven().converttorgb32()
odd=doubleweave().changefps(59.9400599).selectodd().assumeframebased().separatefields().selectodd().converttorgb32()
evenblank=blankclip(even)
oddblank=blankclip(odd)
field0=interleave(even,evenblank).assumefieldbased().weave()
field1=interleave(oddblank,odd).assumefieldbased().weave()
vid=interleave(field1,field0).turnleft()
blank=blankclip(vid)
interleave(vid,blank).assumefieldbased().weave().turnright().blur(0.7,0.7).rgbadjust(4,4,4,4)
pointresize(width*1,height*2)

blankblank1980
17th July 2012, 10:43
just a slight adjustment to video levels:

even=doubleweave().changefps(59.9400599).selecteven().assumeframebased().separatefields().selecteven().converttorgb32()
odd=doubleweave().changefps(59.9400599).selectodd().assumeframebased().separatefields().selectodd().converttorgb32()
evenblank=blankclip(even)
oddblank=blankclip(odd)
field0=interleave(even,evenblank).assumefieldbased().weave()
field1=interleave(oddblank,odd).assumefieldbased().weave()
vid=interleave(field1,field0).turnleft()
blank=blankclip(vid)
interleave(vid,blank).assumefieldbased().weave().turnright().blur(0.7,0.7).rgbadjust(3.5,3.5,3.5,3.5)
pointresize(width*1,height*2)

Didée
17th July 2012, 13:28
It looks nice, but ... wouldn't it be easier to just take a grid texture, and Layer()/Overlay()/Lutxy() it over the scaled input?

-edit-

Also ... in case of 24p input, the current way of framerate conversion is not good. Instead of standard 2:3 pulldown, you're effectively creating a 2:2:2:4 pulldown. This stutters even more than standard pull.

blankblank1980
18th July 2012, 11:13
i don't know how to do that, and is it possible not to introduce blurring to the video.

blankblank1980
28th July 2012, 14:11
more slight adjustments:

even=doubleweave().changefps(59.9400599).selecteven().assumeframebased().separatefields().selecteven().converttorgb32()
odd=doubleweave().changefps(59.9400599).selectodd().assumeframebased().separatefields().selectodd().converttorgb32()
evenblank=blankclip(even)
oddblank=blankclip(odd)
field0=interleave(even,evenblank).assumefieldbased().weave()
field1=interleave(oddblank,odd).assumefieldbased().weave()
vid=interleave(field1,field0).turnleft()
blank=blankclip(vid)
interleave(vid,blank).assumefieldbased().weave().turnright().blur(0.75,0.75).rgbadjust(3.5,3.5,3.5,3.5)