|
import numpy as np |
|
import imageio |
|
from PIL import Image |
|
|
|
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 |
|
:param file_path: Path to output video, must end with .mp4 |
|
:param frames: List of PIL.Image objects |
|
:param fps: Desired frame rate |
|
:param reversed: if order of images to be reversed (default = True) |
|
""" |
|
if reversed == True: |
|
frames = frames[::-1] |
|
|
|
|
|
frames = [frame for frame in frames if frame.size == frames[0].size] |
|
|
|
|
|
writer = imageio.get_writer(file_path, fps=fps, macro_block_size=None) |
|
|
|
|
|
start_frames = [frames[0]] * start_frame_dupe_amount |
|
end_frames = [frames[-1]] * last_frame_dupe_amount |
|
|
|
|
|
for frame in start_frames: |
|
|
|
np_frame = np.array(frame) |
|
writer.append_data(np_frame) |
|
|
|
|
|
for frame in frames: |
|
np_frame = np.array(frame) |
|
writer.append_data(np_frame) |
|
|
|
|
|
for frame in end_frames: |
|
np_frame = np.array(frame) |
|
writer.append_data(np_frame) |
|
|
|
|
|
writer.close() |