/

Universal Compressor

Universal Compressor icon

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

Construit sur Electron avec FFmpeg, Sharp et Archiver, 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 compressions 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
  • Compression par lot : compressez plusieurs fichiers en un seul clic
  • Thème sombre / clair : basculez selon vos préférences

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

Cette fonction calcule le bitrate idéal pour atteindre la taille voulue après compression. Elle lit les métadonnées du fichier via ffprobe, puis ajuste les bitrates vidéo et audio proportionnellement.

electron/main.ts
69const calculateBitrate = async (
70 filePath: string,
71 percentage: number,
72 isVideo: boolean = true
73): Promise<{ vBitrate: number; aBitrate: number }> => {
74 return new Promise((resolve) => {
75 ffmpeg.ffprobe(filePath, (err, metadata) => {
76 if (err || !metadata?.format) {
77 const stat = fs.statSync(filePath);
78 const originalBitrate = (stat.size * 8) / 10;
79 resolve({
80 vBitrate: originalBitrate * (percentage / 100) * 0.8,
81 aBitrate: 64000,
82 });
83 return;
84 }
85 const duration = metadata.format.duration || 1;
86 const size = metadata.format.size || fs.statSync(filePath).size;
87 const originalBitrate = (size * 8) / duration;
88 const targetBitrate = originalBitrate * (percentage / 100);
89 resolve({
90 vBitrate: targetBitrate * 0.8,
91 aBitrate: targetBitrate * 0.2,
92 });
93 });
94 });
95};

Open Source

Voir le projet sur GitHub →