import gradio as gr from PIL import Image import os import ffmpeg # Atur tema Gradio gr.themes.Soft() # Format gambar yang didukung supported_formats = sorted(Image.SAVE.keys()) or ['BLP', 'BMP', 'BUFR', 'DDS', 'DIB', 'EPS', 'GIF', 'GRIB', 'HDF5', 'ICNS', 'ICO', 'IM', 'JPEG', 'JPEG2000', 'MPO', 'MSP', 'PALM', 'PCX', 'PDF', 'PNG', 'PPM', 'SGI', 'SPIDER', 'TGA', 'TIFF'] def convert_image_ffmpeg(image, target_format): try: # Ambil nama file asli tanpa ekstensi base_name = os.path.splitext(os.path.basename(image))[0] # Nama file keluaran dengan awalan yang diinginkan output_file = f"flowly_ai_image_converter_{base_name}.{target_format.lower()}" # Gunakan ffmpeg untuk konversi ( ffmpeg .input(image) .output(output_file, format=target_format) .overwrite_output() .run(capture_stdout=True, capture_stderr=True) ) return output_file except Exception as e: return f"Error: {e}" # Antarmuka Gradio interface = gr.Interface( fn=convert_image_ffmpeg, inputs=[ gr.Image(label="Upload Image", type="filepath", height=512), # Input gambar gr.Dropdown(label="Select Target Format", choices=supported_formats) # Pilih format ], outputs=gr.File(label="Converted Image"), # Output file hasil title="Image Format Converter", description="Upload an image and select any target format for conversion using FFmpeg.", css="footer {visibility: hidden}" # Sembunyikan footer ) # Jalankan aplikasi if __name__ == "__main__": interface.launch()