代码: 全选
--- AdaptDBMC_beta.avsi 2011-12-15 05:49:51 +0800
+++ AdaptDBMC_beta_mod.avsi 2011-12-17 07:08:31 +0800
@@ -1,4 +1,4 @@
-FUNCTION AdaptDBMC(clip i,
+FUNCTION AdaptDBMC_Mod(clip i,
\ float "Y", float "Cb", float "Cr",
\ float "ditherY", float "ditherC", string "f3k_param",
\ float "Luma_Cpst", float "Fade_Cpst", float "Blue_Cpst",
@@ -49,49 +49,45 @@
Assert( Blue_Cpst>=0, "AdaptDBMC: Blue_Cpst can't be negative!" )
Assert( radius>0 && radius <=6, "AdaptDBMC: radius ranges from 1 to 6!" )
-nullclip = BlankClip()
-
MVS = MSuper(hpad=0, vpad=0, pel=pel, sharp=0, chroma=false)
-f1v = (radius<1) ? nullclip
+f1v = (radius<1) ? nop
\ : MVS.MAnalyse(isb=false, delta=1, truemotion=truemotion, blksize=blksize, overlap=overlap, pelsearch=pelsearch, search=search, searchparam=searchparam, DCT=0, global=MVglobal, chroma=false)
-f2v = (radius<2) ? nullclip
+f2v = (radius<2) ? nop
\ : MVS.MAnalyse(isb=false, delta=2, truemotion=truemotion, blksize=blksize, overlap=overlap, pelsearch=pelsearch, search=search, searchparam=searchparam, DCT=0, global=MVglobal, chroma=false)
-f3v = (radius<3) ? nullclip
+f3v = (radius<3) ? nop
\ : MVS.MAnalyse(isb=false, delta=3, truemotion=truemotion, blksize=blksize, overlap=overlap, pelsearch=pelsearch, search=search, searchparam=searchparam, DCT=0, global=MVglobal, chroma=false)
-f4v = (radius<4) ? nullclip
+f4v = (radius<4) ? nop
\ : MVS.MAnalyse(isb=false, delta=4, truemotion=truemotion, blksize=blksize, overlap=overlap, pelsearch=pelsearch, search=search, searchparam=searchparam, DCT=0, global=MVglobal, chroma=false)
-f5v = (radius<5) ? nullclip
+f5v = (radius<5) ? nop
\ : MVS.MAnalyse(isb=false, delta=5, truemotion=truemotion, blksize=blksize, overlap=overlap, pelsearch=pelsearch, search=search, searchparam=searchparam, DCT=0, global=MVglobal, chroma=false)
-f6v = (radius<6) ? nullclip
+f6v = (radius<6) ? nop
\ : MVS.MAnalyse(isb=false, delta=6, truemotion=truemotion, blksize=blksize, overlap=overlap, pelsearch=pelsearch, search=search, searchparam=searchparam, DCT=0, global=MVglobal, chroma=false)
-b1v = (radius<1) ? nullclip
+b1v = (radius<1) ? nop
\ : MVS.MAnalyse(isb=true, delta=1, truemotion=truemotion, blksize=blksize, overlap=overlap, pelsearch=pelsearch, search=search, searchparam=searchparam, DCT=0, global=MVglobal, chroma=false)
-b2v = (radius<2) ? nullclip
+b2v = (radius<2) ? nop
\ : MVS.MAnalyse(isb=true, delta=2, truemotion=truemotion, blksize=blksize, overlap=overlap, pelsearch=pelsearch, search=search, searchparam=searchparam, DCT=0, global=MVglobal, chroma=false)
-b3v = (radius<3) ? nullclip
+b3v = (radius<3) ? nop
\ : MVS.MAnalyse(isb=true, delta=3, truemotion=truemotion, blksize=blksize, overlap=overlap, pelsearch=pelsearch, search=search, searchparam=searchparam, DCT=0, global=MVglobal, chroma=false)
-b4v = (radius<4) ? nullclip
+b4v = (radius<4) ? nop
\ : MVS.MAnalyse(isb=true, delta=4, truemotion=truemotion, blksize=blksize, overlap=overlap, pelsearch=pelsearch, search=search, searchparam=searchparam, DCT=0, global=MVglobal, chroma=false)
-b5v = (radius<5) ? nullclip
+b5v = (radius<5) ? nop
\ : MVS.MAnalyse(isb=true, delta=5, truemotion=truemotion, blksize=blksize, overlap=overlap, pelsearch=pelsearch, search=search, searchparam=searchparam, DCT=0, global=MVglobal, chroma=false)
-b6v = (radius<6) ? nullclip
+b6v = (radius<6) ? nop
\ : MVS.MAnalyse(isb=true, delta=6, truemotion=truemotion, blksize=blksize, overlap=overlap, pelsearch=pelsearch, search=search, searchparam=searchparam, DCT=0, global=MVglobal, chroma=false)
-SAD_f1m = MMask(f1v, kind=1, ml=thSAD, gamma=0.999, Ysc=255)
-SAD_b1m = MMask(b1v, kind=1, ml=thSAD, gamma=0.999, Ysc=255)
f1c = MCompensate(MVS, f1v, thSAD=thSAD, thSCD1=thSCD1, thSCD2=thSCD2)
b1c = MCompensate(MVS, b1v, thSAD=thSAD, thSCD1=thSCD1, thSCD2=thSCD2)
-b2c = (radius>=2) ? i.MCompensate(MVS, b2v, thSAD=thSAD, thSCD1=thSCD1, thSCD2=thSCD2) : nullclip
-b3c = (radius>=3) ? i.MCompensate(MVS, b3v, thSAD=thSAD, thSCD1=thSCD1, thSCD2=thSCD2) : nullclip
-b4c = (radius>=4) ? i.MCompensate(MVS, b4v, thSAD=thSAD, thSCD1=thSCD1, thSCD2=thSCD2) : nullclip
-b5c = (radius>=5) ? i.MCompensate(MVS, b5v, thSAD=thSAD, thSCD1=thSCD1, thSCD2=thSCD2) : nullclip
-b6c = (radius>=6) ? i.MCompensate(MVS, b6v, thSAD=thSAD, thSCD1=thSCD1, thSCD2=thSCD2) : nullclip
-f2c = (radius>=2) ? i.MCompensate(MVS, f2v, thSAD=thSAD, thSCD1=thSCD1, thSCD2=thSCD2) : nullclip
-f3c = (radius>=3) ? i.MCompensate(MVS, f3v, thSAD=thSAD, thSCD1=thSCD1, thSCD2=thSCD2) : nullclip
-f4c = (radius>=4) ? i.MCompensate(MVS, f4v, thSAD=thSAD, thSCD1=thSCD1, thSCD2=thSCD2) : nullclip
-f5c = (radius>=5) ? i.MCompensate(MVS, f5v, thSAD=thSAD, thSCD1=thSCD1, thSCD2=thSCD2) : nullclip
-f6c = (radius>=6) ? i.MCompensate(MVS, f6v, thSAD=thSAD, thSCD1=thSCD1, thSCD2=thSCD2) : nullclip
+b2c = (radius>=2) ? i.MCompensate(MVS, b2v, thSAD=thSAD, thSCD1=thSCD1, thSCD2=thSCD2) : nop
+b3c = (radius>=3) ? i.MCompensate(MVS, b3v, thSAD=thSAD, thSCD1=thSCD1, thSCD2=thSCD2) : nop
+b4c = (radius>=4) ? i.MCompensate(MVS, b4v, thSAD=thSAD, thSCD1=thSCD1, thSCD2=thSCD2) : nop
+b5c = (radius>=5) ? i.MCompensate(MVS, b5v, thSAD=thSAD, thSCD1=thSCD1, thSCD2=thSCD2) : nop
+b6c = (radius>=6) ? i.MCompensate(MVS, b6v, thSAD=thSAD, thSCD1=thSCD1, thSCD2=thSCD2) : nop
+f2c = (radius>=2) ? i.MCompensate(MVS, f2v, thSAD=thSAD, thSCD1=thSCD1, thSCD2=thSCD2) : nop
+f3c = (radius>=3) ? i.MCompensate(MVS, f3v, thSAD=thSAD, thSCD1=thSCD1, thSCD2=thSCD2) : nop
+f4c = (radius>=4) ? i.MCompensate(MVS, f4v, thSAD=thSAD, thSCD1=thSCD1, thSCD2=thSCD2) : nop
+f5c = (radius>=5) ? i.MCompensate(MVS, f5v, thSAD=thSAD, thSCD1=thSCD1, thSCD2=thSCD2) : nop
+f6c = (radius>=6) ? i.MCompensate(MVS, f6v, thSAD=thSAD, thSCD1=thSCD1, thSCD2=thSCD2) : nop
c = (radius==6) ? interleave(f6c, f5c, f4c, f3c, f2c, f1c, i, b1c, b2c, b3c, b4c, b5c, b6c)
\ : (radius==5) ? interleave( f5c, f4c, f3c, f2c, f1c, i, b1c, b2c, b3c, b4c, b5c )
@@ -105,40 +101,92 @@
### Luma adaptive factor
global AdaptLuma = (Luma_Cpst==0) ? "1"
-\ : "( ( ( AverageLuma > 160 ) ? Pow( ( 256.0 - AverageLuma ) / 96, "+String(Luma_Cpst)+" ) : Log( ( 256.0 - AverageLuma ) / 96 ) * "+String(Luma_Cpst)+" + 1 ) / "+String(Luma_Cpst)+" / 2 + 1 )"
-
+\ : "( ( ( vAverageLuma > 160 ) ? Pow( ( 256.0 - vAverageLuma ) / 96, "+String(Luma_Cpst)+" ) : Log( ( 256.0 - vAverageLuma ) / 96 ) * "+String(Luma_Cpst)+" + 1 ) / "+String(Luma_Cpst)+" / 2 + 1 )"
+global CRGB32Clip = CRGB32
+global CRGB32Clip = CRGB32Clip.ShowBlue("YV12").Overlay(CRGB32Clip.ShowRed("YV12"), mode="subtract")
### Blue compensate value
-global AdaptBlue = """( AverageLuma( CRGB32.ShowBlue("YV12").Overlay(CRGB32.ShowRed("YV12"), mode="subtract") ) / 96.0 * """+String(Blue_Cpst)+" )"
+global AdaptBlue = """( AverageLuma( CRGB32Clip ) / 96.0 * """+String(Blue_Cpst)+" )"
### Fade compensate value
global FadeDenom = ( radius==0 ) ? 1 : 384.0 * radius
+global cLoop1 = (radius>=2)? loop(2,0,-1) : nop
+global cLoop2 = (radius>=2)? loop(0,0,-1) : nop
+global cLoop3 = (radius>=3)? loop(3,0,-1) : nop
+global cLoop4 = (radius>=3)? loop(0,0,1) : nop
+global cLoop5 = (radius>=4)? loop(4,0,-1) : nop
+global cLoop6 = (radius>=4)? loop(0,0,2) : nop
+global cLoop7 = (radius>=5)? loop(5,0,-1) : nop
+global cLoop8 = (radius>=5)? loop(0,0,3) : nop
+global cLoop9 = (radius>=6)? loop(6,0,-1) : nop
+global cLoop10 = (radius>=6)? loop(0,0,4) : nop
+
global AdaptFade = (Fade_Cpst==0) ? "0"
\ : (radius==1) ? "( log( (YDifferenceFromPrevious+YDifferenceToNext)/"+String(FadeDenom)+"+1 ) * "+String(Fade_Cpst)+" )"
-\ : (radius==2) ? "( log( (loop(2,0,-1).YDifferenceFromPrevious+YDifferenceFromPrevious+YDifferenceToNext+loop(0,0,-1).YDifferenceToNext)/"+String(FadeDenom)+"+1 ) * "+String(Fade_Cpst)+" )"
-\ : (radius==3) ? "( log( (loop(3,0,-1).YDifferenceFromPrevious+loop(2,0,-1).YDifferenceFromPrevious+YDifferenceFromPrevious+YDifferenceToNext+loop(0,0,-1).YDifferenceToNext+loop(0,0,1).YDifferenceToNext)/"+String(FadeDenom)+"+1 ) * "+String(Fade_Cpst)+" )"
-\ : (radius==4) ? "( log( (loop(4,0,-1).YDifferenceFromPrevious+loop(3,0,-1).YDifferenceFromPrevious+loop(2,0,-1).YDifferenceFromPrevious+YDifferenceFromPrevious+YDifferenceToNext+loop(0,0,-1).YDifferenceToNext+loop(0,0,1).YDifferenceToNext+loop(0,0,2).YDifferenceToNext)/"+String(FadeDenom)+"+1 ) * "+String(Fade_Cpst)+" )"
-\ : (radius==5) ? "( log( (loop(5,0,-1).YDifferenceFromPrevious+loop(4,0,-1).YDifferenceFromPrevious+loop(3,0,-1).YDifferenceFromPrevious+loop(2,0,-1).YDifferenceFromPrevious+YDifferenceFromPrevious+YDifferenceToNext+loop(0,0,-1).YDifferenceToNext+loop(0,0,1).YDifferenceToNext+loop(0,0,2).YDifferenceToNext+loop(0,0,3).YDifferenceToNext)/"+String(FadeDenom)+"+1 ) * "+String(Fade_Cpst)+" )"
-\ : (radius==6) ? "( log( (loop(6,0,-1).YDifferenceFromPrevious+loop(5,0,-1).YDifferenceFromPrevious+loop(4,0,-1).YDifferenceFromPrevious+loop(3,0,-1).YDifferenceFromPrevious+loop(2,0,-1).YDifferenceFromPrevious+YDifferenceFromPrevious+YDifferenceToNext+loop(0,0,-1).YDifferenceToNext+loop(0,0,1).YDifferenceToNext+loop(0,0,2).YDifferenceToNext+loop(0,0,3).YDifferenceToNext+loop(0,0,4).YDifferenceToNext)/"+String(FadeDenom)+"+1 ) * "+String(Fade_Cpst)+" )"
+\ : (radius==2) ? "( log( (cLoop1.YDifferenceFromPrevious+YDifferenceFromPrevious+YDifferenceToNext+cLoop2.YDifferenceToNext)/"+String(FadeDenom)+"+1 ) * "+String(Fade_Cpst)+" )"
+\ : (radius==3) ? "( log( (cLoop3.YDifferenceFromPrevious+cLoop1.YDifferenceFromPrevious+YDifferenceFromPrevious+YDifferenceToNext+cLoop2.YDifferenceToNext+cLoop4.YDifferenceToNext)/"+String(FadeDenom)+"+1 ) * "+String(Fade_Cpst)+" )"
+\ : (radius==4) ? "( log( (cLoop5.YDifferenceFromPrevious+cLoop3.YDifferenceFromPrevious+cLoop1.YDifferenceFromPrevious+YDifferenceFromPrevious+YDifferenceToNext+cLoop2.YDifferenceToNext+cLoop4.YDifferenceToNext+cLoop6.YDifferenceToNext)/"+String(FadeDenom)+"+1 ) * "+String(Fade_Cpst)+" )"
+\ : (radius==5) ? "( log( (cLoop7.YDifferenceFromPrevious+cLoop5.YDifferenceFromPrevious+cLoop3.YDifferenceFromPrevious+cLoop1.YDifferenceFromPrevious+YDifferenceFromPrevious+YDifferenceToNext+cLoop2.YDifferenceToNext+cLoop4.YDifferenceToNext+cLoop6.YDifferenceToNext+cLoop8.YDifferenceToNext)/"+String(FadeDenom)+"+1 ) * "+String(Fade_Cpst)+" )"
+\ : (radius==6) ? "( log( (cLoop9.YDifferenceFromPrevious+cLoop7.YDifferenceFromPrevious+cLoop5.YDifferenceFromPrevious+cLoop3.YDifferenceFromPrevious+cLoop1.YDifferenceFromPrevious+YDifferenceFromPrevious+YDifferenceToNext+cLoop2.YDifferenceToNext+cLoop4.YDifferenceToNext+cLoop6.YDifferenceToNext+cLoop8.YDifferenceToNext+cLoop10.YDifferenceToNext)/"+String(FadeDenom)+"+1 ) * "+String(Fade_Cpst)+" )"
\ : "0"
+global rgclip = RemoveGrain(24, 0, 0)
### Calculate complexity of a frame
-global c_Complex = "Exp( LumaDifference( RemoveGrain(24, 0, 0) ) + 1 )"
+global c_Complex = "Exp( LumaDifference( rgclip ) + 1 )"
### Fading frames should have comparatively low luma value and low complexity
-global AdaptFade = "Exp( " + AdaptLuma + " * 7 ) / 200 * " + AdaptFade + " / " + c_Complex
+global AdaptFade = "Exp( vAdaptLuma * 7 ) / 200 * " + AdaptFade + " / vc_Complex"
### Mix all factors and calculate final factor of strength
-global strFact = "( " + AdaptLuma + " * ( 1 + " + AdaptFade + " ) * ( 1 + " + AdaptBlue + " ) )"
+global strFact = "( vAdaptLuma * ( 1 + vAdaptFade ) * ( 1 + vAdaptBlue ) )"
-global f3kdb_eval = "f3kdb( Y=int("+String(Y)+"*"+strFact+
-\ "), Cb=int("+String(Cb)+"*"+strFact+
-\ "), Cr=int("+String(Cr)+"*"+strFact+
-\ "), ditherY=int("+String(ditherY)+"*"+strFact+
-\ "), ditherC=int("+String(ditherC)+"*"+strFact+
+global f3kdb_eval = "f3kdb( Y=int("+String(Y)+"*f3kdb_rfact"+
+\ "), Cb=int("+String(Cb)+"*f3kdb_rfact"+
+\ "), Cr=int("+String(Cr)+"*f3kdb_rfact"+
+\ "), ditherY=int("+String(ditherY)+"*f3kdb_rfact"+
+\ "), ditherC=int("+String(ditherC)+"*f3kdb_rfact"+
\ ( Defined(f3k_param) ? "), "+f3k_param+" )"
-\ : ") )" )
+\ : ") )" ) +
+\ ( Info ? """.Subtitle("Real Final factor: "+String(f3kdb_rfact), x = 8, y = 28)""" : "")
+
+global f3kdb_rfact = 1.00
+global f3kdb1 = Eval(f3kdb_eval)
+
+global f3kdb_rfact = 1.33
+global f3kdb2 = Eval(f3kdb_eval)
-Info ? ScriptClip( f3kdb_eval+""".Subtitle( "Final factor: "+String( Eval(strFact) ), x=8, y=8 ).Subtitle( "Luma adaptive factor: "+String( Eval(AdaptLuma) ), x=8, y=38 ).Subtitle( "Fade adaptive factor: "+String( 1+Eval(AdaptFade) ), x=8, y=58 ).Subtitle( "Blue adaptive factor: "+String( 1+Eval(AdaptBlue) ), x=8, y=78 ).Subtitle( "Frame complexity: "+String( Eval(c_Complex) ), x=8, y=108 )""" )
-\ : ScriptClip( f3kdb_eval )
+global f3kdb_rfact = 1.66
+global f3kdb3 = Eval(f3kdb_eval)
+
+global f3kdb_rfact = 2.00
+global f3kdb4 = Eval(f3kdb_eval)
+
+global f3kdb_rfact = 2.33
+global f3kdb5 = Eval(f3kdb_eval)
+
+global f3kdb_rfact = 2.66
+global f3kdb6 = Eval(f3kdb_eval)
+
+global f3kdb_rfact = 3.00
+global f3kdb7 = Eval(f3kdb_eval)
+
+global eClip = last
+sClip = BlankClip(f3kdb1)
+
+global f3kdb_eval2 = "eClip" + chr(13)
+\ + "vAverageLuma = AverageLuma" + chr(13)
+\ + "vAdaptLuma = Eval(AdaptLuma)" + chr(13)
+\ + "vAdaptBlue = Eval(AdaptBlue)" + chr(13)
+\ + "vc_Complex = Eval(c_Complex)" + chr(13)
+\ + "vAdaptFade = Eval(AdaptFade)" + chr(13)
+\ + "vStrFact = Eval(strFact)" + chr(13)
+\ + "f3kdbRet = (vStrFact < 1.166) ? f3kdb1:"
+\ + "(vStrFact < 1.500) ? f3kdb2:"
+\ + "(vStrFact < 1.833) ? f3kdb3:"
+\ + "(vStrFact < 2.166) ? f3kdb4:"
+\ + "(vStrFact < 2.500) ? f3kdb5:"
+\ + "(vStrFact < 2.833) ? f3kdb6:"
+\ + "f3kdb7"
+Info ? ScriptClip(sClip, f3kdb_eval2+chr(13)+"""f3kdbRet.Subtitle( "Final factor: "+String( vstrFact ), x=8, y=8 ).Subtitle( "Luma adaptive factor: "+String( vAdaptLuma ), x=8, y=58 ).Subtitle( "Fade adaptive factor: "+String( 1+vAdaptFade ), x=8, y=78 ).Subtitle( "Blue adaptive factor: "+String( 1+vAdaptBlue ), x=8, y=98 ).Subtitle( "Frame complexity: "+String( vc_Complex ), x=8, y=128 )""" )
+\ :ScriptClip(sClip, f3kdb_eval2+chr(13)+"""f3kdbRet""")
return SelectEvery( 1 + radius * 2, radius)
}