使用Moviepy的带有背景图像的文字效果

问题描述

我需要使用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')

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...