Spaces:
Runtime error
Runtime error
File size: 1,606 Bytes
af1695b 33c4afa 69005d5 a950c39 af1695b 37d5502 a950c39 37d5502 33c4afa 69005d5 ad45296 a950c39 ad45296 a950c39 37d5502 69005d5 a950c39 69005d5 a950c39 69005d5 37d5502 a950c39 ad45296 a950c39 1c02b32 a950c39 1c02b32 a950c39 | 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 | import gradio as gr
import subprocess
import tempfile
import os
def convert_webm_to_mp4(webm_file):
"""
Recebe um arquivo WebM, converte para MP4 usando ffmpeg,
e retorna o caminho do MP4 pronto para download.
"""
if webm_file is None:
return None
# Criar arquivo temporário para o MP4
tmp_dir = tempfile.mkdtemp()
mp4_path = os.path.join(tmp_dir, "output.mp4")
# Comando ffmpeg para conversão
try:
subprocess.run(
[
"ffmpeg",
"-y", # sobrescreve se existir
"-i", webm_file, # input
"-c:v", "libx264", # codec de vídeo
"-preset", "fast",
"-crf", "23", # qualidade
mp4_path # output
],
check=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE
)
except subprocess.CalledProcessError as e:
return f"Erro ao converter: {e.stderr.decode()}"
return mp4_path
# --- Interface Gradio ---
with gr.Blocks() as demo:
gr.Markdown("## WebM → MP4 Converter")
webm_input = gr.Video(label="Upload WebM", type="filepath") # apenas caminho do arquivo
mp4_output = gr.File(label="Download MP4")
convert_btn = gr.Button("Convert to MP4")
convert_btn.click(fn=convert_webm_to_mp4, inputs=[webm_input], outputs=[mp4_output])
# Rodar app
if __name__ == "__main__":
# share=True cria link público temporário (útil para testes)
demo.launch(server_name="0.0.0.0", server_port=7860, share=True)
|