File size: 1,655 Bytes
5244c19 3b213f1 0ebc3c4 3b213f1 3b6cf03 98acae8 5244c19 3b6cf03 98acae8 3b6cf03 580dcd1 3b6cf03 580dcd1 3b6cf03 98acae8 580dcd1 3b6cf03 98acae8 3b6cf03 98acae8 fa08cd8 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
import gradio as gr
import torch
import os
from torch import autocast
from diffusers import StableDiffusionPipeline
from moviepy.editor import AudioFileClip, ImageClip
from pathlib import Path
output_dir = Path("temp/")
output_dir.mkdir(exist_ok=True, parents=True)
os.chdir(output_dir)
def process_inputs(prompt, audio):
image = get_stable_diffusion_image(prompt)
video = add_static_image_to_audio(image, audio)
return video
def add_static_image_to_audio(image, audio):
"""Create and save a video file to `output_path` after
combining a static image that is located in `image_path`
with an audio file in `audio_path`"""
# create the audio clip object
audio_clip = AudioFileClip(audio)
# create the image clip object
image_clip = ImageClip(image)
# use set_audio method from image clip to combine the audio with the image
video_clip = image_clip.set_audio(audio_clip)
# specify the duration of the new clip to be the duration of the audio clip
video_clip.duration = audio_clip.duration
# set the FPS to 1
video_clip.fps = 1
# write the resuling video clip
path = "out.mp4"
video_clip.write_videofile(path)
return path
def get_stable_diffusion_image(prompt):
path = "temp/image_out.png"
stable_diffusion = gr.Blocks.load(name="spaces/stabilityai/stable-diffusion")
gallery_dir = stable_diffusion(prompt, fn_index=2)
# Rename gallery dir to sdout
return [os.path.join(gallery_dir, img) for img in os.listdir(gallery_dir)][0]
iface = gr.Interface(
fn=process_inputs, inputs=["text", gr.Audio(type="filepath")], outputs="video"
)
iface.launch()
|