Quindi, come funziona?
Rispondere a questa domanda implicherebbe la spiegazione di alcuni calcoli matematici molto complicati, certamente più di quelli che possiamo coprire in questo articolo, ma non è necessario capire esattamente come funzioni matematicamente per comprendere le basi.
Le librerie più popolari per la compressione del testo si basano su due algoritmi di compressione, utilizzando entrambi allo stesso tempo per ottenere rapporti di compressione molto elevati. Questi due algoritmi sono "LZ77" e "Huffman coding". La codifica di Huffman è piuttosto complicata, e non entreremo nei dettagli su quello qui. In primo luogo, utilizza una matematica di fantasia per assegnare più brevecodici binari a singole lettere, riducendo le dimensioni dei file nel processo. Se vuoi saperne di più, guarda questo articolo su come funziona il codice, o questo spiegatore di Computerphile.
LZ77, d'altra parte, è relativamente semplice ed è ciò di cui parleremo qui. Cerca di rimuovere parole duplicate e sostituirle con una "chiave" più piccola che rappresenta la parola.
Prendi questo breve pezzo di testo per esempio:
Chiamiamo la compressione come "senza perdita": i dati inseriti sono gli stessi dei dati che si ottengono. Niente è perso.
In realtà, LZ77 non utilizza un elenco di chiavi, ma sostituisce la seconda e la terza occorrenza con un link in memoria:
Se sei interessato a una spiegazione più dettagliata, questo video di Computerphile è piuttosto utile.
Ora, questo è un esempio idealizzato. In realtà, la maggior parte del testo è compressa con tasti piccoli come pochi caratteri. Ad esempio, la parola "the" verrebbe compressa anche quando appare in parole come "there", "loro" e "then". Con testo ripetuto, puoi ottenere alcuni pazzi rapporti di compressione. Prendi questo file di testo con la parola "howtogeek" ripetuta 100 volte. Il file di testo originale ha una dimensione di tre kilobyte. Quando compresso, però, occupa solo 158 byte. È quasi il 95% di compressione.
Questo algoritmo LZ77 si applica a tutti i dati binari, a proposito, e non solo al testo, sebbene il testo sia generalmente più facile da comprimere a causa del numero di parole ripetute utilizzate dalla maggior parte delle lingue. Un linguaggio come il cinese potrebbe essere un po 'più difficile da comprimere rispetto all'inglese, per esempio.
Come funziona la compressione di immagini e video?
Questo è ciò che porta a quei JPEG dall'aspetto orribile che le persone hanno caricato, condiviso e schermato più volte. Ogni volta che l'immagine viene compressa, perde alcuni dati.
Ecco un esempio. Questo è uno screenshot che ho preso che non è stato affatto compresso.
Bene, questo è solo lo scenario peggiore, esportando ogni volta con una qualità JPEG dello 0%. Per fare un confronto, ecco un JPEG di qualità del 50%, che è quasi indistinguibile dall'immagine PNG sorgente a meno che non lo faccia saltare in aria e osservi da vicino.
Quindi, come fa risparmiare così tanto spazio? Bene, l'algoritmo JPEG è un'impresa ingegneristica. La maggior parte delle immagini memorizza un elenco di numeri, con ciascun numero che rappresenta un singolo pixel.
JPEG non fa nulla di questo. Invece, memorizza le immagini usando qualcosa chiamato Discrete Cosine Transform, che è una raccolta di onde sinusoidali aggiunte insieme a intensità diverse. Usa 64 equazioni diverse, ma la maggior parte di queste non viene utilizzata. Questo è ciò che fa lo slider di qualità per JPEG in Photoshop e altre app di immagini: scegli quante equazioni usare. Le app utilizzano quindi la codifica Huffman per ridurre ulteriormente le dimensioni del file.
Ciò fornisce ai JPEG un rapporto di compressione incredibilmente alto, che può ridurre un file che sarebbe più di un megabyte fino a un paio di kilobyte, a seconda della qualità. Certo, se lo usi troppo, finisci con questo:
Compressione video
Usiamo qualcosa chiamato "compressione interframe", che calcola le modifiche tra ogni frame e memorizza solo quelle. Quindi, ad esempio, se si dispone di uno scatto relativamente fermo che occupa diversi secondi in un video, viene salvato un sacco di spazio perché l'algoritmo di compressione non ha bisogno di memorizzare tutte le cose nella scena che non cambiano. La compressione interframe è la ragione principale per cui abbiamo la TV digitale e il web video. Senza di esso, i video sarebbero centinaia di gigabyte, più della dimensione media del disco rigido nel 2005, quando YouTube ha lanciato.
Inoltre, dal momento che la compressione interframe funziona meglio con video per lo più fissi, questo è il motivo per cui i coriandoli rovinano la qualità del video.
Nota: GIF non esegue questa operazione, motivo per cui le GIF animate sono spesso molto brevi e ridotte, ma hanno comunque dimensioni di file piuttosto grandi.
Un'altra cosa da tenere a mente sul video è il suo bitrate: la quantità di dati consentiti in ogni secondo. Ad esempio, se il tuo bitrate è di 200 kb / s, il tuo video sembrerà piuttosto scadente. La qualità aumenta quando il bitrate sale, ma dopo un paio di megabyte al secondo, si ottengono rendimenti decrescenti.
Questa è una cornice ingrandita presa da un video di una medusa. Quello a sinistra è a 3 Mb / s, e quello a destra è 100 Mb / s.
Questa demo funziona meglio con il video reale, quindi se vuoi verificarlo da solo, puoi scaricare gli stessi video di prova del bitrate qui usati.
Compressione audio
L'MP3 utilizza anche il bitrate, che va dalla fascia bassa del 48 e 96 kbps (quella bassa) a 128 e 240kbps (piuttosto buono) a 320kbps (audio high-end), e probabilmente ascolterai solo le cuffie eccezionalmente buone ( e orecchie).
Esistono anche codec di compressione lossless per l'audio, il principale dei quali è FLAC, che utilizza la codifica LZ77 per fornire audio completamente privo di perdite. Alcune persone giurano per la perfetta qualità audio di FLAC, ma con la prevalenza di MP3, sembra che la maggior parte delle persone non sia in grado di dire o non si preoccupi della differenza.