/

Universal Converter

Universal Converter icon

Universal Converter est une application desktop qui convertit vos fichiers en local : images, vidéos, audio et documents, sans rien envoyer vers internet.

Construit sur Electron avec FFmpeg, Sharp et Mammoth, l'application s'assure qu'aucune donnée ne quitte votre ordinateur. La confidentialité et la performance avant tout.

Télécharger la dernière version →

Fonctionnalités

  • Traitement hors-ligne : toutes les conversions sont effectuées en local, sans upload ni cloud
  • Large support de formats : images, audio, vidéo et documents
  • Dossier de sortie personnalisé : choisissez le répertoire de destination
  • Glisser-déposer : déposez simplement des fichiers sur l'interface
  • Conversion par lot : convertissez plusieurs fichiers en un seul clic
  • Thème sombre / clair : basculez selon vos préférences

Formats supportés

Images
JPG, PNG, WEBP, GIF, BMP, TIFF, ICO, PDF
Vidéo
MP4, MOV, AVI, MKV, WEBM, FLV, WMV
Audio
MP3, WAV, AAC, OGG, FLAC, M4A, WMA
Documents
PDF, DOCX, TXT, HTML, ODT

Technologies

Application desktop construite avec Electron, utilisant FFmpeg pour la vidéo/audio et Sharp pour le traitement d'images.

Electron React TypeScript Vite Tailwind CSS FFmpeg Sharp

Extrait de code

C'est ici que la conversion se passe vraiment. L'application reçoit le fichier, détermine son format cible, puis appelle FFmpeg ou Sharp selon le cas.

electron/main.ts
70ipcMain.handle('convert-file', async (event, filePath, format, outputDir) => {
71 try {
72 const fileName = path.basename(filePath, path.extname(filePath));
73 const finalOutputDir = outputDir || app.getPath('downloads');
74 const outputPath = path.join(finalOutputDir, `${fileName}.${format}`);
75
76 const imageFormats = ['jpg', 'png', 'webp', 'gif', 'tiff', 'avif', 'ico'];
77 const videoFormats = ['mp4', 'mov', 'avi', 'mkv', 'webm'];
78 const audioFormats = ['mp3', 'wav', 'aac', 'ogg', 'flac'];
79
80 if (imageFormats.includes(format.toLowerCase())) {
81 await sharp(filePath).toFormat(format as any).toFile(outputPath);
82 } else if (videoFormats.includes(format.toLowerCase())) {
83 await new Promise((resolve, reject) => {
84 ffmpeg(filePath).toFormat(format)
85 .on('end', resolve)
86 .on('error', reject)
87 .save(outputPath);
88 });
89 }
90 } catch (err) {
91 return { success: false, error: String(err) };
92 }
93});

Open Source

Voir le projet sur GitHub →