vctrans


Author V. C. Mohan
Date July 2021
All my plugins are available for free download from "here".

vctrans plugin for vapoursynth version r24, is free and the author does not give any guarentee for its operation. It may be downloaded and used at the users risk.

vctrans has a number of functions for various types of transitions. This is used for smoothly and with a selected style perform transition from clip A to clip B over a specified length of overlap: All these functions are improved or modified versions of TransAll plugin for avisynth and are ported with suitable changes from the original avisynth plugins TransAll

.

The plugin requires that both the input clips A and B have constant identical formats. The time in seconds of overlap is the third parameter for all the functions. Additional parameters depending on the transition function selected may be specified. The clips must be at least one frame longer than overlap duration. Several transitions may come out better with longer overlap duration than the default value. The functions included in this plugin are listed below. Clicking on any of them will open its desription



1.Accord
2.Bubbles
3.Central
4.Crumple
5.Disco
6.Door
7.FlipPage
8.Funnel
9.Paint
10.Push
11.Roll
12.Ripple
13.Ripple
14.Shuffle
15.Slide
16.Sprite
17.Swing
18.Swirl
19.VenitianBlinds
20.Weave
21.Wipe

typical script call for the functions:-

trans.Accord(clip, clipb clip[, float overlap = 1.0 ][,.][,......] )



A more detailed description of each function can be seen by clicking on the function name.
The following is a script to test most of the features of this plugin.
import vapoursynth as vs
core = vs.get_core()
# need to add matrix also for conversion RGB to YUV
#frmt = vs.YUV444P8 
frmt = vs.RGB24
time = 2.0
core.std.LoadPlugin(path=r'c:\....\vctrans.dll')

# using two photos as input. Use any two of yours
imga = core.imwri.Read([ "c:\images\snapshot1.jpg"])
imgb = core.imwri.Read([ "c:\images\singer.png"])
#ensure both are of same format and dimensions
imga = core.resize.Bicubic(imga,height = 480, width = 720,format=frmt)
imgb = core.resize.Bicubic(imgb,height = 480, width = 720,format=frmt)
# looping to get one frame more than overlap in these 30fps videos
reta = core.std.Loop(imga,61)
retb = core.std.Loop(imgb,61)
ret = core.trans.Accord(reta, clipb = retb, overlap = time, twin = 0, dir = 1, open = 0)
ret = ret + core.trans.Accord(retb, clipb = reta, overlap = time, twin = 1, dir = 1, open = 0)
ret = ret + core.trans.Accord(reta, clipb = retb, overlap = time, twin = 0, dir = 0, open = 0)
ret = ret + core.trans.Accord(retb, clipb = reta, overlap = time, twin = 1, dir = 0, open = 0)
vid = core.text.Text(ret, "Accord", 2)
ret = core.trans.Bubbles(reta, clipb = retb, overlap = time, static = 0)
ret = ret + core.trans.Bubbles(retb, clipb = reta, overlap = time, static = 1)
ret=core.text.Text(ret, "Bubbles", 2)
vid = vid + ret
ret = core.trans.Central(reta, clipb = retb, overlap = time, nturns = -5, emerge = 0)
ret = ret + core.trans.Central(retb, clipb = reta, overlap = time, nturns = 5, emerge = 1)
ret = ret + core.trans.Central(reta, clipb = retb, overlap = time, nturns = 0, emerge = 0, resize = 0)
ret =core.text.Text(ret, "Central", 2)
vid = vid + ret
ret = core.trans.Crumple(retb, clipb = reta, overlap = time, crumple = 1, emerge = 1)
ret = ret + core.trans.Crumple(reta, clipb = retb, overlap = time, crumple = 1, emerge = 0)
ret = ret + core.trans.Crumple(retb, clipb = reta, overlap = time, crumple = 0, emerge = 1)
ret = ret + core.trans.Crumple(reta, clipb = retb, overlap = time, crumple = 0, emerge = 0)
ret = core.text.Text(ret, "Crumple", 2)
vid = vid + ret
ret = core.trans.Disco(retb, clipb = reta, overlap = time, nturns = -4, emerge = 0)
ret = ret + core.trans.Disco(reta, clipb = retb, overlap = time, nturns = 0, emerge = 1)
ret = ret + core.trans.Disco(retb, clipb = reta, overlap = time, nturns = 5, emerge = 1)
ret  = core.text.Text(ret, "Disco", 2)
vid = vid + ret
ret = core.trans.Door(reta, clipb = retb, overlap = time, vert = 0, open = 1)
ret = core.text.Text(ret, "Door", 2)
vid = vid + ret
ret = core.trans.FlipPage(retb, clipb = reta, overlap = time, left = 1)
ret = ret + core.trans.FlipPage(reta, clipb = retb, overlap = time, left = 0)
ret = core.text.Text(ret, "FlipPage", 2)
vid = vid + ret
ret = core.trans.Funnel(retb, clipb = reta, overlap = time, dir = 1)
ret = ret + core.trans.Funnel(reta, clipb = retb, overlap = time, dir = 2)
ret = ret + core.trans.Funnel(retb, clipb = reta, overlap = time, dir = 3)
ret = ret + core.trans.Funnel(reta, clipb = retb, overlap = time, dir = 4)
ret = core.text.Text(ret, "Funnel", 2)
vid = vid + ret 
ret = core.trans.Paint(retb, clipb = reta, overlap = time, style = 1)
ret = ret + core.trans.Paint(reta, clipb = retb, overlap = time, style = 2)
ret = ret + core.trans.Paint(retb, clipb = reta, overlap = time, style = 3)
ret = ret + core.trans.Paint(reta, clipb = retb, overlap = time, style = 4)
ret = core.text.Text(ret, "Paint", 2)
vid = vid + ret

ret = core.trans.Push(retb, clipb = reta, overlap = time, dir = 1)
ret = ret + core.trans.Push(reta, clipb = retb, overlap = time, dir = 2)
ret = ret + core.trans.Push(retb, clipb = reta, overlap = time, dir = 3)
ret = ret + core.trans.Push(reta, clipb = retb, overlap = time, dir = 4)
ret = core.text.Text(ret, "Push", 2)
vid = vid + ret
ret = core.trans.Ripple(retb, clipb = reta, overlap = time,origin = 0, amp = 12, wlength = 14, merge = 1) 
ret = ret + core.trans.Ripple(reta, clipb = retb, overlap = time,origin = 1, amp = 2, wlength = 8, merge = 1)
ret = ret + core.trans.Ripple(retb, clipb = reta, overlap = time,origin = 2, amp = 4, wlength = 12, merge = 1)
ret = ret + core.trans.Ripple(reta, clipb = retb, overlap = time,origin = 3, amp = 8, wlength = 16, merge = 1)
ret = ret + core.trans.Ripple(retb, clipb = reta, overlap = time,origin = 4, amp = 10, wlength = 20)
ret = ret + core.trans.Ripple(reta, clipb = retb, overlap = time,origin = 5, amp = 12, wlength = 30)
ret = ret + core.trans.Ripple(retb, clipb = reta, overlap = time,origin = 6, amp = 3, wlength = 40)
ret = ret + core.trans.Ripple(reta, clipb = retb, overlap = time,origin = 7, amp = 1, wlength = 50)
ret = ret + core.trans.Ripple(retb, clipb = reta, overlap = time,origin = 8, amp = 5, wlength = 20, merge = 1)
ret = core.text.Text(ret, "Ripple", 2)
vid = vid + ret
ret = core.trans.Roll(reta, clipb = retb, overlap = time, dir = 1)
ret = ret + core.trans.Roll(retb, clipb = reta, overlap = time, dir = 1, rollin = 0)
ret = ret + core.trans.Roll(reta, clipb = retb, overlap = time, dir = 3)
ret = ret + core.trans.Roll(retb, clipb = reta, overlap = time, dir = 3, rollin = 0)
ret = ret + core.trans.Roll(reta, clipb = retb, overlap = time, dir = 5)
ret = ret + core.trans.Roll(retb, clipb = reta, overlap = time, dir = 5, rollin = 0)
ret = ret + core.trans.Roll(reta, clipb = retb, overlap = time, dir = 7)
ret = ret + core.trans.Roll(retb, clipb = reta, overlap = time, dir = 7, rollin = 0)

ret = ret + core.trans.Roll(reta, clipb = retb, overlap = time, dir = 2)
ret = ret + core.trans.Roll(retb, clipb = reta, overlap = time, dir = 2, rollin = 0)
ret = ret + core.trans.Roll(reta, clipb = retb, overlap = time, dir = 4)
ret = ret + core.trans.Roll(retb, clipb = reta, overlap = time, dir = 4, rollin = 0)
ret = ret + core.trans.Roll(reta, clipb = retb, overlap = time, dir = 6)
ret = ret + core.trans.Roll(retb, clipb = reta, overlap = time, dir = 6, rollin = 0)
ret = ret + core.trans.Roll(reta, clipb = retb, overlap = time, dir = 8)
ret = ret + core.trans.Roll(retb, clipb = reta, overlap = time, dir = 8, rollin = 0)
ret = core.text.Text(ret, "Roll", 2)
vid = vid + ret
ret = core.trans.Scratch(reta, clipb = retb, overlap = time, style = 1)
ret = ret + core.trans.Scratch(retb, clipb = reta, overlap = time, style = 2)
ret = ret + core.trans.Scratch(reta, clipb = retb, overlap = time, style = 3)
ret = ret + core.trans.Scratch(retb, clipb = reta, overlap = time, style = 4)
ret = ret + core.trans.Scratch(reta, clipb = retb, overlap = time, style = 5)
ret = ret + core.trans.Scratch(retb, clipb = reta, overlap = time, style = 6)
ret = ret + core.trans.Scratch(reta, clipb = retb, overlap = time, style = 7)
ret = core.text.Text(ret, "Scratch", 2)
vid = vid + ret
ret = core.trans.Shuffle(retb, clipb = reta, overlap = time, dir = 1)
ret = ret + core.trans.Shuffle(reta, clipb = retb, overlap = time, dir = 2)
ret = ret + core.trans.Shuffle(retb, clipb = reta, overlap = time, dir = 3)
ret = ret + core.trans.Shuffle(reta, clipb = retb, overlap = time, dir = 4)
ret = core.text.Text(ret, "Shuffle", 2)
vid = vid + ret

ret = core.trans.Slide(retb,clipb = reta, overlap = time, dir = 0, slidein = 0)
ret = ret + core.trans.Slide(reta, clipb = retb, overlap = time, dir = 1, slidein = 0)
ret = ret + core.trans.Slide(retb, clipb = reta, overlap = time, dir = 2, slidein = 0)
ret = ret + core.trans.Slide(reta, clipb = retb, overlap = time, dir = 3, slidein = 0)
ret = ret + core.trans.Slide(retb, clipb = reta, overlap = time, dir = 4, slidein = 0)
ret = ret + core.trans.Slide(reta, clipb = retb, overlap = time, dir = 5, slidein = 0)
ret = ret + core.trans.Slide(retb, clipb = reta, overlap = time, dir = 6, slidein = 0)
ret = ret + core.trans.Slide(reta, clipb = retb, overlap = time, dir = 7, slidein = 0)
ret = ret + core.trans.Slide(retb, clipb = reta, overlap = time, dir = 8, slidein = 0)
ret = ret + core.trans.Slide(reta, clipb = retb, overlap = time, dir = 1, slidein = 1)
ret = ret + core.trans.Slide(retb, clipb = reta, overlap = time, dir = 2, slidein = 1)
ret = ret + core.trans.Slide(reta, clipb = retb, overlap = time, dir = 3, slidein = 1)
ret = ret + core.trans.Slide(retb, clipb = reta, overlap = time, dir = 4, slidein = 1)
ret = ret + core.trans.Slide(reta, clipb = retb, overlap = time, dir = 5, slidein = 1)
ret = ret + core.trans.Slide(retb, clipb = reta, overlap = time, dir = 6, slidein = 1)
ret = ret + core.trans.Slide(reta, clipb = retb, overlap = time, dir = 7, slidein = 1)
ret = ret + core.trans.Slide(retb, clipb = reta, overlap = time, dir = 8, slidein = 1)
ret = ret + core.trans.Slide(reta, clipb = retb, overlap = time, dir = 0, slidein = 1)
ret = core.text.Text(ret, "Slide", 2)
vid = vid + ret
ret = core.trans.Sprite(retb, clipb = reta, overlap = time, dir = 1)
ret = ret + core.trans.Sprite(reta, clipb = retb, overlap = time, dir = 2)
ret = ret + core.trans.Sprite(retb, clipb = reta, overlap = time, dir = 3)
ret = ret + core.trans.Sprite(reta, clipb = retb, overlap = time, dir = 4)
ret = core.text.Text(ret, "Sprite", 2)
vid = vid + ret
ret = core.trans.Swing(retb, clipb = reta, overlap = time, dir = 1,open = 0, ndoors = 1, corner = 1)
ret = ret + core.trans.Swing(reta, clipb = retb, overlap = time, dir = 0,open = 0, ndoors = 1, corner = 2)
ret = ret + core.trans.Swing(retb, clipb = reta, overlap = time, dir = 0,open = 1, ndoors = 1, corner = 3)
ret = ret + core.trans.Swing(reta, clipb = retb, overlap = time, dir = 1,open = 1, ndoors = 1, corner = 4)
ret = ret + core.trans.Swing(retb, clipb = reta, overlap = time, dir = 0,open = 1, ndoors = 2, corner = 1)
ret = ret + core.trans.Swing(reta, clipb = retb, overlap = time, dir = 0,open = 1, ndoors = 2, corner = 2)
ret = ret + core.trans.Swing(retb, clipb = reta, overlap = time, dir = 0,open = 1, ndoors = 2, corner = 3)
ret = ret + core.trans.Swing(reta, clipb = retb, overlap = time, dir = 0,open = 1, ndoors = 2, corner = 4)
ret = ret + core.trans.Swing(retb, clipb = reta, overlap = time, dir = 1,open = 1, ndoors = 4, corner = 1)
ret = ret + core.trans.Swing(reta, clipb = retb, overlap = time, dir = 1,open = 1, ndoors = 4, corner = 2)
ret = ret + core.trans.Swing(retb, clipb = reta, overlap = time, dir = 1,open = 1, ndoors = 4, corner = 3)
ret = ret + core.trans.Swing(reta, clipb = retb, overlap = time, dir = 1,open = 1, ndoors = 4, corner = 4)
ret = core.text.Text(retb, "Swing", 2)
vid = vid + ret
ret = core.trans.Swirl(retb, clipb = reta, overlap = time, dir = 1, qr = 5)
ret = ret + core.trans.Swirl(reta, clipb = retb, overlap = time, dir = -1, qr = 2)
ret = core.text.Text(ret, "Swirl", 2)
vid = vid + ret

ret = core.trans.VenitianBlinds(retb, clipb = reta, overlap = time, style = 1)
ret = ret + core.trans.VenitianBlinds(reta, clipb = retb, overlap = time, style = 2)
ret = ret + core.trans.VenitianBlinds(retb, clipb = reta, overlap = time, style = 3)
ret = ret + core.trans.VenitianBlinds(reta, clipb = retb, overlap = time, style = 4)
ret = ret + core.trans.VenitianBlinds(retb, clipb = reta, overlap = time, style = 1, open = 0)
ret = ret + core.trans.VenitianBlinds(reta, clipb = retb, overlap = time, style = 2, open = 0)
ret = ret + core.trans.VenitianBlinds(retb, clipb = reta, overlap = time, style = 3, open = 0)
ret = ret + core.trans.VenitianBlinds(reta, clipb = retb, overlap = time, style = 4, open = 0)
ret = core.text.Text(ret, "VenitianBlinds", 2)
vid = vid + ret
ret = core.trans.Weave(reta, clipb = retb, overlap = time, style = 1)
ret = ret + core.trans.Weave(retb, clipb = reta, overlap = time, style = 2)
ret = ret + core.trans.Weave(reta, clipb = retb, overlap = time, style = 3)
ret = ret + core.trans.Weave(retb, clipb = reta, overlap = time, style = 4)
ret = core.text.Text(ret, "Weave", 2)
vid = vid + ret
ret = core.trans.Wipe(reta, clipb = retb, overlap = time, dir = 1)
ret = ret + core.trans.Wipe(retb, clipb = reta, overlap = time, dir = 2)
ret = ret + core.trans.Wipe(reta, clipb = retb, overlap = time, dir = 3)
ret = ret + core.trans.Wipe(retb, clipb = reta, overlap = time, dir = 4)
ret = ret + core.trans.Wipe(reta, clipb = retb, overlap = time, dir = 5)
ret = ret + core.trans.Wipe(retb, clipb = reta, overlap = time, dir = 6)
ret = ret + core.trans.Wipe(reta, clipb = retb, overlap = time, dir = 7)
ret = ret + core.trans.Wipe(retb, clipb = reta, overlap = time, dir = 8)
ret =  core.text.Text(ret, "wipe", 2)
vid = vid + ret
#format conversions to suit the player
#ret = core.resize.Bicubic(vid,format=vs.YUV420P8)
#ret = core.resize.Bicubic(ret,height = 480, width = 720,format=vs.YUV444P8)
#ret = core.fmtc.bitdepth(vid,flt = 0)
# set the clip to be output
ret.set_output()
To my index page to down load plugin vctrans go to Avisynth