问题描述
我需要使用Moviepy在背景图片上添加文字效果,但是由于某种原因它无法正常工作。我正在使用moviepy,并且有一个jpg背景图像文件。这导致黑色背景视频。这是代码
import numpy as np
from moviepy.editor import *
from moviepy.video.tools.segmenting import findobjects
# WE CREATE THE TEXT THAT IS GOING TO MOVE,WE CENTER IT.
screensize = (720,460)
txtClip = TextClip('Cool effect',color='white',font="Amiri-Bold",kerning = 5,fontsize=100)
image_clip = ImageClip("newback.jpg",duration=5)
cvc = CompositeVideoClip( [image_clip,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)]] )
def arrive(screenpos,i,nletters):
v = np.array([-1,0])
d = lambda t : max(0,3-3*t)
return lambda t: screenpos-400*v*d(t-0.2*i)
# WE USE THE PLUGIN findobjects TO LOCATE AND SEParaTE EACH LETTER
letters = findobjects(cvc) # a list of ImageClips
# WE ANIMATE THE LETTERS
def moveLetters(letters,funcpos):
return [ letter.set_pos(funcpos(letter.screenpos,len(letters)))
for i,letter in enumerate(letters)]
clips = [ CompositeVideoClip( moveLetters(letters,funcpos),size = screensize).subclip(0,5)
for funcpos in [arrive] ]
# WE CONCATENATE EVERYTHING AND WRITE TO A FILE
final_clip = concatenate_videoclips(clips)
final_clip.write_videofile('coolTextEffects.avi',fps=25,codec='mpeg4')
解决方法
你可以试试这个:
import numpy as np
from moviepy.editor import *
from moviepy.video.tools.segmenting import findObjects
# WE CREATE THE TEXT THAT IS GOING TO MOVE,WE CENTER IT.
screensize = (720,460)
txtClip = TextClip('Cool effect',color='white',font="Amiri-Bold",kerning = 5,fontsize=100)
#image_clip = ImageClip("newback.jpg",duration=5)
#cvc = CompositeVideoClip( [image_clip,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)]] )
def arrive(screenpos,i,nletters):
v = np.array([-1,0])
d = lambda t : max(0,3-3*t)
return lambda t: screenpos-400*v*d(t-0.2*i)
# WE USE THE PLUGIN findObjects TO LOCATE AND SEPARATE EACH LETTER
#letters = findObjects(cvc) # a list of ImageClips
letters = findObjects(txtClip)
# WE ANIMATE THE LETTERS
def moveLetters(letters,funcpos):
return [ letter.set_pos(funcpos(letter.screenpos,len(letters)))
for i,letter in enumerate(letters)]
clips = [ CompositeVideoClip( moveLetters(letters,funcpos),size = screensize).subclip(0,5)
for funcpos in [arrive] ]
# WE CONCATENATE EVERYTHING AND WRITE TO A FILE
final_clip = concatenate_videoclips(clips)
image_clip = ImageClip("image.jpg",duration=final_clip.duration)
final_clip = CompositeVideoClip([image_clip,final_clip.set_pos('center')])
final_clip.write_videofile('coolTextEffects.avi',fps=25,codec='mpeg4')