Thread: Avisynth+
View Single Post
Old 21st October 2019, 12:37   #4910  |  Link
pinterf
Registered User
 
Join Date: Jan 2014
Posts: 2,314
Quote:
Originally Posted by StainlessS View Post

when Length=1, (for both BlankClips) it dont work, (ConditionalFilter fails)

Failing script

Code:
ROW      = True
LIMITLO  =  74.0     # >= is Target
LIMITHI  = 100.0     # <= is Target
INCOLOR  = $008080   # Set where in target range
OUTCOLOR = $FF8080   # Not in target range
SHOW     = false     # Return StackHorizontal, original as Y8, and mask.
###############
Colorbars.Trim(0,-100).convertToY8
MskByRowAveY(Row=ROW,LimitLo=LIMITLO,LimitHi=LIMITHI,InColor=INCOLOR,OutColor=OUTCOLOR,Show=SHOW)
Return Last

Function  MskByRowAveY(clip c, Bool "Row", Float "LimitLo", Float "LimitHi", Int "InColor", Int "OutColor", Bool "Show") {
#   Where AveLuma of pixel Row/Coloumn is between LimitLo<===>LimitHi, then set to Incolor, else OutColor. Colors Specified as YUV, where only Y8 returned.
    c                                           myName="MskByRowAveY: "
    Row=Default(Row,true)                       LimitLo=Default(LimitLo,  0.0)          LimitHi=Default(LimitHi,127.5)
    InColor =Default(InColor ,$000000)          OutColor=Default(OutColor,$FF8080)      Show=Default(Show,False)
    Assert(0.0 <= LimitLo <= LimitHi,myName+String(LimitLo,"0.0 <= LimitLo(%f)") + String(LimitHi,"  <= LimitHi(%f)"))
    Assert(LimitHi <= 255.0,myName+String(LimitHi,"LimitHi(%f) <= 255.0"))
    ConvertToY8.KillAudio                       O=Last
    (Row) ? SeparateRows(O.Height)  : SeparateColumns(O.Width)

    FAIL=false # toggle to fail

    len = (FAIL) ? 1 : Last.Framecount

    InC = Last.BlankClip(Length=Len,Color_YUV= InColor)    OutC= Last.BlankClip(Length=Len,Color_YUV=OutColor)
    Last.ConditionalFilter(InC,OutC,String(LimitLo,"(%f<=AverageLuma<=")+String(LimitHi,"%f)"))
    (Row) ? WeaveRows(O.Height) : WeaveColumns(O.width)
    Return (SHOW) ? StackHorizontal(O,Last) : Last
}
Output frame count of ConditionalFilter will be max(InC.FrameCount, OutC.FrameCount). When you set it to 1 (FAIL=true case), ConditionalFilter output will be a single frame result. Which is then fed into WeaveRows, which needs at least O.Height of clip length to work properly.
pinterf is offline