r7 / app.py
RXTIME's picture
Update app.py
469dbfe verified
raw
history blame
1.9 kB
import streamlit as st
from moviepy.editor import VideoFileClip, AudioFileClip
from transformers import MarianMTModel, MarianTokenizer
import torch
from gtts import gTTS
import os
# Interface do Streamlit
st.title("Tradutor de Vídeo com Áudio")
uploaded_file = st.file_uploader("Carregue um vídeo para tradução", type=["mp4", "mov", "avi"])
# Função para traduzir o áudio do vídeo
def translate_audio(input_audio_path, output_audio_path, model_name='Helsinki-NLP/opus-mt-en-pt'):
tokenizer = MarianTokenizer.from_pretrained(model_name)
model = MarianMTModel.from_pretrained(model_name)
audio_clip = AudioFileClip(input_audio_path)
text = "Hello, how are you?" # Simulação de transcrição
translated_text = translate_text(text, tokenizer, model)
tts = gTTS(translated_text, lang='pt')
tts.save(output_audio_path)
# Função para traduzir o texto
def translate_text(text, tokenizer, model):
inputs = tokenizer(text, return_tensors="pt", padding=True)
with torch.no_grad():
translated = model.generate(**inputs)
return tokenizer.decode(translated[0], skip_special_tokens=True)
# Função para substituir o áudio no vídeo
def replace_audio_in_video(input_video_path, input_audio_path, output_video_path):
video = VideoFileClip(input_video_path)
new_audio = AudioFileClip(input_audio_path)
video = video.set_audio(new_audio)
video.write_videofile(output_video_path, codec="libx264")
# Processar o vídeo quando carregado
if uploaded_file is not None:
input_video_path = "uploaded_video.mp4"
output_video_path = "translated_video.mp4"
with open(input_video_path, "wb") as f:
f.write(uploaded_file.read())
process_video(input_video_path, output_video_path)
st.video(output_video_path)
st.download_button("Baixar Vídeo Traduzido", open(output_video_path, "rb"), "translated_video.mp4")