RXTIME's picture
Create App.py
11296df verified
raw
history blame
2.63 kB
import gradio as gr
import whisper
import torch
from transformers import MarianMTModel, MarianTokenizer
import ffmpeg
import requests
import os
import tempfile
# Configuração do Hugging Face e ElevenLabs
HF_MODEL = "Helsinki-NLP/opus-mt-mul-en"
ELEVENLABS_API_KEY = os.getenv("ELEVENLABS_API_KEY") # Defina essa variável no Hugging Face Spaces
# Carregar modelos
whisper_model = whisper.load_model("small")
translator = MarianMTModel.from_pretrained(HF_MODEL)
tokenizer = MarianTokenizer.from_pretrained(HF_MODEL)
# Função para transcrever áudio
def transcribe_audio(video_path: str) -> str:
result = whisper_model.transcribe(video_path)
return result["text"]
# Função para traduzir texto
def translate_text(text: str, target_lang="pt") -> str:
inputs = tokenizer(text, return_tensors="pt", padding=True, truncation=True)
translated_tokens = translator.generate(**inputs)
return tokenizer.decode(translated_tokens[0], skip_special_tokens=True)
# Função para gerar áudio em português (usando ElevenLabs)
def synthesize_speech(text: str, voice="Antônio") -> str:
url = "https://api.elevenlabs.io/v1/text-to-speech"
headers = {"Authorization": f"Bearer {ELEVENLABS_API_KEY}"}
response = requests.post(url, json={"text": text, "voice": voice}, headers=headers)
temp_audio = tempfile.NamedTemporaryFile(delete=False, suffix=".mp3")
with open(temp_audio.name, "wb") as f:
f.write(response.content)
return temp_audio.name
# Função para substituir o áudio no vídeo
def replace_audio(video_path: str, new_audio_path: str) -> str:
output_path = video_path.replace(".mp4", "_translated.mp4")
ffmpeg.input(video_path).output(
output_path,
audio=new_audio_path,
codec="copy"
).run(overwrite_output=True)
return output_path
# Pipeline completo
def process_video(video_file):
with tempfile.NamedTemporaryFile(delete=False, suffix=".mp4") as temp_video:
temp_video.write(video_file.read())
video_path = temp_video.name
transcript = transcribe_audio(video_path)
translated_text = translate_text(transcript)
new_audio_path = synthesize_speech(translated_text)
output_video_path = replace_audio(video_path, new_audio_path)
return output_video_path
# Interface Gradio
iface = gr.Interface(
fn=process_video,
inputs=gr.File(label="Carregar Vídeo (MP4)"),
outputs=gr.File(label="Baixar Vídeo Traduzido"),
title="Tradutor de Vídeos para Português",
description="Faz a transcrição, tradução e substituição de áudio em vídeos automaticamente."
)
iface.launch()