Update app.py
Browse files
app.py
CHANGED
|
@@ -424,13 +424,14 @@ def process_entry(entry, i, tts_model, video_width, video_height, process_mode,
|
|
| 424 |
desired_duration = entry["end"] - entry["start"]
|
| 425 |
desired_speed = calibrated_speed(entry['translated'], desired_duration)
|
| 426 |
|
| 427 |
-
|
| 428 |
-
|
| 429 |
-
|
|
|
|
| 430 |
generate_voiceover_clone(entry['translated'], tts_model, desired_speed, target_language, speaker_wav_path, segment_audio_path)
|
| 431 |
|
| 432 |
else:
|
| 433 |
-
generate_voiceover_OpenAI(entry['translated'],
|
| 434 |
|
| 435 |
if not output_path or not os.path.exists(segment_audio_path):
|
| 436 |
raise FileNotFoundError(f"Voiceover file not generated at: {segment_audio_path}")
|
|
@@ -564,12 +565,8 @@ def generate_voiceover_OpenAI(full_text, language, desired_speed, output_audio_p
|
|
| 564 |
if retry_count == max_retries:
|
| 565 |
raise ValueError(f"Failed to generate voiceover after {max_retries} retries.")
|
| 566 |
|
| 567 |
-
def generate_voiceover_clone(full_text, tts_model, desired_speed, target_language, speaker_wav_path, output_audio_path
|
| 568 |
try:
|
| 569 |
-
if not speaker_wav_path or not os.path.exists(speaker_wav_path):
|
| 570 |
-
msg = f"❌ Speaker audio not found: {speaker_wav_path}"
|
| 571 |
-
logger.error(msg)
|
| 572 |
-
return None, msg, msg
|
| 573 |
|
| 574 |
tts_model.tts_to_file(
|
| 575 |
text=full_text,
|
|
@@ -579,19 +576,13 @@ def generate_voiceover_clone(full_text, tts_model, desired_speed, target_languag
|
|
| 579 |
speed=desired_speed,
|
| 580 |
split_sentences=True
|
| 581 |
)
|
| 582 |
-
|
| 583 |
-
if not os.path.exists(output_audio_path):
|
| 584 |
-
msg = f"❌ Voiceover file not generated at: {output_audio_path}"
|
| 585 |
-
logger.error(msg)
|
| 586 |
-
return None, msg, msg
|
| 587 |
-
|
| 588 |
msg = "✅ Voice cloning completed successfully."
|
| 589 |
logger.info(msg)
|
| 590 |
return output_audio_path, msg, None
|
| 591 |
|
| 592 |
except Exception as e:
|
| 593 |
-
|
| 594 |
-
|
| 595 |
logger.error(traceback.format_exc())
|
| 596 |
return None, err_msg, err_msg
|
| 597 |
|
|
|
|
| 424 |
desired_duration = entry["end"] - entry["start"]
|
| 425 |
desired_speed = calibrated_speed(entry['translated'], desired_duration)
|
| 426 |
|
| 427 |
+
speaker = entry.get("speaker", "default")
|
| 428 |
+
speaker_wav_path = f"speaker_{speaker}_sample.wav"
|
| 429 |
+
|
| 430 |
+
if use_clone and speaker_wav_path and os.path.exists(speaker_wav_path):
|
| 431 |
generate_voiceover_clone(entry['translated'], tts_model, desired_speed, target_language, speaker_wav_path, segment_audio_path)
|
| 432 |
|
| 433 |
else:
|
| 434 |
+
generate_voiceover_OpenAI(entry['translated'], target_language, desired_speed, segment_audio_path)
|
| 435 |
|
| 436 |
if not output_path or not os.path.exists(segment_audio_path):
|
| 437 |
raise FileNotFoundError(f"Voiceover file not generated at: {segment_audio_path}")
|
|
|
|
| 565 |
if retry_count == max_retries:
|
| 566 |
raise ValueError(f"Failed to generate voiceover after {max_retries} retries.")
|
| 567 |
|
| 568 |
+
def generate_voiceover_clone(full_text, tts_model, desired_speed, target_language, speaker_wav_path, output_audio_path):
|
| 569 |
try:
|
|
|
|
|
|
|
|
|
|
|
|
|
| 570 |
|
| 571 |
tts_model.tts_to_file(
|
| 572 |
text=full_text,
|
|
|
|
| 576 |
speed=desired_speed,
|
| 577 |
split_sentences=True
|
| 578 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 579 |
msg = "✅ Voice cloning completed successfully."
|
| 580 |
logger.info(msg)
|
| 581 |
return output_audio_path, msg, None
|
| 582 |
|
| 583 |
except Exception as e:
|
| 584 |
+
generate_voiceover_OpenAI(full_text, target_language, desired_speed, output_audio_path)
|
| 585 |
+
err_msg = f"❌ An error occurred: {str(e)}, fallback to premium voice"
|
| 586 |
logger.error(traceback.format_exc())
|
| 587 |
return None, err_msg, err_msg
|
| 588 |
|