File size: 2,081 Bytes
137cb2f
 
8a6b746
 
 
 
 
 
 
 
f64427e
8a6b746
 
ee827e5
8a6b746
 
 
 
f64427e
8a6b746
 
 
 
 
 
 
 
 
 
 
 
f64427e
8a6b746
 
f64427e
8a6b746
f64427e
8a6b746
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
137cb2f
5ac40a1
8a6b746
 
 
 
 
 
 
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
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=["*"]
    )