создание видео с использованием moviepy с использованием изображения и текста, но получение ОШИБКИ, например size = clips [0] .size AttributeError: у объекта «list» нет атрибута «size» - PullRequest
0 голосов
/ 02 мая 2020
import glob
import os
from natsort import natsorted
from moviepy.editor import *

base_dir = os.path.realpath("./images/")
print(base_dir)

gif_name = 'pic'
fps = 24

file_list = glob.glob('./images/*.jpg')  # Get all the pngs in the current directory
file_list_sorted = natsorted(file_list,reverse=False)  # Sort the images

clips = [ImageClip(m).set_duration(5)
         for m in file_list_sorted]
print (clips)



text_list = ["Piggy", "Kermit", "Gonzo", "Fozzie"]
clip_list = []

for text in text_list:
    try:
        txt_clip = ( TextClip(text, fontsize = 70, color = 'white').set_duration(2))
        clip_list.append(txt_clip)
    except UnicodeEncodeError:
        txt_clip = TextClip("Issue with text", fontsize = 70, color = 'white').set_duration(2)
        clip_list.append(txt_clip)
print(clip_list)


final_clip = CompositeVideoClip([clips, clip_list])
final_clip.write_videofile("./video/export.mp4", fps = 24, codec = 'mpeg4')

Но при получении ОШИБКИ, например size = clips [0] .size AttributeError: у объекта «list» нет атрибута «size», мне нужно отобразить изображение для первых 15se c и после 15 se c текст должен будет отображаться 10 се c.

1 Ответ

0 голосов
/ 09 мая 2020

Привет, спасибо за размещение вопроса. Надеюсь, это будет полезно.

Ваша основная ошибка касается следующей строки:

final_clip = CompositeVideoClip([clips, clip_list])

CompositeVideoClip.__init__ ожидает список типа Clip (CompositeVideoClip наследует класс Clip). Тем не менее, в ваших предыдущих строках:

print(clips)
...
print(clip_list)

, поэтому то, что вы эффективно передали методу CompositeVideoClip.__init__, является вложенным списком. Поэтому вместо этого вы должны сделать что-то вроде следующего:

final_clip = CompositeVideoClip(clips + clip_list)

Я уверен, что вы можете придумать более элегантное решение, это рабочее решение для начала. Пишите дальше, если мое предложение не работает.

...