Spaces:
Runtime error
Runtime error
| 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.") | |