r7 / app.py
RXTIME's picture
Update app.py
9796a25 verified
raw
history blame
3.83 kB
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()