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