backendprocessfast2 / video2.py
sreepathi-ravikumar's picture
Update video2.py
2e56512 verified
from moviepy.editor import *
from PIL import Image
import pytesseract
import numpy as np
from gtts import gTTS
from mutagen.mp3 import MP3
import uuid
import os
from pathlib import Path
import rust_highlight
import rust_combiner
import shutil
# Use /app/data which we created with proper permissions
BASE_DIR = "/app/data"
IMAGE_DIR = "/tmp/images"
os.makedirs(IMAGE_DIR, exist_ok=True)
AUDIO_DIR = os.path.join(BASE_DIR, "sound")
CLIPS_DIR = os.path.join(BASE_DIR, "video")
# Create directories (no chmod needed)
for path in [BASE_DIR, AUDIO_DIR, CLIPS_DIR]:
Path(path).mkdir(parents=True, exist_ok=True)
# Generate audio
def audio_func(id,lines):
tts = gTTS(text=lines[id], lang='en', slow=False)
audio_name = "audio"+str(id)+".mp3"
audio_path=os.path.join(AUDIO_DIR,audio_name)
tts.save(audio_path)
if os.path.exists(audio_path):
audio = MP3(audio_path)
duration = audio.info.length
return duration,audio_path
# --- CONFIGURATION ---
def video_func(id, lines):
duration, audio_path = audio_func(id, lines)
image_path = os.path.join(IMAGE_DIR, f"slide{id}.png")
img = Image.open(image_path)
data = pytesseract.image_to_data(img, output_type=pytesseract.Output.DICT)
words = []
for i in range(len(data['text'])):
txt = data['text'][i].strip()
if txt and int(data['conf'][i]) > 60:
box = (
data['left'][i],
data['top'][i],
data['width'][i],
data['height'][i],
)
words.append((txt, box))
clip_file = rust_highlight.render_video(
id=id,
image_path=image_path,
audio_path=audio_path,
duration=duration,
words=words,
output_dir=CLIPS_DIR # Add your output directory here
)
print(f"Created {clip_file}")
def video_com(lines):
video_path = f"/tmp/video_{uuid.uuid4().hex}.mp4"
clips = []
for id in range(len(lines)):
clip = f"/app/data/video/clip{id}.mp4"
clips.append(clip)
video_path = rust_combiner.combine_clips(clips)
return video_path