2015-02-27 18 views
10

Ich versuche Moviepy zu verwenden, um Video mit Texten zu generieren. Zuerst möchte ich eine Nachricht und dann eine andere zeigen. In meinem Fall möchte ich "Dog" für eine Sekunde und dann "Cat Cat" zeigen. Dafür habe ich den folgenden Code:Wie verkette ich Videos in moviepy?

von 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) 

Dies ist das Ergebnis, das ich bekommen:

enter image description here

Weiß jemand, warum ich Probleme habe mit Katzen?

Antwort

12

Um in eine Datei geschrieben zu werden, müssen alle Frames die gleiche Größe haben. Hier sind Frames mit Dog kleiner, als die Frames mit CatCat, was das Video verdirbt. Eine erste Lösung besteht darin, die Methode „komponiert“ in concatenate_videoclips zu verwenden, wird dies die gleiche Größe auf alle Clips geben:

import moviepy.editor as mp 
messages = ["Dog", "Cat", "Duck", "Wolf"] 
clips = [ mp.TextClip(txt, fontsize=170, color='green').set_duration(1) 
      for txt in messages ] 
concat_clip = mp.concatenate_videoclips(clips, method="compose") 
concat_clip.write_videofile("texts.mp4") 

Eine zweite Lösung ist die gleiche Größe (Breite, Höhe), um alle Ihres Textes zu geben, Clips:

import moviepy.editor as mp 
messages = ["Dog", "Cat", "Duck", "Wolf"] 
clips = [ mp.TextClip(txt, fontsize=170, color='green', size=(500,300)) 
      .set_duration(1) 
      for txt in messages] 
concat_clip = mp.concatenate_videoclips(clips) 
concat_clip.write_videofile("texts.mp4") 
Verwandte Themen