15

moviepy を使用して、テキスト付きのビデオを生成しようとしています。まず、1 つのメッセージを表示し、次に別のメッセージを表示します。私の場合、「Dog」を 1 秒間表示してから、「Cat Cat」を表示したいと考えています。そのために、次のコードを使用します。

moviepy.editor インポートから *

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)

これは私が得る結果です:

ここに画像の説明を入力

なぜ私が猫に問題があるのか​​ 知っている人はいますか?

4

1 に答える 1

23

ファイルに書き込むには、すべてのフレームが同じサイズでなければなりません。ここで、Dog のフレームは CatCat のフレームよりも小さく、ビデオが損なわれます。最初の解決策は、concatenate_videoclips で「compose」メソッドを使用することです。これにより、すべてのクリップが同じサイズになります。

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

2 番目の解決策は、すべてのテキスト クリップに同じサイズ (幅、高さ) を与えることです。

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")
于 2015-02-27T07:20:53.160 に答える