import gradio as gr from PIL import Image import numpy as np import cv2 import os def image_to_video(image): # PIL 이미지를 NumPy 배열로 변환하고, RGB 형식으로 변환 image_array = np.array(image.convert('RGB')) # OpenCV는 BGR 형식을 사용하므로 RGB에서 BGR로 색상 채널을 재정렬 image_array = cv2.cvtColor(image_array, cv2.COLOR_RGB2BGR) output_path = 'output_video.mp4' if not os.path.exists('output'): os.makedirs('output') output_path = os.path.join('output', output_path) height, width, layers = image_array.shape size = (width, height) fourcc = cv2.VideoWriter_fourcc(*'mp4v') video = cv2.VideoWriter(output_path, fourcc, 30, size) if not video.isOpened(): print("비디오 작성자가 파일을 열지 못했습니다.") return None for _ in range(150): # 총 150 프레임 생성 video.write(image_array) video.release() return output_path def setup_interface(): with gr.Blocks() as demo: gr.Markdown("### 이미지를 업로드하면 5초짜리 비디오를 생성합니다.") with gr.Row(): image_input = gr.Image(type="pil") video_output = gr.Video(label="생성된 비디오") image_input.change(image_to_video, inputs=image_input, outputs=video_output) return demo demo = setup_interface() demo.launch()