text-2-video / app.py
saima730's picture
Rename text-2-video to app.py
98dc8a4 verified
import streamlit as st
from transformers import pipeline
from gtts import gTTS
import moviepy.editor as mp
from PIL import Image, ImageDraw, ImageFont
import os
# Streamlit setup
st.title("AI Video Learning Chatbot")
# User input for the learning topic
prompt = st.text_input("Enter a learning topic:")
if st.button("Generate Video"):
try:
# Step 1: Generate Text from Prompt using GPT-2
st.write("Generating text response...")
text_generator = pipeline('text-generation', model='gpt2')
generated_text = text_generator(prompt, max_length=50)[0]['generated_text']
st.write(f"Generated Text: {generated_text}")
# Step 2: Convert Generated Text to Speech using gTTS
st.write("Converting text to speech...")
tts = gTTS(generated_text)
tts.save("audio.mp3")
# Step 3: Create Multiple Frames with Text Animation
st.write("Generating animated frames for video...")
num_frames = 30 # Number of frames in the video
frame_duration = 0.1 # Duration per frame in seconds
image_size = (640, 480)
frames = []
for i in range(num_frames):
image = Image.new('RGB', image_size, color='black')
draw = ImageDraw.Draw(image)
font = ImageFont.load_default()
# Animate text position
text = generated_text
text_position = (0, 20 + i * 10 % 400) # Move text down over frames
draw.text(text_position, text, fill="white", font=font)
frame_path = f"frame_{i:03d}.png"
image.save(frame_path)
frames.append(mp.ImageClip(frame_path).set_duration(frame_duration))
# Combine frames into a video
video_clip = mp.concatenate_videoclips(frames, method="compose")
audio_clip = mp.AudioFileClip("audio.mp3")
video_clip = video_clip.set_audio(audio_clip)
# Save the video with fps set to 24
video_clip.write_videofile("output.mp4", codec="libx264", fps=24)
# Display the video
st.write("Video generated successfully!")
st.video("output.mp4")
# Clean up temporary files
for frame_path in [f"frame_{i:03d}.png" for i in range(num_frames)]:
os.remove(frame_path)
os.remove("audio.mp3")
os.remove("output.mp4")
except Exception as e:
st.error(f"An error occurred: {e}")