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()