File size: 3,828 Bytes
9796a25
bb64571
 
9796a25
 
bb64571
9796a25
 
 
 
 
 
 
 
 
 
 
bb64571
 
9796a25
 
 
 
 
 
 
bb64571
9796a25
 
 
 
 
 
 
 
 
 
 
 
 
 
 
bb64571
9796a25
 
bb64571
9796a25
 
 
39b8c2e
9796a25
 
 
 
 
bb64571
 
9796a25
 
 
bb64571
9796a25
bb64571
 
9796a25
 
bb64571
 
9796a25
bb64571
9796a25
 
bb64571
9796a25
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6c3da4f
bb64571
9796a25
c3d2a27
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
from transformers import pipeline, MarianMTModel, MarianTokenizer, SpeechT5Processor, SpeechT5ForTextToSpeech, SpeechT5HifiGan
import torch
import ffmpeg
import os
from pydub import AudioSegment

# 1. Reconhecimento de Fala com Whisper (Inglês)
def transcribe_audio(audio_path):
    print("Transcrevendo áudio...")
    # Carregar o modelo Whisper para inglês
    asr = pipeline("automatic-speech-recognition", model="openai/whisper-large-v2")
    
    # Processar o áudio
    result = asr(audio_path, chunk_length_s=30)
    text = result['text']
    print(f"Texto transcrito: {text}")
    return text


# 2. Tradução Automática com MarianMT (Inglês → Português)
def translate_text(text):
    print("Traduzindo texto para o português...")
    # Carregar o modelo MarianMT para inglês → português
    model_name = "Helsinki-NLP/opus-mt-en-pt"
    tokenizer = MarianTokenizer.from_pretrained(model_name)
    model = MarianMTModel.from_pretrained(model_name)
    
    # Tokenizar e traduzir
    inputs = tokenizer(text, return_tensors="pt")
    translated_ids = model.generate(**inputs)
    translated_text = tokenizer.decode(translated_ids[0], skip_special_tokens=True)
    print(f"Texto traduzido: {translated_text}")
    return translated_text


# 3. Síntese de Voz com VITS/FastSpeech (Português)
def synthesize_speech(text, output_path="output_speech.wav"):
    print("Sintetizando voz em português...")
    # Carregar o processador e o modelo VITS
    processor = SpeechT5Processor.from_pretrained("microsoft/speecht5_tts")
    model = SpeechT5ForTextToSpeech.from_pretrained("microsoft/speecht5_tts")
    vocoder = SpeechT5HifiGan.from_pretrained("microsoft/speecht5_hifigan")
    
    # Obter embeddings de voz (opcional: usar embeddings pré-carregados)
    speaker_embeddings = torch.randn((1, 512))  # Gerar embeddings aleatórios
    
    # Processar o texto
    inputs = processor(text=text, return_tensors="pt")
    speech = model.generate_speech(inputs["input_ids"], speaker_embeddings, vocoder=vocoder)
    
    # Salvar o áudio gerado
    speech_np = speech.numpy()
    AudioSegment(speech_np.tobytes(), frame_rate=16000, sample_width=2, channels=1).export(output_path, format="wav")
    print(f"Áudio sintetizado salvo em: {output_path}")
    return output_path


# 4. Substituição de Áudio no Vídeo com FFmpeg
def replace_audio_in_video(input_video, new_audio, output_video):
    print("Substituindo áudio no vídeo...")
    try:
        # Usar FFmpeg para substituir o áudio
        (
            ffmpeg
            .input(input_video)
            .output(new_audio, output_video, map_video=0, map_audio=1)
            .run(overwrite_output=True)
        )
        print(f"Vídeo com áudio substituído salvo em: {output_video}")
    except Exception as e:
        print(f"Erro ao substituir áudio: {e}")


# Função Principal
def main():
    # Caminhos dos arquivos
    input_video_path = "input_video.mp4"  # Substitua pelo caminho do seu vídeo
    temp_audio_path = "temp_audio.wav"
    output_video_path = "output_video.mp4"
    
    # Passo 1: Extrair áudio do vídeo
    print("Extraindo áudio do vídeo...")
    (
        ffmpeg
        .input(input_video_path)
        .output(temp_audio_path)
        .run(overwrite_output=True)
    )
    
    # Passo 2: Transcrever o áudio
    transcribed_text = transcribe_audio(temp_audio_path)
    
    # Passo 3: Traduzir o texto para português
    translated_text = translate_text(transcribed_text)
    
    # Passo 4: Sintetizar a voz traduzida
    synthesized_audio_path = synthesize_speech(translated_text, output_path="synthesized_audio.wav")
    
    # Passo 5: Substituir o áudio no vídeo
    replace_audio_in_video(input_video_path, synthesized_audio_path, output_video_path)

if __name__ == "__main__":
    main()