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=["*"] )