|
import os |
|
import gradio as gr |
|
import ffmpeg |
|
|
|
def create_video_from_images(images_folder, frame_rate): |
|
|
|
images = [img for img in os.listdir(images_folder) if img.endswith(".jpg") or img.endswith(".jpeg") or img.endswith(".png")] |
|
images.sort() |
|
|
|
if not images: |
|
return "No images found in the folder." |
|
|
|
|
|
with open("input_images.txt", "w") as file: |
|
for img in images: |
|
file.write(f"file '{os.path.join(images_folder, img)}'\n") |
|
|
|
output_video = os.path.join(images_folder, "output_video.mp4") |
|
|
|
|
|
( |
|
ffmpeg |
|
.input("input_images.txt", format='concat', safe=0) |
|
.output(output_video, r=frame_rate, pix_fmt='yuv420p') |
|
.run(overwrite_output=True) |
|
) |
|
|
|
|
|
os.remove("input_images.txt") |
|
|
|
return output_video |
|
|
|
def gradio_interface(img_folder, frame_rate): |
|
return create_video_from_images(img_folder, frame_rate) |
|
|
|
iface = gr.Interface( |
|
fn=gradio_interface, |
|
inputs=[ |
|
gr.inputs.Folder(type="dir", label="Upload Folder with Images"), |
|
gr.inputs.Slider(minimum=1, maximum=60, default=30, label="Frame Rate (FPS)") |
|
], |
|
outputs="file", |
|
live=True |
|
) |
|
|
|
iface.launch() |