Spaces:
Runtime error
Runtime error
| 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=["*"] | |
| ) |