HeartlessS Usurer
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).
Last edited by StainlessS; 17th February 2015 at 04:27.
|