Fixed issue where double wide frames get injected into the frame array.

pull/50/head
jmsether 2023-04-21 19:21:53 -06:00
parent 660aca308e
commit 318206ab11
2 changed files with 27 additions and 5 deletions

View File

@ -16,8 +16,14 @@ def shrink_and_paste_on_blank(current_image, mask_width, mask_height):
new_height = height - 2 * mask_height
# resize and paste onto blank image
prev_image = current_image.resize((new_width, new_height))
prev_image = current_image.resize((new_width, new_height), Image.LANCZOS)
blank_image = Image.new("RGBA", (width, height), (0, 0, 0, 1))
blank_image.paste(prev_image, (mask_width, mask_height))
paste_box = (
mask_width,
mask_height,
mask_width + new_width,
mask_height + new_height
)
blank_image.paste(prev_image, paste_box)
return blank_image

View File

@ -2,6 +2,12 @@ import numpy as np
import imageio
from PIL import Image
def closest_upper_divisible_by_eight(num):
if num % 8 == 0:
return num
else:
return math.ceil(num / 8) * 8
def write_video(file_path, frames, fps, reversed=True, start_frame_dupe_amount=15, last_frame_dupe_amount=30):
"""
Writes frames to an mp4 video file
@ -13,9 +19,19 @@ def write_video(file_path, frames, fps, reversed=True, start_frame_dupe_amount=1
if reversed == True:
frames = frames[::-1]
# Get dimensions of the first frames, all subsequent has to be same sized
for k in frames:
assert (k.size == frames[0].size,"Different frame sizes found!")
first_frame_size = frames[0].size
even_frame_size = (closest_upper_divisible_by_eight(first_frame_size[0]), closest_upper_divisible_by_eight(first_frame_size[1]))
# Drop random garbage frames that are outsize of the requested generation size to prevent ffmpeg from throwing an error.
filtered_frames = [frame for frame in frames if frame.size == first_frame_size]
frames = filtered_frames
# Resize all frames to the even dimensions
#resized_frames = [frame.resize(even_frame_size, Image.ANTIALIAS) for frame in frames]
#frames = resized_frames
#frames.pop()
# Create an imageio video writer, avoid block size of 512.
writer = imageio.get_writer(file_path, fps=fps, macro_block_size=None)