Spaces:
Running
Running
| 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() | |