Skip to content

Commit 7ba09d1

Browse files
authored
Add files via upload
1 parent 12ce824 commit 7ba09d1

1 file changed

Lines changed: 66 additions & 0 deletions

File tree

blog29-MoviePy/test04.py

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
import numpy as np
2+
3+
from moviepy.editor import *
4+
from moviepy.video.tools.segmenting import findObjects
5+
6+
# WE CREATE THE TEXT THAT IS GOING TO MOVE, WE CENTER IT.
7+
8+
screensize = (720,460)
9+
txtClip = TextClip('Cool effect',color='white', font="Amiri-Bold",
10+
kerning = 5, fontsize=100)
11+
cvc = CompositeVideoClip( [txtClip.set_pos('center')],
12+
size=screensize)
13+
14+
# THE NEXT FOUR FUNCTIONS DEFINE FOUR WAYS OF MOVING THE LETTERS
15+
16+
17+
# helper function
18+
rotMatrix = lambda a: np.array( [[np.cos(a),np.sin(a)],
19+
[-np.sin(a),np.cos(a)]] )
20+
21+
def vortex(screenpos,i,nletters):
22+
d = lambda t : 1.0/(0.3+t**8) #damping
23+
a = i*np.pi/ nletters # angle of the movement
24+
v = rotMatrix(a).dot([-1,0])
25+
if i%2 : v[1] = -v[1]
26+
return lambda t: screenpos+400*d(t)*rotMatrix(0.5*d(t)*a).dot(v)
27+
28+
def cascade(screenpos,i,nletters):
29+
v = np.array([0,-1])
30+
d = lambda t : 1 if t<0 else abs(np.sinc(t)/(1+t**4))
31+
return lambda t: screenpos+v*400*d(t-0.15*i)
32+
33+
def arrive(screenpos,i,nletters):
34+
v = np.array([-1,0])
35+
d = lambda t : max(0, 3-3*t)
36+
return lambda t: screenpos-400*v*d(t-0.2*i)
37+
38+
def vortexout(screenpos,i,nletters):
39+
d = lambda t : max(0,t) #damping
40+
a = i*np.pi/ nletters # angle of the movement
41+
v = rotMatrix(a).dot([-1,0])
42+
if i%2 : v[1] = -v[1]
43+
return lambda t: screenpos+400*d(t-0.1*i)*rotMatrix(-0.2*d(t)*a).dot(v)
44+
45+
46+
47+
# WE USE THE PLUGIN findObjects TO LOCATE AND SEPARATE EACH LETTER
48+
49+
letters = findObjects(cvc) # a list of ImageClips
50+
51+
52+
# WE ANIMATE THE LETTERS
53+
54+
def moveLetters(letters, funcpos):
55+
return [ letter.set_pos(funcpos(letter.screenpos,i,len(letters)))
56+
for i,letter in enumerate(letters)]
57+
58+
clips = [ CompositeVideoClip( moveLetters(letters,funcpos),
59+
size = screensize).subclip(0,5)
60+
for funcpos in [vortex, cascade, arrive, vortexout] ]
61+
62+
# WE CONCATENATE EVERYTHING AND WRITE TO A FILE
63+
64+
final_clip = concatenate_videoclips(clips)
65+
final_clip.write_videofile('coolTextEffects.avi',fps=25,codec='mpeg4')
66+

0 commit comments

Comments
 (0)