import gradio as gr import tempfile import subprocess import os from pathlib import Path def convert_webm_to_mp4(webm_file): """ Recebe um arquivo WebM, converte para MP4 e retorna o caminho do MP4. """ if webm_file is None: # Se nenhum WebM for enviado, retorna um MP4 dummy de teste return "https://sample-videos.com/video123/mp4/240/big_buck_bunny_240p_1mb.mp4" # Cria arquivo temporário para MP4 tmp_dir = tempfile.mkdtemp() mp4_path = Path(tmp_dir) / "output.mp4" # Executa conversão via ffmpeg try: subprocess.run([ "ffmpeg", "-y", "-i", webm_file.name, "-c:v", "libx264", "-preset", "fast", "-pix_fmt", "yuv420p", str(mp4_path) ], check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) except subprocess.CalledProcessError as e: return f"Error converting video: {e.stderr.decode()}" return mp4_path # Interface Gradio with gr.Blocks() as demo: gr.Markdown("### WebM to MP4 Converter\nUpload a WebM video and get MP4 back.") with gr.Row(): webm_input = gr.Video(label="WebM Input", type="file") mp4_output = gr.Video(label="MP4 Output") convert_btn = gr.Button("Convert") # Este é o handler Index 0 convert_btn.click(fn=convert_webm_to_mp4, inputs=[webm_input], outputs=[mp4_output]) # Lançamento do app if __name__ == "__main__": demo.launch(server_name="0.0.0.0", server_port=7860, share=True)