wower99's picture
youtube-short-generator:v1
b3081c2
raw
history blame
2.87 kB
import streamlit as st
import os
import re
from youtube_short_generator import YoutubeShortGenerator
def main():
st.title("YouTube Shorts Generator πŸŽ₯")
st.write("Generate AI-powered YouTube Shorts by just entering a title!")
# User Input
video_title = st.text_input("Enter Video Title:", "Top 3 Marvel Superheroes")
if st.button("Generate Video"):
if video_title.strip():
# Validate that the title starts with "Top 3" or "Top 5" (case-insensitive)
pattern = r"^top\s*(3|5)\b"
if not re.match(pattern, video_title.strip(), re.IGNORECASE):
st.warning("Please start the title with 'Top 3' or 'Top 5'.")
return
st.info("Starting video generation process...")
try:
# Initialize Generator
yt_generator = YoutubeShortGenerator()
with st.spinner("Analyzing title and extracting keywords..."):
yt_generator.title_to_keywords(video_title)
st.info("Keywords extracted successfully!")
with st.spinner("Generating images..."):
yt_generator.generate_images()
st.info("Images generated successfully!")
with st.spinner("Overlaying text on images..."):
yt_generator.overlay_text_to_images()
st.info("Text overlay completed!")
with st.spinner("Generating audio clips..."):
yt_generator.generate_audio_clips()
st.info("Audio clips generated successfully!")
with st.spinner("Combining images and audio into video..."):
yt_generator.make_video()
st.info("Video is being finalized!")
# Get the generated video path
video_path = os.path.join(yt_generator.generated_video_dir, 'final_video.mp4')
if os.path.exists(video_path):
st.success("Video generated successfully!")
# Provide a download link
with open(video_path, "rb") as file:
st.download_button(
label="Download Video",
data=file,
file_name="youtube_short.mp4",
mime="video/mp4"
)
else:
st.error("Error: Video file not found.")
except Exception as e:
st.error(f"An error occurred: {e}")
else:
st.warning("Please enter a valid title.")
if __name__ == "__main__":
main()