View Single Post
Old 14th February 2015, 09:17   #18  |  Link
StainlessS
HeartlessS Usurer
 
StainlessS's Avatar
 
Join Date: Dec 2009
Location: Over the rainbow
Posts: 10,980
v0.051, see first post for zip.

Added a DBSC_DynaSplice User function to the DBSC.avs script, DBSC_ProcessByDAR.

Code:
Function DBSC_ProcessByDAR(clip c,String "SpliceDB",Int "SceneNo",Float "FDAR",
    \ Float "AR1",Float "AR2",Float "AR3",Float "AR4",Float "AR5",Float "AR6",Float "AR7",Float "AR8",
    \ String "FN",Bool "Show") {
/*
    DBSC_DynaSplice() User function (called by DBSC_DynaSplice on each scene).
    Creates ClipClop command text file based on letterbox cropped Display Aspect Ratio of each scene, enables selective
    processing based on a scenes Display Aspect Ratio where DAR changes within a clip.
    
    FDAR = Full Frame Display Aspect Ratio of Source clip (incl letterboxing).
    ARx Display Aspect Ratio of image area only (Excluding letterboxing)
    Always chooses one of the given ARx clip index numbers (ie never uses source clip ie clipclop clip 0
    unless all ARx Aspect ratios supplied as 0.0.)
    You can switch off ARx by setting to zero, however, you need to supply ClipClop Replacement clips up 
    to the maximum ARx number that may be non zero. Suggest always supply Source + 8 replacment clips to clipclop,
    and just use dummy clip where unused (ARx==0.0).
    
    Set Eg
    
    FUNC="DBSC_ProcessByDar(SpliceDB=SpliceDB,SceneNo=SceneNo,FDAR=4.0/3.0,Show=True)"

    And use in Dynacrop client script eg
        Return DBSC_DynaSplice(SpliceDB,func=FUNC)
    
    Use avs script eg (where ARx are processed clips for chosen AR)
      ClipClop(SourceClip,AR1,AR2,AR3,AR4,AR5,AR6,AR7,AR8,cmd="ClipClopCmd.txt",Show=True)
*/
    myName="DBSC_ProcessByDar: "
    c
    Assert(Defined(SpliceDB),RT_String("%sSpliceDB Not Supplied",myName))
    Assert(Defined(SceneNo),RT_String("%sSceneNo Not Supplied",myName))
    FDAR = Float(Default(FDAR,16.0/9.0))
    ###
    AR1  = Float(Default(AR1,2.40))                                         # If nearest to this, then use ClipClop clip 1
    AR2  = Float(Default(AR2,2.35))
    AR3  = Float(Default(AR3,1.85))
    AR4  = Float(Default(AR4,16.0/9.0))
    AR5  = Float(Default(AR5,1.66))
    AR6  = Float(Default(AR6,16.0/10.0))
    AR7  = Float(Default(AR7,1.5))
    AR8  = Float(Default(AR8,4.0/3.0))                                      # If nearest to this, then use ClipClop clip 8
    ###
    FN=Default(FN,"ClipClopCmd.txt")        
    Show=Default(Show,False)
    GScript("""
        Valid = (SpliceDB!="" && SceneNo>= 0)                               # Basic Validity test, DO NOTHING if bad
        if(Valid) {
            (SceneNo==0) ? RT_FileDelete(FN) : NOP             
            Start  = RT_DBaseGetField(SpliceDB,SceneNo,0)                   # SpliceDB Start Of Scene frame (0 relative)
            End    = RT_DBaseGetField(SpliceDB,SceneNo,1)                   # SpliceDB End Of Scene frame (0 relative)
            Length = End-Start+1
            IWID   = RT_DBaseGetField(SpliceDB,SceneNo,2)                   # Source Clip Width
            IHIT   = RT_DBaseGetField(SpliceDB,SceneNo,3)                   # Source Clip Height
            XX     = RT_DBaseGetField(SpliceDB,SceneNo,6)                   # Left Crop
            YY     = RT_DBaseGetField(SpliceDB,SceneNo,7)                   # Top Crop
            WW     = RT_DBaseGetField(SpliceDB,SceneNo,8)                   # Width
            HH     = RT_DBaseGetField(SpliceDB,SceneNo,9)                   # Height
            SAR    = (FDAR * IHIT)/ IWID                                    # Sample (pixel) Aspect ratio from source clip            
            AR     = (SAR * WW) / HH                                        # Display Aspect Ratio of cropped scene 
            AR0    = 99.9   BestAR = AR0 BestARix = 0 BestARdif=AR0         # If ALL ARx 0.0, Cause ClipCLop to choose source clip 0.
            
            TmpDif = Abs(AR-AR1) If(AR1>0.0 && TmpDif<BestARdif) {BestAR = AR1 BestARix = 1 BestARdif=TmpDif}
            TmpDif = Abs(AR-AR2) If(AR2>0.0 && TmpDif<BestARdif) {BestAR = AR2 BestARix = 2 BestARdif=TmpDif}
            TmpDif = Abs(AR-AR3) If(AR3>0.0 && TmpDif<BestARdif) {BestAR = AR3 BestARix = 3 BestARdif=TmpDif}
            TmpDif = Abs(AR-AR4) If(AR4>0.0 && TmpDif<BestARdif) {BestAR = AR4 BestARix = 4 BestARdif=TmpDif}
            TmpDif = Abs(AR-AR5) If(AR5>0.0 && TmpDif<BestARdif) {BestAR = AR5 BestARix = 5 BestARdif=TmpDif}
            TmpDif = Abs(AR-AR6) If(AR6>0.0 && TmpDif<BestARdif) {BestAR = AR6 BestARix = 6 BestARdif=TmpDif}
            TmpDif = Abs(AR-AR7) If(AR7>0.0 && TmpDif<BestARdif) {BestAR = AR7 BestARix = 7 BestARdif=TmpDif}
            TmpDif = Abs(AR-AR8) If(AR8>0.0 && TmpDif<BestARdif) {BestAR = AR8 BestARix = 8 BestARdif=TmpDif}
            
            RT_WriteFile(FN,"%d %d,%d  # SceneNo=%d Crop(%d,%d,%d,%d) CropAR=%.2f BestAR=%.2f",
                \ BestARix,Start,End,SceneNo+1,XX,YY,WW,HH,AR,BestAR,Append=True)
            RT_DebugF("#%d Start=%d End=%d Len=%d CropAR=%.2f BestAR=%.2f Clip=AR%d",
                \ SceneNo+1,Start,End,Length,AR,BestAR,BestARix,
                \ name=myName)
            if(Show) { 
                RT_Subtitle("#%d Start=%d End=%d Len=%d CropAR=%.2f BestAR=%.2f Clip=AR%d",
                    \ SceneNo+1,Start,End,Length,AR,BestAR,BestARix)
            }
        }
    """)
    Return Last # Return Clip Unchanged # EDIT: Unless Show=True
}
I cant update to current script as it uses quite a few updates to RT_Stats that will not be available for a time.
Previous posts not updated.

EDIT: Function above added due to this post: http://forum.doom9.org/showthread.php?t=171777

EDIT: Produces ClipClop command file, eg
Code:
5 0,254  # SceneNo=1 Crop(18,2,692,572) CropAR=1.29 BestAR=1.33
5 255,332  # SceneNo=2 Crop(16,2,694,572) CropAR=1.29 BestAR=1.33
5 333,347  # SceneNo=3 Crop(20,2,688,572) CropAR=1.28 BestAR=1.33
5 348,355  # SceneNo=4 Crop(10,2,698,572) CropAR=1.30 BestAR=1.33
5 356,390  # SceneNo=5 Crop(10,2,698,572) CropAR=1.30 BestAR=1.33
5 391,455  # SceneNo=6 Crop(12,2,690,572) CropAR=1.29 BestAR=1.33
5 456,468  # SceneNo=7 Crop(10,2,700,572) CropAR=1.31 BestAR=1.33
5 469,476  # SceneNo=8 Crop(8,2,702,572) CropAR=1.31 BestAR=1.33
5 477,488  # SceneNo=9 Crop(12,2,698,572) CropAR=1.30 BestAR=1.33
5 489,548  # SceneNo=10 Crop(10,2,700,572) CropAR=1.31 BestAR=1.33
5 549,569  # SceneNo=11 Crop(10,2,700,572) CropAR=1.31 BestAR=1.33
I did not have a suitable clip handy so is above always selecting the same clip (clip 5).
EDIT: In above changed script, would have always returned clip 8.

EDIT: Purpose, to create a ClipClop command file that selects clip based on scene Display Aspect Ratio of the image
only area (ie without letter boxing).
__________________
I sometimes post sober.
StainlessS@MediaFire ::: AND/OR ::: StainlessS@SendSpace

"Some infinities are bigger than other infinities", but how many of them are infinitely bigger ???

Last edited by StainlessS; 17th February 2015 at 04:27.
StainlessS is offline   Reply With Quote