Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # video file https://mega.nz/#!R9x2SKQI!t8S1SX5DghZ-r-L83cJXnJvncd6gnnPQEFVivr06skg
- TEST_FRAMES = 10
- MIDDLE_FRAME = 4
- # original framerate
- FPS_NUM = 30
- FPS_DEN = 1
- # source clip
- FFmpegSource2("f:\avsoptim\24-1200.mkv" ) .selecteven
- AssumeFPS(FPS_NUM, FPS_DEN)
- #return last
- orig = last
- mt=true
- super_pel = 4 # optimize super_pel = _n_ | 1,2,4 ; min:super_sharp 0 > 2 1 ? | super_pel
- super_sharp = 1 # optimize super_sharp = _n_ | 0..2 ; max:super_pel 1 > 2 0 ? | super_sharp
- super_rfilter = 3 # optimize super_rfilter = _n_ | 0..4 | super_rfilter
- blockSize = 24 # optimize blockSize = _n_ | 4,6,8,12,16,24,32,48,64 ; min:divide 0 > 8 2 ? ; max: dct 1 == 24 64 ? ; filter:overlap 2 * x <= | blockSize
- searchAlgo = 4 # optimize searchAlgo = _n_ | 0..5 D | searchAlgo
- searchRange = 12 # optimize searchRange = _n_ | 1..30 | searchRange
- searchRangeFinest = 40 # optimize searchRangeFinest = _n_ | 1..40 | searchRangeFinest
- divide=2 # optimize divide=_n_ | 0..2 D ; max:blockSize 8 >= 2 0 ? overlap 4 % 0 == 2 0 ? min | divide
- overlap=12 # optimize overlap=_n_ | 0,2,4,6,8,12,16,20,24,28,32 ; max:blockSize 2 / ; filter:x divide 0 > 4 2 ? % 0 == | overlap
- truemotion = false # optimize truemotion = _n_ | false,true | truemotion
- badSAD = 5689 # optimize badSAD = _n_ | 4..16320 | badSAD
- badRange = 4 # optimize badRange = _n_ | 2..50 | badRange
- negBadRange = false # optimize negBadRange = _n_ | false,true | negBadRange
- meander = true # optimize meander = _n_ | false,true | meander
- trymany = false # optimize trymany = _n_ | false,true | trymany
- dct = 10 # optimize dct = _n_ | 0,1,2,3,4,5,6,7,8,9,10 D ; filter:blockSize 24 > 1 -1 ? x != | dct
- scaleCSAD = 1 # optimize scaleCSAD = _n_ | -2..2 | scaleCSAD
- delta = 1
- useChroma = true
- super_render = MSuper(pel=super_pel, sharp=super_sharp, rfilter=super_rfilter, orig, mt=mt, hpad=blockSize, vpad=blockSize )
- resultBadRange = (negBadRange ? -1 : 1)*badRange
- bv = MAnalyse(super_render, isb = true, blksize=blockSize, search=searchAlgo, searchparam=searchRange, pelsearch=searchRangeFinest,
- \ chroma=useChroma, delta=delta, truemotion=truemotion, overlap=overlap , scaleCSAD=scaleCSAD,
- \ divide=divide, badSAD=badSAD, badrange=resultBadRange , meander=meander, trymany=trymany, dct=dct, mt=mt)
- fv = MAnalyse(super_render, isb = false, blksize=blockSize, search=searchAlgo, searchparam=searchRange, pelsearch=searchRangeFinest,
- \ chroma=useChroma, delta=delta, truemotion=truemotion, overlap=overlap , scaleCSAD=scaleCSAD,
- \ divide=divide, badSAD=badSAD, badrange=resultBadRange , meander=meander, trymany=trymany, dct=dct, mt=mt)
- threshold = 16320
- maskScale = 249 # optimize maskScale = _n_ | 1..300 | maskScale
- mask = 2 # optimize mask = _n_ | 0,1,2 D | mask
- inter = orig.MFlowFPS(super_render, bv, fv, num=FPS_NUM*2, den=FPS_DEN, mask=mask, ml=maskScale, thSCD1=threshold )
- Clevel = 8/10.0 # optimize Clevel = _n_/10.0 | 0..10 ; min:super_pel2 1 > 2 0 ? super_sharp2 0 > 2 0 ? super_rfilter2 0 > 2 0 ? blockSize2 4 > 2 0 ? searchAlgo2 0 > 2 0 ? searchRange2 1 > 2 0 ? searchRangeFinest2 1 > 2 0 ? divide2 0 > 2 0 ? overlap2 0 > 2 0 ? CdoRecalc true == 2 0 ? truemotion2 true == 2 0 ? max max max max max max max max max max | Clevel
- dct2 0 > 2 0 ? scaleCSAD2 -2 > 2 0 ?
- super_pel2 = 4 # optimize super_pel2 = _n_ | 1,2,4 ; min:super_sharp2 0 > 2 1 ? ; max:Clevel 1 > 4 1 ? | super_pel2
- super_sharp2 = 0 # optimize super_sharp2 = _n_ | 0..2 ; max:super_pel2 1 > 2 0 ? Clevel 1 > 2 0 ? min | super_sharp2
- super_rfilter2 = 4 # optimize super_rfilter2 = _n_ | 0..4 ; max:Clevel 1 > 4 1 ? | super_rfilter2
- blockSize2 = 16 # optimize blockSize2 = _n_ | 4,6,8,12,16,24,32,48,64 ; min:divide2 0 > 8 2 ? ; max: dct2 1 == 24 64 ? Clevel 1 > 64 4 ? min; filter:overlap2 2 * x <= | blockSize2
- searchAlgo2 = 0 # optimize searchAlgo2 = _n_ | 0..5 D ; max:Clevel 1 > 5 0 ? | searchAlgo2
- searchRange2 = 2 # optimize searchRange2 = _n_ | 1..30 ; max:Clevel 1 > 30 1 ? | searchRange2
- searchRangeFinest2 = 31 # optimize searchRangeFinest2 = _n_ | 1..40 ; max:Clevel 1 > 40 1 ? | searchRangeFinest2
- divide2=0 # optimize divide2=_n_ | 0..2 D ; max:blockSize2 8 >= 2 0 ? overlap2 4 % 0 == 2 0 ? Clevel 1 > 2 0 ? min | divide2
- overlap2=8 # optimize overlap2=_n_ | 0,2,4,6,8,12,16,20,24,28,32 ; max:blockSize2 2 / Clevel 1 > 32 0 ? min ; filter:x divide2 0 > 4 2 ? % 0 == | overlap2
- truemotion2 = true # optimize truemotion2 = _n_ | false,true ; filter:Clevel 1 > x false == or | truemotion2
- badSAD2 = 16169 # optimize badSAD2 = _n_ | 4..16320 ; max:Clevel 1 > 16320 4 ? | badSAD2
- badRange2 = 17 # optimize badRange2 = _n_ | 2..50 ; max:Clevel 1 > 50 2 ? | badRange2
- negBadRange2 = true # optimize negBadRange2 = _n_ | false,true ; filter:Clevel 1 > x false == or | negBadRange2
- meander2 = false # optimize meander2 = _n_ | false,true ; filter:Clevel 1 > x false == or | meander2
- trymany2 = false # optimize trymany2 = _n_ | false,true ; filter:Clevel 1 > x false == or | trymany2
- dct2 = 9 # optimize dct2 = _n_ | 0,1,2,3,4,5,6,7,8,9,10 D ; filter:blockSize2 24 > 1 -1 ? x != ; max:Clevel 1 > 10 0 ? | dct2
- scaleCSAD2 = 1 # optimize scaleCSAD2 = _n_ | -2..2 ; max:Clevel 1 > 2 -2 ? | scaleCSAD2
- super_render2 = MSuper(pel=super_pel2, sharp=super_sharp2, rfilter=super_rfilter2, inter, mt=mt, hpad=blockSize2, vpad=blockSize2 )
- resultBadRange2 = (negBadRange2 ? -1 : 1)*badRange2
- bv2 = MAnalyse(super_render2, isb = true, blksize=blockSize2, search=searchAlgo2, searchparam=searchRange2, pelsearch=searchRangeFinest2,
- \ chroma=true, truemotion=truemotion2, overlap=overlap2 , scaleCSAD=scaleCSAD2,
- \ divide=divide2, badSAD=badSAD2, badrange=resultBadRange2 , meander=meander2, trymany=trymany2, dct=dct2, mt=mt)
- fv2 = MAnalyse(super_render2, isb = false, blksize=blockSize2, search=searchAlgo2, searchparam=searchRange2, pelsearch=searchRangeFinest2,
- \ chroma=true, truemotion=truemotion2, overlap=overlap2 , scaleCSAD=scaleCSAD2,
- \ divide=divide2, badSAD=badSAD2, badrange=resultBadRange2 , meander=meander2, trymany=trymany2, dct=dct2, mt=mt)
- CdoRecalc=true # optimize CdoRecalc=_n_ | false,true ; filter:Clevel 1 > Csmooth 0 > CRsearchAlgo 0 > CRsearchRange 1 > CRdivide 0 > CRoverlap 0 > Cthsad 0 > CRtruemotion true == CRmeander true == x false == or or or or or or or or | CdoRecalc
- Csmooth=1 # optimize Csmooth=_n_ | 0,1 ; max:CdoRecalc 1 0 ? | Csmooth
- CRblockSize = 16 # optimize CRblockSize = _n_ | 4,6,8,12,16,24,32,48,64 ; min:CRdivide 0 > 8 2 ? ; max:CRdct 1 == 24 64 ? CdoRecalc 64 4 ? min ; filter:CRoverlap 2 * x <= | CRblockSize
- CRsearchAlgo = 5 # optimize CRsearchAlgo = _n_ | 0..5 D ; max:CdoRecalc 5 0 ? | CRsearchAlgo
- CRsearchRange = 4 # optimize CRsearchRange = _n_ | 1..30 ; max:CdoRecalc 30 1 ? | CRsearchRange
- CRdivide=2 # optimize CRdivide=_n_ | 0..2 D ; max:CRblockSize 8 >= 2 0 ? CRoverlap 4 % 0 == 2 0 ? CdoRecalc 2 0 ? min | CRdivide
- CRoverlap=8 # optimize CRoverlap=_n_ | 0,2,4,8,12,16,20,24,28,32 ; max:CRblockSize 2 / CdoRecalc 32 0 ? min ; filter:x CRdivide 0 > 4 2 ? % 0 == | CRoverlap
- CRdct = 10 # optimize CRdct = _n_ | 0,1,2,3,4,5,6,7,8,9,10 D ; max:CdoRecalc 10 0 ? ; filter:CRblockSize 24 > 1 -1 ? x != | CRdct
- CRtruemotion = false # optimize CRtruemotion = _n_ | false,true ; filter:CdoRecalc x false == or | CRtruemotion
- CRmeander = true # optimize CRmeander = _n_ | false,true ; filter:CdoRecalc x false == or | CRmeander
- CRscaleCSAD = 1 # optimize CRscaleCSAD = _n_ | -2..2 ; max:CdoRecalc 2 -2 ? | CRscaleCSAD
- Cthsad = 1500 # optimize Cthsad = _n_ | 0..16320 ; max:CdoRecalc 16320 0 ? | Cthsad
- bv2 = CdoRecalc && (Clevel > 0.1) ? MRecalculate(super_render2, bv2, thsad=Cthsad, smooth=Csmooth, blksize=CRblockSize, search=CRsearchAlgo, searchparam=CRsearchRange, truemotion=CRtruemotion, overlap=CRoverlap, dct=CRdct, divide=CRdivide, meander=CRmeander, scaleCSAD=CRscaleCSAD, mt=mt) : bv2
- fv2 = CdoRecalc && (Clevel > 0.1) ? MRecalculate(super_render2, fv2, thsad=Cthsad, smooth=Csmooth, blksize=CRblockSize, search=CRsearchAlgo, searchparam=CRsearchRange, truemotion=CRtruemotion, overlap=CRoverlap, dct=CRdct, divide=CRdivide, meander=CRmeander, scaleCSAD=CRscaleCSAD, mt=mt) : fv2
- merged = overlay(inter.MCompensate(super_render2, bv2, thSCD1=threshold,mt=mt ), inter.MCompensate(super_render2, fv2, thSCD1=threshold,mt=mt ),opacity=0.5)
- inter2 = inter.overlay(merged, opacity=Clevel)
- inter = Clevel > 0 ? inter2 : inter
- fps_only = inter.SelectOdd()
- delimiter = "; "
- inter_yv12 = fps_only .trim(1,0)
- orig_yv12 = FFmpegSource2("f:\avsoptim\24-1200.mkv" ) .selectodd
- # for comparison original must be forwarded one frame
- orig_yv12 = trim(orig_yv12,1,0)
- #inter_yv12 = inter_yv12.Trim(MIDDLE_FRAME - TEST_FRAMES/2 + (TEST_FRAMES%2==0?1:0), MIDDLE_FRAME + TEST_FRAMES/2)
- orig_yv12 = orig_yv12.Trim(MIDDLE_FRAME - TEST_FRAMES/2 + (TEST_FRAMES%2==0?1:0), MIDDLE_FRAME + TEST_FRAMES/2)
- last = inter_yv12
- global total = 0.0
- global ssim_total = 0.0
- global avstimer = 0.0
- frame_count = FrameCount()
- #divisor = 1
- #scaled_orig = orig_yv12.bilinearresize(orig_yv12.width/divisor,orig_yv12.height/divisor)
- #scaled_inter = inter_yv12.bilinearresize( inter_yv12.width/divisor, inter_yv12.height/divisor)
- blurred = orig_yv12.GaussianBlur(1.5)
- scharr_orig = scharr(orig_yv12)
- scharr_blurred = scharr(blurred)
- FrameEvaluate(last, """
- #global ssim = SSIM_FRAME(scaled_orig, scaled_inter)
- global ssim = SSIM_FRAME(orig_yv12, blurred)
- global bssim = BSSIM_MOD(scharr_orig, scharr_blurred, ssim)
- global ssim_total = ssim_total + (bssim == 1.0 ? 0.0 : bssim)
- """)
- # NOTE: AvsTimer call should be before the WriteFile call
- AvsTimer(frames=1, type=0, total=false, name="Optimizer")
- # per frame logging (ssim, time)
- resultFile = "f:\avsoptim\results\perFrameResults.txt" # output out1="ssim: MAX(float)" out2="time: MIN(time) ms" file="f:\avsoptim\results\perFrameResults.txt"
- WriteFile(resultFile, "current_frame", "delimiter", "bssim", "delimiter", "avstimer")
- WriteFileIf(resultFile, "current_frame == frame_count-1", """ "stop " """, "ssim_total", append=true)
- return last
- function scharr(clip c) {
- scharr_x = c.mt_edge("3 0 -3 10 0 -10 3 0 -3", thY1 = 0, thY2 = 255, y=3, u=1, v=1)
- scharr_y = c.mt_edge("3 10 3 0 0 0 -3 -10 -3", thY1 = 0, thY2 = 255, y=3, u=1, v=1)
- scharr = mt_lutxy(scharr_x, scharr_y, yexpr=mt_polish("((x*x)+(y*y))^0.5"), u=1, v=1)
- return scharr
- }
- function BSSIM_MOD(clip scharr_orig, clip scharr_alt, float ssim) {
- stddev_orig = RT_YPlaneStdev(scharr_orig)
- stddev_alt = RT_YPlaneStdev(scharr_alt)
- mul = (2*stddev_orig*stddev_alt) / (stddev_orig*stddev_orig + stddev_alt*stddev_alt)
- return mul*ssim
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement