text-to-video / app.py
venkatl's picture
Update app.py
0fd2950 verified
raw
history blame contribute delete
No virus
1.91 kB
import gradio as gr
from PIL import Image, ImageDraw, ImageFont
from gtts import gTTS
from moviepy.editor import ImageClip, AudioFileClip, concatenate_videoclips
import textwrap
import os
def create_video_from_text(text):
lines = text.split('\n')
clips = []
for line in lines:
# Create an image with text
img = Image.new('RGB', (1920, 1080), color = (73, 109, 137)) # Professional color background
d = ImageDraw.Draw(img)
fnt = ImageFont.truetype('/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf', 50)
wrapped_text = textwrap.wrap(line, width=20) # Adjust the width parameter as needed
y_text=50
for line1 in wrapped_text:
bbox = d.textbbox((0, 0), line1, font=fnt)
textwidth, textheight = bbox[2], bbox[3]
x= (img.width - textwidth) /2
d.text((x, y_text), line1, font=fnt, fill=(255, 255, 255)) # White text color
y_text += textheight
img.save('text.png')
# Convert text to speech
speech = gTTS(text=line, lang='en', slow=False)
speech.save("text.mp3")
# Create a video clip from the image
clip = ImageClip('text.png')
# Set the duration of the video clip to the duration of the audio file
audioclip = AudioFileClip('text.mp3')
videoclip = clip.set_duration(audioclip.duration)
# Add audio to the video clip
videoclip = videoclip.set_audio(audioclip)
clips.append(videoclip)
# Concatenate all video clips
final_clip = concatenate_videoclips(clips)
# Write the result to a file
final_clip.write_videofile("text.mp4", codec='libx264',fps=24)
os.remove("text.png")
os.remove("text.mp3")
return "text.mp4"
iface = gr.Interface(fn=create_video_from_text, inputs="text", outputs=gr.Video())
if __name__ == "__main__":
iface.launch()