Spaces:
Runtime error
Runtime error
| import gradio as gr | |
| from openai import OpenAI | |
| import os | |
| import edge_tts | |
| import json | |
| import asyncio | |
| import whisper_timestamped as whisper | |
| from utility.script_generator import generate_script | |
| from utility.audio_generator import generate_audio | |
| from utility.timed_captions_generator import generate_timed_captions | |
| from utility.background_video_generator import generate_video_url | |
| from utility.render_engine import get_output_media | |
| from utility.video_search_query_generator import getVideoSearchQueriesTimed, merge_empty_intervals | |
| async def generate_video(topic, progress=gr.Progress()): | |
| try: | |
| # Ensure audio directory exists | |
| os.makedirs("audio", exist_ok=True) | |
| SAMPLE_FILE_NAME = os.path.join("audio", "audio_tts.wav") | |
| VIDEO_SERVER = "pexel" | |
| progress(0.1, desc="Generating script...") | |
| response = generate_script(topic) | |
| progress(0.3, desc="Generating audio...") | |
| await generate_audio(response, SAMPLE_FILE_NAME) | |
| progress(0.5, desc="Generating captions...") | |
| timed_captions = generate_timed_captions(SAMPLE_FILE_NAME) | |
| progress(0.6, desc="Generating search terms...") | |
| search_terms = getVideoSearchQueriesTimed(response, timed_captions) | |
| if search_terms is not None: | |
| progress(0.7, desc="Fetching background videos...") | |
| background_video_urls = generate_video_url(search_terms, VIDEO_SERVER) | |
| background_video_urls = merge_empty_intervals(background_video_urls) | |
| if background_video_urls is not None: | |
| progress(0.9, desc="Rendering final video...") | |
| video = get_output_media(SAMPLE_FILE_NAME, timed_captions, background_video_urls, VIDEO_SERVER) | |
| return video, "Video generated successfully!" | |
| return None, "Failed to generate video. No suitable background videos found." | |
| except Exception as e: | |
| return None, f"Error: {str(e)}" | |
| # Create Gradio interface | |
| def create_interface(): | |
| with gr.Blocks(theme=gr.themes.Soft()) as demo: | |
| gr.Markdown( | |
| """ | |
| # AI Video Generator | |
| Generate engaging videos from any topic using AI | |
| """ | |
| ) | |
| with gr.Row(): | |
| with gr.Column(): | |
| topic_input = gr.Textbox( | |
| label="Enter Your Topic", | |
| placeholder="E.g., The history of artificial intelligence", | |
| lines=2 | |
| ) | |
| generate_btn = gr.Button("Generate Video", variant="primary") | |
| with gr.Column(): | |
| output_video = gr.Video(label="Generated Video") | |
| status_text = gr.Textbox(label="Status", interactive=False) | |
| generate_btn.click( | |
| fn=generate_video, | |
| inputs=[topic_input], | |
| outputs=[output_video, status_text] | |
| ) | |
| gr.Markdown( | |
| """ | |
| ### How it works: | |
| 1. Enter a topic you want to create a video about | |
| 2. Click 'Generate Video' | |
| 3. Wait while the AI generates the script, audio, and matches appropriate visuals | |
| 4. Download your finished video! | |
| """ | |
| ) | |
| return demo | |
| if __name__ == "__main__": | |
| demo = create_interface() | |
| demo.launch(share=True) | |