Gradio / app.py
AlexandreScriptsMT's picture
Update app.py
8a6b746 verified
import gradio as gr
import os
import subprocess
def convert_webm_to_mp4(video_file):
"""
Função simples que recebe um caminho de arquivo de vídeo,
converte para MP4 usando FFmpeg e retorna o novo caminho.
"""
print(f"Recebido arquivo: {video_file}")
if video_file is None:
return None
# Define nomes de arquivo
input_path = video_file
# Cria um nome de saída garantindo a extensão .mp4
output_path = os.path.splitext(input_path)[0] + "_converted.mp4"
try:
# Comando FFmpeg otimizado para velocidade (ultrafast) e compatibilidade (libx264)
# O flag -y sobrescreve se o arquivo já existir
command = [
"ffmpeg", "-y",
"-i", input_path,
"-c:v", "libx264",
"-preset", "ultrafast", # Converte rápido para não dar timeout
"-crf", "23", # Qualidade balanceada
"-c:a", "aac", # Audio padrão MP4
output_path
]
print(f"Executando FFmpeg: {' '.join(command)}")
subprocess.run(command, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
print(f"Conversão concluída: {output_path}")
return output_path
except subprocess.CalledProcessError as e:
print(f"Erro no FFmpeg: {e}")
return None
except Exception as ex:
print(f"Erro geral: {ex}")
return None
# Interface simples: Entrada de Vídeo -> Saída de Vídeo
# allow_flagging="never" remove botões desnecessários que podem causar erros
iface = gr.Interface(
fn=convert_webm_to_mp4,
inputs=gr.Video(label="Input WebM"),
outputs=gr.Video(label="Output MP4"),
allow_flagging="never",
title="API Conversor WebM para MP4"
)
if __name__ == "__main__":
# O SEGREDO DO SUCESSO: cors_allowed_origins=["*"]
# Isso permite que o Preview do nosso editor envie arquivos para seu servidor.
iface.launch(
server_name="0.0.0.0",
server_port=7860,
cors_allowed_origins=["*"]
)