Update app.py
Browse files
app.py
CHANGED
@@ -1,3 +1,4 @@
|
|
|
|
1 |
import gradio as gr
|
2 |
from datetime import datetime
|
3 |
import random
|
@@ -222,6 +223,27 @@ def update_translations(file, edited_table):
|
|
222 |
except Exception as e:
|
223 |
raise ValueError(f"Error updating translations: {e}")
|
224 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
225 |
def add_transcript_voiceover(video_path, translated_json, output_path, add_voiceover=False, target_language="en"):
|
226 |
"""
|
227 |
Add transcript and voiceover to a video, segment by segment.
|
|
|
1 |
+
import concurrent.futures
|
2 |
import gradio as gr
|
3 |
from datetime import datetime
|
4 |
import random
|
|
|
223 |
except Exception as e:
|
224 |
raise ValueError(f"Error updating translations: {e}")
|
225 |
|
226 |
+
def process_entry(entry, i, add_voiceover, target_language):
|
227 |
+
logger.debug(f"Processing entry {i}: {entry}")
|
228 |
+
|
229 |
+
# Create text clip for subtitles
|
230 |
+
txt_clip = TextClip(
|
231 |
+
text=entry["translated"],
|
232 |
+
font="./NotoSansSC-Regular.ttf",
|
233 |
+
method='caption',
|
234 |
+
color='yellow',
|
235 |
+
font_size=int(video.h // 15),
|
236 |
+
size=(int(video.w * 0.8), None)
|
237 |
+
).with_start(entry["start"]).with_duration(entry["end"] - entry["start"]).with_position(('bottom')).with_opacity(0.7)
|
238 |
+
|
239 |
+
audio_segment = None
|
240 |
+
if add_voiceover:
|
241 |
+
segment_audio_path = f"segment_{i}_voiceover.wav"
|
242 |
+
generate_voiceover([entry], target_language, segment_audio_path)
|
243 |
+
audio_segment = AudioFileClip(segment_audio_path).set_duration(entry["end"] - entry["start"]) # No subclip here
|
244 |
+
|
245 |
+
return txt_clip, audio_segment
|
246 |
+
|
247 |
def add_transcript_voiceover(video_path, translated_json, output_path, add_voiceover=False, target_language="en"):
|
248 |
"""
|
249 |
Add transcript and voiceover to a video, segment by segment.
|