| # -*- coding: utf-8 -*- | |
| # Copyright (c) XiMing Xing. All rights reserved. | |
| # Author: XiMing Xing | |
| # Description: | |
| from typing import Any, Union | |
| import pathlib | |
| import cv2 | |
| def create_video(num_iter: int, | |
| save_dir: Union[Any, pathlib.Path], | |
| video_frame_freq: int = 1, | |
| fname: str = "rendering_process", | |
| verbose: bool = True): | |
| if not isinstance(save_dir, pathlib.Path): | |
| save_dir = pathlib.Path(save_dir) | |
| img_array = [] | |
| for i in range(0, num_iter): | |
| if i % video_frame_freq == 0 or i == num_iter - 1: | |
| filename = save_dir / f"iter{i}.png" | |
| img = cv2.imread(filename.as_posix()) | |
| img_array.append(img) | |
| video_name = save_dir / f"{fname}.mp4" | |
| out = cv2.VideoWriter( | |
| video_name.as_posix(), | |
| cv2.VideoWriter_fourcc(*'mp4v'), | |
| 30.0, # fps | |
| (600, 600) # video size | |
| ) | |
| for iii in range(len(img_array)): | |
| out.write(img_array[iii]) | |
| out.release() | |
| if verbose: | |
| print(f"video saved in '{video_name}'.") | |