MoviePy – Texto con letras en movimiento

En este artículo veremos cómo podemos mover las letras del clip de texto MoviePy. MoviePy es un módulo de Python para la edición de videos, que se puede usar para operaciones básicas en videos y GIF. El video está formado por los cuadros, la combinación de cuadros crea un video, cada cuadro es una imagen individual. VideoClip es la clase base para todos los demás videoclips en MoviePy. El texto con letras en movimiento es como si las letras se extendieran y se reorganizaran, creando un efecto de movimiento.
 

Para hacerlo, tenemos que hacer lo siguiente: 
1. Importar el módulo numpy y moviepy 
2. Crear un clip de texto y establecer sus diversas propiedades 
3. Desde el clip de texto, crear un clip de video compuesto 
4. Crear métodos para mover el efecto de letras 
5 Cree clips utilizando los métodos uno por uno 
6. Combine los clips para obtener el videoclip final 
7. Establezca fps en el clip final 
8. Muestre el clip final 
 

Ejemplo: A continuación se muestra la implementación. 

Python3

# importing Numpy
import numpy as np
 
# importing moviepy module
from moviepy.editor import * from moviepy.video.tools.segmenting import findObjects
 
# screen size
screensize = (720, 460)
 
# creating a text clip of color green, font is Arial and size is 80
txtClip = TextClip('GeeksforGeeks', color = 'lightgreen', font = "Arial",
                   kerning = 5, fontsize = 80)
 
# creating a composite video of given size
cvc = CompositeVideoClip( [txtClip.set_pos('center')],
                        size = screensize)
 
# helper function
rotMatrix = lambda a: np.array( [[np.cos(a), np.sin(a)],
                                 [-np.sin(a), np.cos(a)]] )
 
 
# creating a effect 1 method
def effect1(screenpos, i, nletters):
     
    # damping
    d = lambda t : 1.0/(0.3 + t**8)
    # angle of the movement
    a = i * np.pi / nletters
     
    # using helper function
    v = rotMatrix(a).dot([-1, 0])
     
    if i % 2 : v[1] = -v[1]
         
    # returning the function
    return lambda t: screenpos + 400 * d(t)*rotMatrix(0.5 * d(t)*a).dot(v)
 
# method for effect 2
def effect2(screenpos, i, nletters):
     
    # numpy array
    v = np.array([0, -1])
     
    d = lambda t : 1 if t<0 else abs(np.sinc(t)/(1 + t**4))
     
    # returning the function
    return lambda t: screenpos + v * 400 * d(t-0.15 * i)
 
 
 
# a list of ImageClips
letters = findObjects(cvc)
 
 
# method to move letters
def moveLetters(letters, funcpos):
     
    return [ letter.set_pos(funcpos(letter.screenpos, i, len(letters)))
              for i, letter in enumerate(letters)]
 
# adding clips with specific effect
clips = [ CompositeVideoClip( moveLetters(letters, funcpos),
                              size = screensize).subclip(0, 5)
          for funcpos in [effect1, effect2] ]
 
# comping all the clips
final_clip = concatenate_videoclips(clips)
 
# setting fps of the final clip
final_clip.fps = 24
 
# showing video clip
final_clip.ipython_display()

Producción : 
 

Moviepy - Building video __temp__.mp4.
Moviepy - Writing video __temp__.mp4

                                                                                                                       
Moviepy - Done !
Moviepy - video ready __temp__.mp4

Otro ejemplo 
 

Python3

# importing Numpy
import numpy as np
 
# importing moviepy module
from moviepy.editor import * from moviepy.video.tools.segmenting import findObjects
 
# screen size
screensize = (1080, 720)
 
# creating a text clip of color red, font is Arial and size is 80
txtClip = TextClip('GeeksforGeeks', color = 'red', font = "Arial",
                   kerning = 5, fontsize = 80)
 
# creating a composite video of given size
cvc = CompositeVideoClip( [txtClip.set_pos('center')],
                        size = screensize)
 
# helper function
rotMatrix = lambda a: np.array( [[np.cos(a), np.sin(a)],
                                 [-np.sin(a), np.cos(a)]] )
 
 
 
# method for effect 3
def effect3(screenpos, i, nletters):
     
    v = np.array([-1, 0])
     
    d = lambda t : max(0, 3-3 * t)
     
    # returning the function
    return lambda t: screenpos-400 * v*d(t-0.2 * i)
 
# method for effect 4
def effect4(screenpos, i, nletters):
     
    # damping
    d = lambda t : max(0, t)
     
     # angle of the movement
    a = i * np.pi / nletters
     
    v = rotMatrix(a).dot([-1, 0])
     
    if i % 2 : v[1] = -v[1]
         
    # returning the function
    return lambda t: screenpos + 400 * d(t-0.1 * i)*rotMatrix(-0.2 * d(t)*a).dot(v)
 
 
 
# a list of ImageClips
letters = findObjects(cvc)
 
 
# method to move letters
def moveLetters(letters, funcpos):
     
    return [ letter.set_pos(funcpos(letter.screenpos, i, len(letters)))
              for i, letter in enumerate(letters)]
 
# adding clips with specific effect
clips = [ CompositeVideoClip( moveLetters(letters, funcpos),
                              size = screensize).subclip(0, 5)
          for funcpos in [effect3, effect4] ]
 
# comping all the clips
final_clip = concatenate_videoclips(clips)
 
# setting fps of the final clip
final_clip.fps = 24
 
# showing video clip
final_clip.ipython_display()

Producción : 
 

Moviepy - Building video __temp__.mp4.
Moviepy - Writing video __temp__.mp4

                                                                                                                       
Moviepy - Done !
Moviepy - video ready __temp__.mp4

Publicación traducida automáticamente

Artículo escrito por rakshitarora y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *