I am trying to use moviepy to generate video with texts. First, I want to show one messages and then another one. In my case I want to show "Dog" for one second and than "Cat Cat". For that I use the following code:
from moviepy.editor import *
def my_func(messeges):
clips = {}
count = 0
for messege in messeges:
count += 1
clips[count] = TextClip(messege, fontsize=270, color='green')
clips[count] = clips[count].set_pos('center').set_duration(1)
clips[count].write_videofile(str(count) + '.avi', fps=24, codec='mpeg4')
videos = [clips[i+1] for i in range(count)]
video = concatenate(videos)
video.write_videofile('test.avi', fps=24, codec='mpeg4')
video = VideoFileClip('test.avi')
video.write_gif('test.gif', fps=24)
if __name__ == '__main__':
ms = []
ms += ['Dog']
ms += ['Cat Cat']
my_func(ms)
This is the result that I get:
Does anybody know why do I have problems with cats?
To be written to a file, all the frames must have the same size. Here you frames with Dog are smaller that the frames with CatCat, which spoils the video. A first solution is to use the method "compose" in concatenate_videoclips, this will give the same size to all clips:
A second solution is to give the same size (width, height) to all of your text clips: