File size: 2,091 Bytes
a0b6eea
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
63
64
import gradio as gr
from moviepy.editor import TextClip, CompositeVideoClip, AudioFileClip, ColorClip
from gtts import gTTS
import os

# Function to convert script to video
def script_to_video(script, background_color="black", text_color="white", font_size=50):
    # Step 1: Convert script to audio using gTTS
    tts = gTTS(script)
    audio_file = "output_audio.mp3"
    tts.save(audio_file)

    # Step 2: Load the audio file
    audio_clip = AudioFileClip(audio_file)
    audio_duration = audio_clip.duration

    # Step 3: Create a text clip with the script
    text_clip = TextClip(
        script,
        fontsize=font_size,
        color=text_color,
        size=(1280, 720),  # HD resolution
        method="caption",  # Automatically wrap text
        align="center",
        bg_color=background_color
    ).set_duration(audio_duration)

    # Step 4: Create a background clip
    background_clip = ColorClip(
        size=(1280, 720),
        color=[int(background_color.lstrip("#")[i:i+2], 16) for i in (0, 2, 4)]  # Convert hex to RGB
    ).set_duration(audio_duration)

    # Step 5: Combine text and background
    video_clip = CompositeVideoClip([background_clip, text_clip.set_position("center")])

    # Step 6: Add audio to the video
    video_clip = video_clip.set_audio(audio_clip)

    # Step 7: Save the video
    video_file = "output_video.mp4"
    video_clip.write_videofile(video_file, fps=24)

    # Clean up temporary audio file
    os.remove(audio_file)

    return video_file

# Gradio Interface
iface = gr.Interface(
    fn=script_to_video,
    inputs=[
        gr.Textbox(label="Enter your script", lines=10, placeholder="Type your script here..."),
        gr.ColorPicker(label="Background Color", value="#000000"),
        gr.ColorPicker(label="Text Color", value="#FFFFFF"),
        gr.Slider(label="Font Size", minimum=20, maximum=100, value=50)
    ],
    outputs=gr.Video(label="Generated Video"),
    title="Script to Video Generator",
    description="Convert your script into a video with text and audio."
)

# Launch the application
iface.launch()