Aliashraf commited on
Commit
f404377
·
verified ·
1 Parent(s): 8a23394

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +11 -8
app.py CHANGED
@@ -5,11 +5,13 @@ import cv2
5
  import numpy as np
6
  from PIL import Image, ImageDraw, ImageFont
7
  import os
 
 
8
 
9
  app = FastAPI()
10
 
11
  # Function to split the script into smaller chunks
12
- def split_script(script: str, max_words: int = 50):
13
  words = script.split()
14
  chunks = [" ".join(words[i:i + max_words]) for i in range(0, len(words), max_words)]
15
  return chunks
@@ -19,7 +21,7 @@ def create_video_segment(script_chunk: str, background_color: str, text_color: s
19
  try:
20
  # Step 1: Convert script chunk to audio using gTTS
21
  tts = gTTS(script_chunk)
22
- audio_file = "output_audio.mp3"
23
  tts.save(audio_file)
24
 
25
  # Step 2: Create a blank image with text
@@ -48,7 +50,7 @@ def create_video_segment(script_chunk: str, background_color: str, text_color: s
48
  frame = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR)
49
 
50
  # Step 3: Create a video segment with the image and audio
51
- video_segment_file = f"video_segment_{len(os.listdir())}.mp4"
52
  fps = 24
53
  fourcc = cv2.VideoWriter_fourcc(*"mp4v")
54
  video_writer = cv2.VideoWriter(video_segment_file, fourcc, fps, (width, height))
@@ -105,11 +107,12 @@ async def generate_video(script: str, background_color: str = "#000000", text_co
105
  # Step 1: Split the script into smaller chunks
106
  script_chunks = split_script(script)
107
 
108
- # Step 2: Generate video segments for each chunk
109
- video_segment_files = []
110
- for chunk in script_chunks:
111
- video_segment = create_video_segment(chunk, background_color, text_color, font_size)
112
- video_segment_files.append(video_segment)
 
113
 
114
  # Step 3: Combine video segments into a single video
115
  final_video_file = combine_video_segments(video_segment_files)
 
5
  import numpy as np
6
  from PIL import Image, ImageDraw, ImageFont
7
  import os
8
+ from concurrent.futures import ThreadPoolExecutor
9
+ import asyncio
10
 
11
  app = FastAPI()
12
 
13
  # Function to split the script into smaller chunks
14
+ def split_script(script: str, max_words: int = 30):
15
  words = script.split()
16
  chunks = [" ".join(words[i:i + max_words]) for i in range(0, len(words), max_words)]
17
  return chunks
 
21
  try:
22
  # Step 1: Convert script chunk to audio using gTTS
23
  tts = gTTS(script_chunk)
24
+ audio_file = f"output_audio_{os.urandom(4).hex()}.mp3"
25
  tts.save(audio_file)
26
 
27
  # Step 2: Create a blank image with text
 
50
  frame = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR)
51
 
52
  # Step 3: Create a video segment with the image and audio
53
+ video_segment_file = f"video_segment_{os.urandom(4).hex()}.mp4"
54
  fps = 24
55
  fourcc = cv2.VideoWriter_fourcc(*"mp4v")
56
  video_writer = cv2.VideoWriter(video_segment_file, fourcc, fps, (width, height))
 
107
  # Step 1: Split the script into smaller chunks
108
  script_chunks = split_script(script)
109
 
110
+ # Step 2: Generate video segments in parallel
111
+ with ThreadPoolExecutor() as executor:
112
+ video_segment_files = list(executor.map(
113
+ lambda chunk: create_video_segment(chunk, background_color, text_color, font_size),
114
+ script_chunks
115
+ ))
116
 
117
  # Step 3: Combine video segments into a single video
118
  final_video_file = combine_video_segments(video_segment_files)