File size: 2,125 Bytes
3a89103
c9030d6
 
 
 
 
fad83e4
c9030d6
a9a000b
6643aa1
5d8bb2b
a15157a
5796090
a9a000b
 
7fee81b
 
40ff02c
 
c9030d6
a9a000b
7fee81b
a9a000b
21107e9
40ff02c
9441663
defc453
dad8135
9441663
 
 
 
 
 
adbd34d
defc453
 
62c0db4
 
 
 
 
ee90b65
62c0db4
 
 
 
 
 
 
 
 
 
 
b3b964d
62c0db4
6ad5936
 
 
 
 
 
62c0db4
 
9b9929d
 
 
 
 
58ced3b
9b9929d
 
5d8bb2b
 
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
65
66
67
68
69
70
71
72
73
74
75
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