Spaces:
Sleeping
Sleeping
File size: 3,001 Bytes
73c0be0 74faf6c 73c0be0 74faf6c 73c0be0 74faf6c 73c0be0 74faf6c 73c0be0 74faf6c 73c0be0 74faf6c 348ac11 74faf6c 348ac11 74faf6c 348ac11 73c0be0 74faf6c 73c0be0 74faf6c 73c0be0 74faf6c 73c0be0 74faf6c 73c0be0 74faf6c |
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 54 55 56 57 58 59 60 61 62 63 64 65 66 |
import gradio as gr
import torch
import soundfile as sf
import numpy as np
from diffusers import StableVideoDiffusionPipeline
from transformers import MusicgenForConditionalGeneration, MusicgenProcessor
# Определяем устройство (GPU, если доступен)
device = "cuda" if torch.cuda.is_available() else "cpu"
# Загружаем модель для генерации видео (Stable Video Diffusion)
video_pipe = StableVideoDiffusionPipeline.from_pretrained(
"stabilityai/stable-video-diffusion-img2vid",
torch_dtype=torch.float16 if device == "cuda" else torch.float32
).to(device)
# Загружаем модель для генерации музыки (MusicGen)
music_model = MusicgenForConditionalGeneration.from_pretrained("facebook/musicgen-small")
music_processor = MusicgenProcessor.from_pretrained("facebook/musicgen-small")
# Функция генерации видео
def generate_video(prompt):
# ❗ Stable Video Diffusion требует изображение, а не текст ❗
init_image = video_pipe.text_to_image(prompt, num_inference_steps=25).images[0] # Генерация стартового кадра
video_frames = video_pipe(init_image, num_inference_steps=25).frames # Генерация видео
# Сохранение видео
video_path = "generated_video.mp4"
video_pipe.save_video(video_frames, video_path, fps=15)
return video_path
# Функция генерации музыки
def generate_music(prompt):
inputs = music_processor(text=[prompt], return_tensors="pt") # Правильная передача текста
audio_output = music_model.generate(**inputs) # Генерация аудио
# Декодирование аудиовыхода
audio_array = audio_output[0].cpu().detach().numpy().squeeze()
# Сохранение аудио в файл
audio_path = "generated_audio.wav"
sf.write(audio_path, audio_array, samplerate=16000) # Правильная запись WAV
return audio_path
# Интерфейс Gradio
with gr.Blocks() as demo:
gr.Markdown("# OnlyReels.AI 🎥🎵 - Генерация видео с музыкой")
with gr.Row():
prompt_input = gr.Textbox(label="Введите описание видео и музыки", placeholder="Пример: Киберпанк-город ночью, синтезаторная музыка")
with gr.Row():
btn_video = gr.Button("🎬 Сгенерировать видео")
btn_music = gr.Button("🎵 Сгенерировать музыку")
video_output = gr.Video(label="Сгенерированное видео")
music_output = gr.Audio(label="Сгенерированная музыка")
btn_video.click(fn=generate_video, inputs=prompt_input, outputs=video_output)
btn_music.click(fn=generate_music, inputs=prompt_input, outputs=music_output)
# Запуск интерфейса
demo.launch()
|