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