File size: 2,229 Bytes
b42a9c7
0242288
c21d719
b42a9c7
0242288
aa87011
b42a9c7
3a78a97
 
 
 
aa87011
3a78a97
 
 
 
 
 
 
 
 
a30208d
4d2f91b
 
 
 
 
 
c21d719
0242288
0b137ef
 
 
 
aa87011
0b137ef
aa87011
b33151f
aa87011
 
4cccf90
aa87011
3a78a97
b33151f
0b137ef
3a78a97
b33151f
aa87011
0242288
0b137ef
 
 
 
 
 
 
3a78a97
0b137ef
 
 
 
3a78a97
aa87011
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
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