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()
|