Так это я для примера сказал.
Сейчас у меня код выглядит так
ProjectFile = C:\test.prproj
SequenceName = Sequence 01
EffectName = PR.ADBE Extract
EffectListFile = E:\test.txt ; будет стерт и заново создастся после запуска скрипта
SetBatchLines, -1
k = 1
n = 1
; Проверяем есть ли такая секвенция и название эффекта
FileRead, Contents, %ProjectFile%
StringGetPos, out, Contents, <Name>%SequenceName%</Name>
if out = -1
{
msgbox, Sequence with this name does not exist!
ExitApp
}
FileRead, Contents, %ProjectFile%
StringGetPos, out, Contents, <MatchName>%EffectName%</MatchName>
if out = -1
{
msgbox, Effect with this name does not exist!
ExitApp
}
; Находим айди секвенции и референс на её фреймрейт
Loop, read, %ProjectFile%
{
if n = 1
{
IfNotInString, A_LoopReadLine, <Sequence ObjectUID, continue
n = 2
}
if n = 2
{
IfNotInString, A_LoopReadLine, <Second ObjectRef, continue
Variable := trim(A_LoopReadLine)
NewVar := RegExReplace(Variable, "\D")
FrameRateObjectRef := "<VideoTrackGroup ObjectID=""" NewVar """"
n = 3
}
if n = 3
{
IfNotInString, A_LoopReadLine, <ID>, continue
ID := trim(RegExReplace(A_LoopReadLine, "<ID>(.+)</ID>", "$1"))
n = 4
}
if n = 4
{
IfNotInString, A_LoopReadLine, <Name>%SequenceName%</Name>
{
IfNotInString, A_LoopReadLine, </Sequence>, continue
n = 1
}
Else
{
n = 1
break
}
}
}
; Определяем framerate секвенции
Loop, read, %ProjectFile%
{
if n = 1
{
IfNotInString, A_LoopReadLine, %FrameRateObjectRef%, continue
n = 2
}
if n = 2
{
IfNotInString, A_LoopReadLine, <FrameRate>, continue
FrameRate := trim(RegExReplace(A_LoopReadLine, "<FrameRate>(.+)</FrameRate>", "$1"))
n = 1
break
}
}
If FrameRate = 10160640000 ; 25fps
{
delimeter= :
i = 0
fps = 25
FramesInOneHour = 90000
FramesInOneMinute = 1500
}
If FrameRate = 10594584000 ; 24fps
{
delimeter= :
i = 0
fps = 24
FramesInOneHour = 86400
FramesInOneMinute = 1440
}
If FrameRate = 5080320000 ; 50fps
{
delimeter= :
i = 0
fps = 50
FramesInOneHour = 180000
FramesInOneMinute = 3000
}
If FrameRate = 8475667200 ; 29.97fps
{
delimeter=;
i = 2
fps = 30
FramesInOneHour = 108000
FramesInOneMinute = 1800
}
If FrameRate = 4237833600 ; 59.94fps
{
delimeter=;
i = 4
fps = 60
FramesInOneHour = 216000
FramesInOneMinute = 3600
}
; Находим клипы с эффектом
EffectList := "В секвенции """ SequenceName """ эффект """ EffectName """ присутствует:"
Loop, read, %ProjectFile%
{
if n = 1
{
IfNotInString, A_LoopReadLine, <VideoClipTrackItem ObjectID, continue
n = 2
}
if n = 2
{
IfNotInString, A_LoopReadLine, <TrackIndex>, continue
TrackIndex := trim(RegExReplace(A_LoopReadLine, "<TrackIndex>(.+)</TrackIndex>", "$1"))
a1 := "Track: " TrackIndex + 1
n = 3
}
if n = 3
{
IfNotInString, A_LoopReadLine, <End>, continue
End := trim(RegExReplace(A_LoopReadLine, "<End>(.+)</End>", "$1"))
framecountEnd := Floor(End / FrameRate)
framecount := framecountEnd + floor(framecountEnd / FramesInOneMinute)*i - floor(framecountEnd / FramesInOneMinute / 10)*i
TC1 = % floor(framecount / FramesInOneHour)
TC2 = % floor((framecount - TC1*FramesInOneHour) / FramesInOneMinute)
TC3 = % floor((framecount - TC1*FramesInOneHour - TC2*FramesInOneMinute) /fps)
TC4 = % floor(framecount - TC1*FramesInOneHour - TC2*FramesInOneMinute - TC3*fps )
SetFormat, Float, 02.0
Loop, 4
TC%A_Index% += 0.0
a2 := "Sequence Out: " TC1 delimeter TC2 delimeter TC3 delimeter TC4 "`n"
n = 4
}
if n = 4
{
IfNotInString, A_LoopReadLine, <Start>, continue
Start := trim(RegExReplace(A_LoopReadLine, "<Start>(.+)</Start>", "$1"))
framecountStart := Floor(Start / FrameRate)
framecount := framecountStart + floor(framecountStart / FramesInOneMinute)*i - floor(framecountStart / FramesInOneMinute / 10)*i
TC1 = % floor(framecount / FramesInOneHour)
TC2 = % floor((framecount - TC1*FramesInOneHour) / FramesInOneMinute)
TC3 = % floor((framecount - TC1*FramesInOneHour - TC2*FramesInOneMinute) /fps)
TC4 = % floor(framecount - TC1*FramesInOneHour - TC2*FramesInOneMinute - TC3*fps )
SetFormat, Float, 02.0
Loop, 4
TC%A_Index% += 0.0
a3 := "Sequence In: " TC1 delimeter TC2 delimeter TC3 delimeter TC4 "`n"
n = 5
}
if n = 5
{
framecount := framecountEnd - framecountStart
TC1 = % floor(framecount/FramesInOneHour)
TC2 = % floor((framecount - TC1*FramesInOneHour) / FramesInOneMinute)
TC3 = % floor((framecount - TC1*FramesInOneHour - TC2*FramesInOneMinute) /fps)
TC4 = % floor(framecount - TC1*FramesInOneHour - TC2*FramesInOneMinute - TC3*fps )
SetFormat, Float, 02.0
Loop, 4
TC%A_Index% += 0.0
a4 := "Duration: " TC1 delimeter TC2 delimeter TC3 delimeter TC4 "`n"
n = 6
}
if n = 6
{
IfNotInString, A_LoopReadLine, <SubClip ObjectID, continue
n = 7
}
if n = 7
{
IfNotInString, A_LoopReadLine, <Name>, continue
Name := trim(RegExReplace(A_LoopReadLine, "<Name>(.+)</Name>", "$1"))
a5 := "Clip Name: " Name "`n"
n = 8
}
if n = 8
{
IfNotInString, A_LoopReadLine, <VideoComponentChain ObjectID, continue
n = 9
}
if n = 9
{
IfNotInString, A_LoopReadLine, <SeqID>, continue
SeqID := trim(RegExReplace(A_LoopReadLine, "<SeqID>(.+)</SeqID>", "$1"))
If SeqID != %ID%
n = 1
Else
n = 10
}
if n = 10
{
IfNotInString, A_LoopReadLine, </VideoComponentChain>, continue
n = 11
}
if n = 11
{
IfInString, A_LoopReadLine, </VideoComponentChain>, continue
n = 12
}
if n = 12
{
n = 13
IfInString, A_LoopReadLine, <VideoClipTrackItem ObjectID
n = 2
}
if n = 13
{
IfNotInString, A_LoopReadLine, <VideoFilterComponent ObjectID
n = 1
Else
n = 14
}
if n = 14
{
IfNotInString, A_LoopReadLine, <MatchName>, continue
MatchName := trim(RegExReplace(A_LoopReadLine, "<MatchName>(.+)</MatchName>", "$1"))
If MatchName != %EffectName%
n = 15
Else
n = 16
}
if n = 15
{
IfNotInString, A_LoopReadLine, <VideoFilterComponent ObjectID
{
IfNotInString, A_LoopReadLine, <VideoClipTrackItem ObjectID, continue
n = 2
}
Else
n = 14
}
if n = 16
{
IfNotInString, A_LoopReadLine, <Bypass>, continue
Bypass := trim(RegExReplace(A_LoopReadLine, "<Bypass>(.+)</Bypass>", "$1"))
n = 17
If Bypass = false
a6 := "Enabled`n"
Else
a6 := "Disabled`n"
}
if n = 17
{
n = 15
List .= framecountStart "a" k "`n"
EffectList%k% := a6 a3 a2 a4 a5 a1
k := k + 1
}
}
Sort, List, N D`n
List:=RegExReplace(list,"\s*$","")
n = 1
loop, parse, List, `n, `r
{
var := (RegExReplace(A_LoopField, "(.+)a", "$2"))
k := var
EffectList .= "`n`n" n ") " EffectList%k%
n++
}
FileDelete, %EffectListFile%
FileAppend, % EffectList, %EffectListFile%, UTF-8
Msgbox, Done
ExitApp