import
numpy as np
from
moviepy.editor
import
*
from
moviepy.video.tools.segmenting
import
findObjects
screensize
=
(
720
,
460
)
txtClip
=
TextClip(
'GeeksforGeeks'
, color
=
'lightgreen'
, font
=
"Arial"
,
kerning
=
5
, fontsize
=
80
)
cvc
=
CompositeVideoClip( [txtClip.set_pos(
'center'
)],
size
=
screensize)
rotMatrix
=
lambda
a: np.array( [[np.cos(a), np.sin(a)],
[
-
np.sin(a), np.cos(a)]] )
def
effect1(screenpos, i, nletters):
d
=
lambda
t :
1.0
/
(
0.3
+
t
*
*
8
)
a
=
i
*
np.pi
/
nletters
v
=
rotMatrix(a).dot([
-
1
,
0
])
if
i
%
2
: v[
1
]
=
-
v[
1
]
return
lambda
t: screenpos
+
400
*
d(t)
*
rotMatrix(
0.5
*
d(t)
*
a).dot(v)
def
effect2(screenpos, i, nletters):
v
=
np.array([
0
,
-
1
])
d
=
lambda
t :
1
if
t<
0
else
abs
(np.sinc(t)
/
(
1
+
t
*
*
4
))
return
lambda
t: screenpos
+
v
*
400
*
d(t
-
0.15
*
i)
letters
=
findObjects(cvc)
def
moveLetters(letters, funcpos):
return
[ letter.set_pos(funcpos(letter.screenpos, i,
len
(letters)))
for
i, letter
in
enumerate
(letters)]
clips
=
[ CompositeVideoClip( moveLetters(letters, funcpos),
size
=
screensize).subclip(
0
,
5
)
for
funcpos
in
[effect1, effect2] ]
final_clip
=
concatenate_videoclips(clips)
final_clip.fps
=
24
final_clip.ipython_display()