Menu

#228 Documentation of runtime filter evaluation sequence incomplete

v2.6x
open
nobody
5
2014-06-23
2014-06-23
No

Summay

There seems to be rather more to the evaluation sequence of runtime filters than the "bottom to top" mentioned at The script execution model/Scope and lifetime of variables. A more complete description would seem to be:

  • for runtime filters with after_frame = false, the runtime filters of a particular filter graph node are executed in the opposite sequence to which they appear in the script (i.e. bottom to top as stated),
  • for runtime filters with after_frame = true, the runtime filters of a particular filter graph node are executed in the sequence in which they appear in the script,
  • for runtime filters with after_frame = false, intermediate nodes have their runtime filters executed in the opposite sequence to which the nodes appear in the script filter graph,
  • for runtime filters with after_frame = true, intermediate nodes have their runtime filters executed in the sequence in which the nodes appear in the script filter graph,
  • any runtime filters of the final output node with after_frame = false are executed before those of intermediate nodes,
  • any runtime filters of the final output node with after_frame = true are executed after those of intermediate nodes

Script example

sequence = ""
BlankClip(length=2, width=180, height=30, color=$000000)
FrameEvaluate("""sequence = sequence + "f"""", show=false, after_frame=false)
FrameEvaluate("""sequence = sequence + "e"""", show=false, after_frame=false)
FrameEvaluate("""sequence = sequence + "g"""", show=false, after_frame=true)
FrameEvaluate("""sequence = sequence + "h"""", show=false, after_frame=true)
Invert()
FrameEvaluate("""sequence = sequence + "d"""", show=false, after_frame=false)
FrameEvaluate("""sequence = sequence + "c"""", show=false, after_frame=false)
FrameEvaluate("""sequence = sequence + "i"""", show=false, after_frame=true)
FrameEvaluate("""sequence = sequence + "j"""", show=false, after_frame=true)
clip1 = last
BlankClip(length=2, width=180, height=30, color=$FFFFFF)
FrameEvaluate("""sequence = sequence + "n"""", show=false, after_frame=false)
FrameEvaluate("""sequence = sequence + "m"""", show=false, after_frame=false)
FrameEvaluate("""sequence = sequence + "o"""", show=false, after_frame=true)
FrameEvaluate("""sequence = sequence + "p"""", show=false, after_frame=true)
Invert()
FrameEvaluate("""sequence = sequence + "l"""", show=false, after_frame=false)
FrameEvaluate("""sequence = sequence + "k"""", show=false, after_frame=false)
FrameEvaluate("""sequence = sequence + "q"""", show=false, after_frame=true)
FrameEvaluate("""sequence = sequence + "r"""", show=false, after_frame=true)
clip2 = last

clip1.Dissolve(clip2, 1)

FrameEvaluate("""sequence = sequence + "b"""", show=false, after_frame=false)
FrameEvaluate("""sequence = "a"""", show=false, after_frame=false)
FrameEvaluate("""sequence = sequence + "s"""", show=false, after_frame=true)
ScriptClip("""
sequence = sequence + "t"
Subtitle(sequence)
""", show=false, after_frame=true)

Discussion

Runtime filter evaluation sequence rather more complex than documented.

Discussion


Log in to post a comment.

MongoDB Logo MongoDB