fact-video-genD / app.py
Djataki's picture
Update app.py
a0f1de6 verified
import gradio as gr
from transformers import pipeline
from gtts import gTTS
from PIL import Image, ImageDraw, ImageFont
import numpy as np
import cv2
import os
import uuid
# Создание папки
os.makedirs("videos", exist_ok=True)
# Генератор текстов
generator = pipeline("text-generation", model="sberbank-ai/rugpt3small_based_on_gpt2")
used_ideas = set()
def generate_video():
global used_ideas
# Генерация уникальной идеи
while True:
idea = generator("Идея для короткого видео: ", max_length=60, num_return_sequences=1)[0]['generated_text']
idea = idea.strip().split(".")[0]
if idea not in used_ideas and len(idea) > 20:
used_ideas.add(idea)
break
# Сохраняем аудио
audio_path = f"videos/{uuid.uuid4().hex}.mp3"
gTTS(idea, lang="ru").save(audio_path)
# Создаём изображение
img = Image.new("RGB", (1080, 1920), color="black")
draw = ImageDraw.Draw(img)
font = ImageFont.load_default()
draw.text((50, 900), idea, font=font, fill="white")
img_np = np.array(img)
# Конвертируем в видео (6 сек, 30 fps)
video_path = f"videos/{uuid.uuid4().hex}.mp4"
out = cv2.VideoWriter(video_path, cv2.VideoWriter_fourcc(*'mp4v'), 30, (1080, 1920))
for _ in range(180):
out.write(cv2.cvtColor(img_np, cv2.COLOR_RGB2BGR))
out.release()
return video_path, idea
# Интерфейс
with gr.Blocks() as demo:
out_text = gr.Textbox(label="🧠 Идея")
out_video = gr.Video(label="🎥 Видео")
gen_btn = gr.Button("🎬 Сгенерировать")
gen_btn.click(fn=generate_video, inputs=[], outputs=[out_video, out_text])
demo.launch()