text-2-video / app.py
saima730's picture
Rename text-2-video to app.py
98dc8a4 verified
raw
history blame
2.49 kB
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}")