Spaces:
Sleeping
Sleeping
| import os | |
| import tempfile | |
| from gtts import gTTS | |
| from pydub import AudioSegment | |
| import moviepy.editor as mp | |
| from pocketsphinx import AudioFile | |
| def merge_video_audio(video_file, audio_file, output_file): | |
| video_clip = mp.VideoFileClip(video_file) | |
| if audio_file is not None: | |
| audio_clip = AudioSegment.from_wav(audio_file) | |
| if audio_clip.duration < video_clip.duration: | |
| audio_clip = audio_clip.set_duration(video_clip.duration) | |
| else: | |
| audio_clip = audio_clip.subclip(0, video_clip.duration) | |
| video_clip = video_clip.set_audio(audio_clip) | |
| video_clip.write_videofile(output_file, codec="libx264", audio_codec="aac", verbose=False) | |
| def text_to_speech(text, lang='es'): | |
| tts = gTTS(text=text, lang=lang, slow=False) | |
| with tempfile.NamedTemporaryFile(delete=False, suffix=".mp3") as temp_file: | |
| tts.save(temp_file.name) | |
| return temp_file.name | |
| def transcribe_and_dub(video_file): | |
| temp_folder = tempfile.mkdtemp() | |
| try: | |
| with mp.VideoFileClip(video_file) as video: | |
| audio_file = os.path.join(temp_folder, "audio.wav") | |
| video.audio.write_audiofile(audio_file, codec='pcm_s16le') | |
| audio_transcription = [] | |
| with AudioFile(audio_file) as source: | |
| audio_transcription = source.hypothesize() | |
| text = " ".join(audio_transcription) | |
| print(f"Texto reconocido: {text}") | |
| dubbed_audio_file = text_to_speech(text) | |
| print(f"Archivo de audio doblado: {dubbed_audio_file}") | |
| original_audio = AudioSegment.from_wav(audio_file) | |
| dubbed_audio = AudioSegment.from_mp3(dubbed_audio_file) | |
| final_audio = original_audio.overlay(dubbed_audio) | |
| video_with_dubbed_audio = mp.VideoFileClip(video_file).set_audio(final_audio) | |
| dubbed_video_file = os.path.join(temp_folder, "dubbed_video.mp4") | |
| video_with_dubbed_audio.write_videofile(dubbed_video_file, codec="libx264", audio_codec="aac", verbose=False) | |
| print(f"Archivo de video doblado: {dubbed_video_file}") | |
| return dubbed_video_file | |
| except Exception as e: | |
| print(f"Error durante la transcripción y el doblaje: {str(e)}") | |
| return None | |