Spaces:
Runtime error
Runtime error
| # app.py | |
| import os | |
| import zipfile | |
| import rarfile | |
| from PyPDF2 import PdfReader, PdfWriter | |
| from pydub import AudioSegment | |
| from PIL import Image | |
| import pdf2image | |
| import streamlit as st | |
| import ffmpeg | |
| def convert_file(input_path, output_path): | |
| if input_path.endswith('.pdf'): | |
| # Convert PDF to WEBP | |
| images = pdf2image.convert_from_path(input_path) | |
| for i, image in enumerate(images): | |
| image.save(f"{os.path.splitext(output_path)[0]}_page_{i+1}.webp", 'WEBP') | |
| # Convert WEBP back to PDF | |
| webp_images = [Image.open(f"{os.path.splitext(output_path)[0]}_page_{i+1}.webp") for i in range(len(images))] | |
| webp_images[0].save(output_path, 'PDF', resolution=100.0, save_all=True, append_images=webp_images[1:]) | |
| elif input_path.endswith('.mp4'): | |
| # Convert MP4 to MKV using ffmpeg | |
| ffmpeg.input(input_path).output(output_path, codec='libx264').run() | |
| elif input_path.endswith('.wav'): | |
| # Convert WAV to MP3 | |
| audio = AudioSegment.from_wav(input_path) | |
| audio.export(output_path, format='mp3') | |
| elif input_path.endswith(('.png', '.jpg')): | |
| # Convert PNG/JPG to WEBP | |
| image = Image.open(input_path) | |
| image.save(output_path, 'WEBP') | |
| def extract_and_convert(file_path): | |
| if file_path.endswith('.zip'): | |
| with zipfile.ZipFile(file_path, 'r') as zip_ref: | |
| zip_ref.extractall(os.path.splitext(file_path)[0]) | |
| extracted_dir = os.path.splitext(file_path)[0] | |
| elif file_path.endswith('.rar'): | |
| with rarfile.RarFile(file_path, 'r') as rar_ref: | |
| rar_ref.extractall(os.path.splitext(file_path)[0]) | |
| extracted_dir = os.path.splitext(file_path)[0] | |
| else: | |
| return | |
| for root, _, files in os.walk(extracted_dir): | |
| for file in files: | |
| input_path = os.path.join(root, file) | |
| output_path = os.path.join(root, os.path.splitext(file)[0] + get_output_extension(file)) | |
| convert_file(input_path, output_path) | |
| def get_output_extension(file): | |
| if file.endswith('.pdf'): | |
| return '.pdf' | |
| elif file.endswith('.mp4'): | |
| return '.mkv' | |
| elif file.endswith('.wav'): | |
| return '.mp3' | |
| elif file.endswith(('.png', '.jpg')): | |
| return '.webp' | |
| return '' | |
| # Streamlit UI | |
| st.title("File Converter Space") | |
| # Language selection | |
| language = st.selectbox("Select Language / انتخاب زبان", ["English", "فارسی"]) | |
| if language == "English": | |
| description = """ | |
| This space allows you to convert files between various formats. | |
| Supported conversions: | |
| - PDF to WEBP and back to PDF | |
| - MP4 to MKV | |
| - WAV to MP3 | |
| - PNG/JPG to WEBP | |
| """ | |
| upload_label = "Choose a file" | |
| convert_button = "Convert Files" | |
| success_message = "Files converted successfully!" | |
| converted_files_label = "Converted Files:" | |
| else: | |
| description = """ | |
| این اسپیس به شما امکان میدهد فایلها را بین فرمتهای مختلف تبدیل کنید. | |
| تبدیلهای پشتیبانی شده: | |
| - PDF به WEBP و بازگشت به PDF | |
| - MP4 به MKV | |
| - WAV به MP3 | |
| - PNG/JPG به WEBP | |
| """ | |
| upload_label = "یک فایل انتخاب کنید" | |
| convert_button = "تبدیل فایلها" | |
| success_message = "فایلها با موفقیت تبدیل شدند!" | |
| converted_files_label = "فایلهای تبدیل شده:" | |
| st.write(description) | |
| uploaded_file = st.file_uploader(upload_label, type=['zip', 'rar']) | |
| if uploaded_file is not None: | |
| file_path = f"temp_{uploaded_file.name}" | |
| with open(file_path, "wb") as f: | |
| f.write(uploaded_file.getbuffer()) | |
| st.success("File uploaded successfully!") | |
| if st.button(convert_button): | |
| extract_and_convert(file_path) | |
| st.success(success_message) | |
| # Display converted files | |
| st.write(converted_files_label) | |
| extracted_dir = os.path.splitext(file_path)[0] | |
| for root, _, files in os.walk(extracted_dir): | |
| for file in files: | |
| if file.endswith(('.pdf', '.mkv', '.mp3', '.webp')): | |
| st.write(f"- {file}") | |