Teste3 / app.py
AlexandreScriptsMT's picture
Update app.py
3f3d364 verified
raw
history blame
1.71 kB
import gradio as gr
import subprocess
import uuid
import os
# Diretório onde os vídeos convertidos serão salvos
OUTPUT_DIR = "outputs"
os.makedirs(OUTPUT_DIR, exist_ok=True)
def webm_to_mp4(video_file):
"""
Recebe um arquivo WebM, converte para MP4 e retorna o caminho do arquivo.
"""
if video_file is None:
return None
# Gera nome único para o MP4
output_name = f"{uuid.uuid4()}.mp4"
output_path = os.path.join(OUTPUT_DIR, output_name)
# Executa o ffmpeg para converter WebM -> MP4
subprocess.run(
[
"ffmpeg",
"-y", # sobrescrever se já existir
"-i", video_file, # arquivo de entrada
"-movflags", "faststart",
"-pix_fmt", "yuv420p",
output_path
],
stdout=subprocess.DEVNULL,
stderr=subprocess.DEVNULL
)
return output_path
# Criando o Blocks com API real
with gr.Blocks() as demo:
gr.Markdown("## Conversor WebM → MP4")
with gr.Row():
video_input = gr.File(label="Envie seu WebM", file_types=[".webm"])
output_file = gr.File(label="Download MP4")
convert_button = gr.Button("Converter")
loading_text = gr.Textbox(label="Status", interactive=False)
# Função de callback
def convert_and_update(video_file):
loading_text.value = "Convertendo..."
mp4_path = webm_to_mp4(video_file)
loading_text.value = "Concluído!"
return mp4_path
convert_button.click(fn=convert_and_update, inputs=video_input, outputs=output_file)
# Expondo API REST real
demo.api_name = "convert"
# Inicializa o app
demo.launch(server_name="0.0.0.0", server_port=7860)