sample1 / video_creater.py
sreepathi-ravikumar's picture
Rename sample.py to video_creater.py
17901fc verified
raw
history blame
2.8 kB
import os
from gtts import gTTS
from mutagen.mp3 import MP3
from moviepy.editor import *
from PIL import Image, ImageDraw, ImageFont
def video_gen(TEXT):
# === SETTINGS ===
WIDTH, HEIGHT = 1280, 720
FONT_SIZE = 100
FONT_PATH = "/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf" # Change for Windows/Mac
FONT_COLOR = 'white'
IMAGE_PATH = "images"
TEMP_FRAME_PATH = "temp_frames"
AUDIO_FILE = "voice.mp3"
OUTPUT_VIDEO = "output_video.mp4"
# === STEP 1: Convert text to audio ===
def generate_audio(text, filename):
tts = gTTS(text, lang='ta')
tts.save(filename)
# === STEP 2: Get images ===
def get_images(folder):
return sorted([os.path.join(folder, f)
for f in os.listdir(folder)
if f.lower().endswith(('.jpg', '.jpeg', '.png'))])
# === STEP 3: Create text-overlay images using Pillow ===
def create_text_image(background_img, text, output_path):
img = Image.open(background_img).resize((WIDTH, HEIGHT))
draw = ImageDraw.Draw(img)
try:
font = ImageFont.truetype(FONT_PATH, FONT_SIZE)
except:
font = ImageFont.load_default() # Fallback if font fails
margin = 60
offset = 100
for line in text.split('\n'):
draw.text((margin, offset), line.strip(), font=font, fill=FONT_COLOR)
offset += FONT_SIZE + 10
img.save(output_path)
# === STEP 4: Create video slides ===
def create_video_slides(images, paragraphs, audio_duration):
os.makedirs(TEMP_FRAME_PATH, exist_ok=True)
clips = []
duration_per_slide = audio_duration / len(paragraphs)
for i, para in enumerate(paragraphs):
temp_image = os.path.join(TEMP_FRAME_PATH, f"frame_{i}.png")
create_text_image(images[i % len(images)], para, temp_image)
clip = ImageClip(temp_image).set_duration(duration_per_slide)
clips.append(clip)
return clips
# === MAIN ===
if __name__ == "__main__":
print("Generating audio...")
generate_audio(TEXT, AUDIO_FILE)
audio = AudioFileClip(AUDIO_FILE)
duration = MP3(AUDIO_FILE).info.length
print("Preparing images...")
images = get_images(IMAGE_PATH)
paragraphs = [p.strip() for p in TEXT.strip().split("\n\n") if p.strip()]
print("Creating video slides...")
video_clips = create_video_slides(images, paragraphs, duration)
print("Finalizing video...")
final_video = concatenate_videoclips(video_clips).set_audio(audio)
final_video.write_videofile(OUTPUT_VIDEO, fps=24)
print("Done! Output saved to:", OUTPUT_VIDEO)