Naar de inhoud

Zo werkt oCompress

Wat er gebeurt als je een bestand toevoegt, hoe je kunt controleren dat er niets wordt geüpload, en wat verliesvrije compressie en compressie met verlies echt betekenen.

De korte versie

Als je een toolpagina opent, downloadt je browser de pagina en een klein programma: de compressor. Voeg je een bestand toe, dan leest de browser het, verwerkt de compressor het op je eigen processor en krijg je het resultaat terug als download. Op geen enkel moment gaat het bestand over het netwerk. Het hele proces ziet er zo uit:

  1. Laden. Eerst laden de pagina en de interface van de tool. De engine voor een bestandstype (afbeeldingen, video en audio, of documenten) wordt pas opgehaald als je een passend bestand toevoegt, dus je downloadt nooit code die je niet gebruikt.
  2. Lezen. Je browser geeft de pagina toegang tot precies de bestanden die je hebt gekozen, en tot niets anders op je apparaat.
  3. Comprimeren. Het werk draait in een Web Worker, een achtergrondthread van de browser, zodat de pagina blijft reageren en je op elk moment kunt annuleren.
  4. Opslaan. Het gecomprimeerde bestand wordt in het geheugen gemaakt (grote video's in de privéopslag van de browser) en opgeslagen via de gewone download van je browser, één voor één of als ZIP.

Wat er in je browser draait

Moderne browsers kunnen via WebAssembly gecompileerde code uitvoeren met een snelheid die dicht bij die van native programma's ligt, en ze geven webpagina's via een interface met de naam WebCodecs toegang tot de hardwarematige video-encoders van het apparaat. oCompress gebruikt allebei:

  • Afbeeldingen: MozJPEG voor JPEG, OxiPNG en een paletkwantisator voor PNG, de WebP-encoder uit libwebp van Google, libavif voor AVIF, SVGO voor SVG, en speciale decoders en encoders voor GIF en TIFF. De codecs voor JPEG, PNG, WebP en AVIF zijn gecompileerd naar WebAssembly.
  • Video en audio: WebCodecs met de bibliotheek Mediabunny om containers zoals MP4 en WebM te lezen en te schrijven. Het coderen gebruikt waar mogelijk de hardware-encoder van je grafische chip, en daarom kan het zelfs in een browser snel gaan. MP3-bestanden worden geschreven door de LAME-encoder en FLAC-bestanden door libFLAC, beide gecompileerd naar WebAssembly en alleen geladen als ze nodig zijn.
  • Documenten: onze eigen code, gebouwd op opensourcebibliotheken voor PDF en ZIP, opent pdf's en Office-bestanden, comprimeert de afbeeldingen erin opnieuw met de afbeeldingscodecs en schrijft een nieuw bestand.

Elke bibliotheek die we meeleveren, is open source: de meeste onder ruime licenties zoals MIT, BSD en Apache 2.0, Mediabunny onder de MPL 2.0, en de MP3-encoder LAME onder de LGPL als apart, vervangbaar bestand. Bekijk de lijst met bibliotheken, versies en licenties.

Zo controleer je dat er niets wordt geüpload

Je hoeft ons niet op ons woord te geloven. Twee eenvoudige tests:

  • Ga offline. Open een toolpagina, comprimeer één bestand zodat de engine geladen is, zet daarna wifi of mobiele data uit en comprimeer nog een bestand van hetzelfde type. Het werkt, omdat er niets het netwerk nodig heeft.
  • Bekijk het netwerkverkeer. Druk in Chrome, Edge of Firefox op F12, open het tabblad Netwerk en comprimeer een bestand. Je ziet dat de compressorcode van onze site wordt geladen, en verzoeken van analytics en advertenties, maar geen enkel verzoek met je bestand erin. Een foto van 10 MB zou verschijnen als een upload van 10 MB; die is er niet.

De pagina stuurt wel anonieme gebruiksgebeurtenissen naar Google Analytics, zoals “er is een JPG van een paar megabyte gecomprimeerd”. Die gebeurtenissen bevatten de tool, het bestandstype, en de grootte, de besparing en de verwerkingstijd als grove bereiken, nooit de bestandsnaam of de inhoud.

Verliesvrije compressie: dezelfde inhoud, minder bytes

Verliesvrije compressie zoekt naar redundantie, dingen die meer dan eens zijn opgeslagen of die te voorspellen zijn, en schrijft die compacter weg. Decoderen draait het proces precies om. Drie ideeën komen in bijna elk verliesvrij formaat terug:

  • Voorspelling. Naburige pixels in een afbeelding of opeenvolgende samples in audio lijken meestal op elkaar. Sla je het kleine verschil met een voorspelling op in plaats van de volledige waarde, dan houd je getallen over die meestal dicht bij nul liggen. PNG-filters en de lineaire voorspeller van FLAC werken zo.
  • Herhaling. Herhaalde reeksen worden vervangen door een korte verwijzing naar de eerdere kopie. Dat is het LZ77-deel van DEFLATE, dat in ZIP, PNG en Office-bestanden wordt gebruikt.
  • Entropiecodering. Veelvoorkomende waarden krijgen korte codes en zeldzame waarden lange (Huffman- of aritmetische codering).

Verliesvrije compressie heeft een natuurlijke grens: willekeurige ruis is niet te voorspellen, dus een korrelige foto of een ruisige opname krimpt zonder verlies nooit veel. Daarom levert het comprimeren van een bestand dat al gecomprimeerd is, zoals een JPEG in een ZIP, ook bijna niets op.

Compressie met verlies: weghalen wat je niet mist

Codecs met verlies gaan verder door informatie weg te gooien die menselijke ogen en oren nauwelijks waarnemen. JPEG en WebP slaan kleur op met een lagere resolutie dan helderheid en ronden fijn detail met een hoge frequentie weg. MP3, AAC en Opus laten geluiden weg die door luidere worden overstemd. Videocodecs zoals H.264 slaan zo nu en dan één volledig beeld op en daartussen vooral beweging en veranderingen.

De instelling voor kwaliteit of bitrate bepaalt hoeveel er wordt weggegooid. Bij gematigde instellingen is het verlies heel moeilijk op te merken; ga je te ver, dan verschijnen typische artefacten: blokken en halo's in afbeeldingen, een metalig of onderwaterachtig geluid in audio, uitsmeren in snelle videoscènes.

Wat de tools beloven en wat niet

  • Je krijgt nooit een groter bestand. Is het resultaat niet kleiner, dan geeft de tool het origineel terug en meldt hij dat het al optimaal is.
  • Documenten en audiobestanden geven voor hetzelfde bestand en dezelfde instellingen identieke bytes; hardware-encoders voor video kunnen tussen twee rondes een paar bytes verschillen.
  • Tekst in documenten blijft tekst; pagina's worden nooit in afbeeldingen veranderd.
  • Metadata van afbeeldingen, zoals de gps-locatie, wordt standaard verwijderd, terwijl het kleurprofiel en de rotatie behouden blijven. Ook videometadata zoals locatie, apparaat en datums wordt standaard verwijderd; audio houdt zijn tags en albumhoes, tenzij je dat uitzet.

Wat we niet kunnen beloven, is een bepaald percentage. De besparing hangt volledig af van hoe het bestand is gemaakt: een telefoonfoto of een gescande pdf heeft meestal veel ruimte, een bestand dat al geoptimaliseerd is weinig. De tool toont voor elk bestand de precieze grootte vooraf en achteraf.

Grenzen van comprimeren in een browser

Een browsertabblad is een afgeschermde omgeving met beperkt geheugen, en dat bepaalt wat praktisch haalbaar is. De tool accepteert afbeeldingen tot 200 MB en 100 megapixel, PDF- en Office-bestanden tot 300 MB, en video en audio tot 4 GB op een computer (1 GB op telefoons), al passen lange 4K-video's misschien nog steeds niet in het geheugen van een tabblad. De snelheid hangt af van je hardware: in onze tests op een snelle Windows-pc in Chrome kostte een minuut 1080p-video ongeveer 20 seconden en een foto van 24 megapixel ongeveer 2,5 seconde; telefoons kunnen veel trager zijn. Video en de meeste audioconversies hebben WebCodecs nodig, dat actuele versies van Chrome, Edge en Opera, Firefox 130+ en Safari 26+ bieden; WAV en AIFF kunnen ook zonder WebCodecs MP3, FLAC of WAV worden.

Voor een paar formaten hebben browsers helemaal geen decoder, zoals WMA, AVI en WMV, en oude binaire Office-bestanden kunnen niet veilig worden herschreven. Voor deze bestanden legt de tool de opties uit in plaats van een bestand te maken dat misschien beschadigd is. Is een klus te groot voor een browser, dan is een desktopprogramma zoals HandBrake voor video of LibreOffice voor documenten het eerlijke advies.