gpt4 book ai didi

Python moviepy ImageClip() 生成损坏的文件

转载 作者:行者123 更新时间:2023-12-04 23:18:45 32 4
gpt4 key购买 nike

我有一个脚本,它将背景和句子组合成一张图像,然后从该图像创建一个 10 秒的剪辑。但是,即使正确创建了图像,大约 20% 的已创建剪辑已损坏。这是我使用的代码:

file = open(f"quotes/{genre}.json")
quotes = json.load(file)

# Create a TEMP folder to save the images
os.mkdir("clips")

clips = list()
for i in range(imagesNeeded):
# Get quote, background and font
quote = random.choice(quotes)
background = random.choice(os.listdir(f"./backgrounds/{genre}"))
font = random.choice(os.listdir(f"./fonts"))

#Video size 1920x1080 16:9
# Open image and resize to ratio
image = Image.open(f'./backgrounds/{genre}/{background}')
image_editable = ImageDraw.Draw(image)

#resize quote so it will fit the image
font_size = 200
new_quote, width, height = resizequote(quote, image, font_size)

title_font = ImageFont.truetype(f"./fonts/{font}", font_size)
w, h = image_editable.textsize(new_quote,font=title_font)

image_editable.text((0.5*(width-w),0.5*(height-h)), new_quote, (255, 255, 255), font=title_font)

#Create the clip
numpydata = asarray(image)
clip = ImageClip(numpydata).set_duration(10)
filename = ''.join(random.choice([chr(i) for i in range(ord('a'),ord('z'))]) for _ in range(20))
clip.write_videofile(f"clips/{filename}.mp4", fps=24, threads=8)
print(f"Background: {background}")
print(f"Quote: {quote}")
print(f"Font: {font}")

clips.append(clip)
print(f"Created {i} clips")

对于我使用 .ttf 文件的字体。我试过只使用 1 个单一的 ttf 文件,但仍然给出了一些损坏的文件,所以我得出的结论是这不可能是问题。这里使用的所有背景都是 .jpg 文件,所有引号只是存储在 JSON 文件中的字符串。我之前尝试过保存每张图像,但仍然从 ImageClip() 函数中获得相同的行为。
我的功能中有什么可能导致这种情况吗?或者有解决方法吗?我什至会使用不同的库来创建剪辑,并且最好将它们连接到一个视频中。

最佳答案

def create_video(genre, audioLength, audio):
imagesNeeded = math.ceil(audioLength/10)
print(f"Creating {imagesNeeded} clips")

file = open(f"quotes/{genre}.json")
quotes = json.load(file)

# Create a TEMP folder to save the images
os.mkdir("clips")

clips = list()
for i in range(imagesNeeded):
# Get quote, background and font
quote = random.choice(quotes)
background = random.choice(os.listdir(f"./backgrounds/{genre}"))
font = random.choice(os.listdir(f"./fonts"))

#Video size 1920x1080 16:9
# Open image and resize to ratio
image = Image.open(f'./backgrounds/{genre}/{background}')
image_editable = ImageDraw.Draw(image)

#resize quote so it will fit the image
font_size = 200
new_quote, width, height = resizequote(quote, image, font_size)

title_font = ImageFont.truetype(f"./fonts/{font}", font_size)
w, h = image_editable.textsize(new_quote,font=title_font)

image_editable.text((0.5*(width-w),0.5*(height-h)), new_quote, (255, 255, 255), font=title_font)

#Create the clip
numpydata = asarray(image)
clip = ImageClip(numpydata).set_duration(10).resize( (1920,1080) )
filename = ''.join(random.choice([chr(i) for i in range(ord('a'),ord('z'))]) for _ in range(15))
clip.write_videofile(f"clips/{filename}.mp4", fps=24, threads=8)

clips.append(clip)
print(f"Created {i} clips")
上面的代码有效并且非常快。我使用了 resize() 方法,这使我能够非常快速地将所有内容组合在一起。我还发现我使用的一些背景始终会生成损坏的剪辑。为什么会这样,我不知道,但删除它们后它可以工作。

关于Python moviepy ImageClip() 生成损坏的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71198434/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com