Smartlizardpy's picture
Create app.py
d113a04 verified
raw
history blame
2.51 kB
import streamlit as st
import os
import requests
from gtts import gTTS
from moviepy.editor import VideoFileClip, TextClip, CompositeVideoClip, AudioFileClip
def download_video(url, filename):
"""
Downloads a video from the specified URL and saves it as the given filename.
"""
response = requests.get(url, stream=True)
if response.status_code == 200:
with open(filename, 'wb') as file:
for chunk in response.iter_content(chunk_size=1024):
if chunk:
file.write(chunk)
print(f"Video downloaded successfully as {filename}")
else:
print("Failed to download video.")
def generate_video(text, background_video, output_video):
# Generate speech from text
tts = gTTS(text, lang='en')
audio_path = "output_audio.mp3"
tts.save(audio_path)
# Load video and audio
video = VideoFileClip(background_video)
audio = AudioFileClip(audio_path)
# Set video duration to match audio
video = video.subclip(0, min(video.duration, audio.duration))
video = video.set_audio(audio)
# Create text overlay
text_clip = TextClip(text, fontsize=50, color='white', font='Arial-Bold', bg_color='black')
text_clip = text_clip.set_duration(video.duration).set_position(('center', 'bottom'))
# Merge text overlay with video
final_clip = CompositeVideoClip([video, text_clip])
final_clip.write_videofile(output_video, codec='libx264', fps=24)
# Clean up temporary audio file
os.remove(audio_path)
# Streamlit UI
st.title("AI Video Creator with Subway Surfers Gameplay")
text_input = st.text_area("Enter text for the video")
background_video = "subway_surfers.mp4" # Local filename for the background video
output_video = "generated_video.mp4"
# URL of the Subway Surfers gameplay video
video_url = 'https://archive.org/download/rpreplay-final-1680875953/rpreplay-final-1680875953.mp4'
# Download the background video if it doesn't exist
if not os.path.exists(background_video):
st.write("Downloading background video...")
download_video(video_url, background_video)
if st.button("Generate Video"):
if text_input:
generate_video(text_input, background_video, output_video)
st.video(output_video)
with open(output_video, "rb") as file:
st.download_button(label="Download Video", data=file, file_name="ai_generated_video.mp4", mime="video/mp4")
else:
st.error("Please enter some text.")