LDM-SyntheticChestX-Ray / create_video.py
lfolle's picture
Changed to ffmpeg
dcf2dd9
raw history blame
No virus
1.53 kB
import numpy as np
import cv2
from PIL import Image
import ffmpeg
def noise_process(numpy_image, steps=149):
noisy_image_list = []
noisy_image = numpy_image
noisy_image_list.append(noisy_image)
for step in range(steps):
noise = 255 * np.random.normal(0, 0.07*(step+1) * 0.1, numpy_image.size).reshape(numpy_image.shape)
noisy_image = noisy_image + noise
noisy_image_list.append(noisy_image)
return noisy_image_list
def generate_video(numpy_image):
save_path = "result.mp4"
width = 256
height = 256
fps = 30
sec = 5
image_lst = noise_process(numpy_image)
image_lst = np.array([(i-np.min(i))/(np.max(i)-np.min(i)) for i in image_lst])
image_lst = np.round(image_lst * 255).astype(np.uint8)
copies = int((sec * fps) / len(image_lst))
spill_over = sec * fps - copies * len(image_lst)
image_lst = np.repeat(image_lst, copies, axis=0)
image_lst = np.concatenate((image_lst, image_lst[:spill_over]), axis=0)
image_lst = image_lst[::-1]
for i, img in enumerate(image_lst):
Image.fromarray(img).save(f"video/{i}.jpg")
ffmpeg.input('video/*.jpg', pattern_type='glob', framerate=25).output(save_path).run()
# fourcc = cv2.VideoWriter_fourcc(*'avc1')
# video = cv2.VideoWriter(save_path, fourcc, float(fps), (width, height))
# for frame_count in range(fps * sec):
# img = np.expand_dims(image_lst[frame_count], 2)
# video.write(img.astype(np.uint8))
# video.release()
return save_path