Spaces:
Sleeping
Sleeping
from datetime import datetime | |
from uuid import uuid4 | |
from tempfile import TemporaryDirectory | |
from .s3_handler import upload_file | |
from app.scripts import synthesise_audio | |
from .helper import download_audio, download_video, m4a_to_wav, audio_to_srt, merge_video_audio | |
from app.constants import MALE_LANGUAGES, FEMALE_LANGUAGES | |
def handler_video_url(url, from_lang, to_lang, gender): | |
with TemporaryDirectory(dir=".") as tempdir: | |
srt_file = f"{tempdir}/audio.srt" | |
video_file = f"{tempdir}/video.mp4" | |
audio_file = f"{tempdir}/audio.m4a" | |
audio_wav_file = f"{tempdir}/audio.wav" | |
translated_video = f"{tempdir}/translated_video.mp4" | |
download_audio(url, audio_file) | |
download_video(url, video_file) | |
m4a_to_wav(audio_file, audio_wav_file) | |
language_code = MALE_LANGUAGES[from_lang][0] | |
audio_to_srt(language_code, audio_wav_file, srt_file) | |
if gender.lower() == "male": | |
language_code = MALE_LANGUAGES[to_lang][0] | |
voice_name = MALE_LANGUAGES[to_lang][1] | |
else: | |
language_code = FEMALE_LANGUAGES[to_lang][0] | |
voice_name = FEMALE_LANGUAGES[to_lang][1] | |
result = synthesise_audio( | |
srt_file=srt_file, | |
video_file=video_file, | |
output_folder=tempdir, | |
language_code=language_code, | |
voice_name=voice_name, | |
from_lang=from_lang, | |
to_lang=to_lang, | |
gender=gender, | |
) | |
translated_srt = result["translated_subtitle"] | |
translated_audio = result["translated_audio"] | |
merge_video_audio(video_file, translated_audio, translated_video) | |
now = datetime.now() | |
today = now.strftime("%Y-%m-%d") | |
id = f"{today}/{str(uuid4()).replace('-', '')[:15]}" | |
srt_url = upload_file(srt_file, "expressapi", id, "subtitle.srt") | |
translated_srt_url = upload_file( | |
translated_srt, "expressapi", id, "translated_subtitle.srt" | |
) | |
translated_audio_url = upload_file( | |
translated_audio, "expressapi", id, "translated_audio.mp3" | |
) | |
translated_video_url = upload_file(translated_video, "expressapi", id, "translated_video.mp4") | |
return { | |
"srt_url": srt_url, | |
"video_url": translated_video_url, | |
"translated_srt_url": translated_srt_url, | |
"translated_audio_url": translated_audio_url, | |
} | |