File size: 2,251 Bytes
ecb6a12
0e3b73c
9fd9741
 
 
 
 
 
0e3b73c
ecb6a12
 
 
 
 
 
 
 
 
 
 
 
0e3b73c
ecb6a12
 
 
0e3b73c
ecb6a12
 
 
0e3b73c
 
 
ecb6a12
0e3b73c
 
ecb6a12
 
0e3b73c
ecb6a12
 
0e3b73c
 
ecb6a12
 
0e3b73c
ecb6a12
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import gradio as gr
import asyncio
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

SAMPLE_FILE_NAME = "audio_tts.wav"
VIDEO_SERVER = "pexel"

async def process_topic(topic):
    # Generate script from topic
    response = generate_script(topic)
    print("Script:", response)
    
    # Generate audio from script
    await generate_audio(response, SAMPLE_FILE_NAME)
    
    # Generate timed captions from audio
    timed_captions = generate_timed_captions(SAMPLE_FILE_NAME)
    print("Timed Captions:", timed_captions)
    
    # Generate video search queries based on the script and captions
    search_terms = getVideoSearchQueriesTimed(response, timed_captions)
    print("Search Terms:", search_terms)
    
    # Get background video URLs
    background_video_urls = None
    if search_terms is not None:
        background_video_urls = generate_video_url(search_terms, VIDEO_SERVER)
        print("Background Video URLs:", background_video_urls)
    else:
        print("No background video")
    
    # Merge empty intervals
    background_video_urls = merge_empty_intervals(background_video_urls)
    
    # Generate the final video
    if background_video_urls is not None:
        video = get_output_media(SAMPLE_FILE_NAME, timed_captions, background_video_urls, VIDEO_SERVER)
        print("Generated Video:", video)
        return video
    else:
        print("No video generated")
        return "No video generated"

def generate_video(topic):
    video_url = asyncio.run(process_topic(topic))
    return video_url

with gr.Blocks() as demo:
    gr.Markdown("# Video Generator from Topic")
    topic_input = gr.Textbox(label="Enter the Topic", placeholder="Type a topic for the video...")
    output_video = gr.Video(label="Generated Video")
    generate_btn = gr.Button("Generate Video")
    
    generate_btn.click(fn=generate_video, inputs=topic_input, outputs=output_video)

demo.launch()