File size: 1,903 Bytes
4667525 6c3da4f 4667525 39b8c2e 4667525 6c3da4f 4667525 |
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 |
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")
|