Cum funcționează

Compresia datelor: cum se micșorează fișierele digitale

Compresia datelor explicată: fără pierderi sau cu pierderi, cum se micșorează textul, imaginile, sunetul și video-ul și de ce nu poți comprima la infinit.

De Redacția LumeaTehnologiei11 min de citit
Telefon așezat pe un caiet deschis lângă un laptop, pe o masă din lemn

Compresia datelor este procesul prin care un fișier este rescris într-o formă mai scurtă, eliminând repetițiile și informația previzibilă. Există două mari familii: compresia fără pierderi, care permite refacerea exactă, bit cu bit, a originalului, și compresia cu pierderi, care renunță definitiv la detalii considerate neimportante pentru a obține fișiere mult mai mici.

Fără compresie, o fotografie de pe telefon ar avea zeci de megaocteți, o oră de muzică ar ocupa în jur de 600 de megaocteți, iar un film în rezoluție mare nu ar putea fi transmis prin conexiunile obișnuite. Mai jos vezi pe ce idei se bazează compresia, cum sunt micșorate textul, imaginile, sunetul și video-ul, de ce un fișier deja comprimat nu mai scade și ce greșeli să eviți când lucrezi cu fișiere comprimate.

Ce este compresia datelor

Compresia este o formă de codificare mai eficientă: aceeași informație, scrisă cu mai puțini biți. Ea funcționează pentru că datele reale nu sunt aleatorii; conțin redundanță, adică părți care se repetă sau care pot fi prezise din celelalte.

Un exemplu din viața de zi cu zi sunt prescurtările. În loc de „și așa mai departe” scrii „ș.a.m.d.”; în loc de „Republica Moldova, Republica Moldova, Republica Moldova” poți scrie „de trei ori Republica Moldova”. Cine citește cunoaște regula și poate reface textul complet. Programele de compresie fac același lucru, sistematic, cu reguli matematice.

Orice sistem de compresie are două părți:

  • codorul (compresorul), care transformă datele originale în forma comprimată;
  • decodorul (decompresorul), care reface datele, exact sau aproximativ.

Ansamblul celor două se numește adesea codec, de la codor-decodor, termen folosit mai ales pentru audio și video.

Compresia fără pierderi și compresia cu pierderi

Diferența dintre cele două tipuri ține de ce primești înapoi după decompresie: originalul exact sau o aproximare foarte apropiată de el. Alegerea depinde de tipul datelor și de cât de grav ar fi un bit greșit.

CriteriuFără pierderiCu pierderi
Rezultatul decompresieiidentic cu originalulaproximativ, cu detalii pierdute definitiv
Raport tipic de micșorarede 2–4 ori la text, foarte puțin la date deja comprimatede 10 până la peste 100 de ori
Unde se foloseștetext, documente, programe, baze de date, arhivefotografii, muzică, filme, apeluri video
Exemple de formateZIP, PNG, FLACJPEG, MP3, AAC, formatele video moderne
Efectul recomprimării repetateniciun efectcalitatea scade la fiecare salvare

Un program sau un tabel financiar nu suportă nicio greșeală: un singur bit schimbat poate strica totul. O fotografie, în schimb, poate pierde mii de nuanțe pe care ochiul nu le distinge oricum. De aceea fiecare tip de date are compresia potrivită.

Cum funcționează compresia fără pierderi

Compresia fără pierderi folosește câteva idei simple, combinate inteligent: înlocuiește repetițiile cu trimiteri și scrie simbolurile frecvente cu coduri mai scurte decât cele rare.

Codificarea șirurilor repetate

Cea mai simplă metodă este codificarea lungimii șirurilor (run-length encoding): în loc de „AAAAAAAABBB” scrii „8A3B”. Funcționează excelent pentru imagini cu suprafețe mari de aceeași culoare, de exemplu desenele simple sau documentele scanate alb-negru, și foarte prost pentru text obișnuit.

Dicționarul: trimiteri înapoi

Algoritmii din familia LZ77 (după inițialele inventatorilor, Lempel și Ziv) caută secvențe care au mai apărut în ultimele câteva zeci de mii de caractere și le înlocuiesc cu o pereche de numere: „mergi înapoi X poziții și copiază Y caractere”. Într-un text românesc, cuvinte precum „care”, „pentru” sau „este” apar de zeci de ori și devin trimiteri scurte.

Codurile de lungime variabilă

Codificarea Huffman atribuie coduri scurte simbolurilor frecvente și coduri lungi celor rare, ca în alfabetul Morse, unde litera E, cea mai frecventă în engleză, este un singur punct. Dacă litera „a” apare foarte des într-un text, poate fi codificată cu 3 biți în loc de 8, iar o literă rară cu 12 biți; în medie, textul scade.

Formatul DEFLATE, folosit în arhivele ZIP și în imaginile PNG, combină trimiterile de tip LZ77 cu codificarea Huffman. Algoritmii mai noi aplică aceleași principii cu dicționare mai mari și modele statistice mai fine.

Sfat: Arhivarea unui dosar cu documente text, tabele și fișiere de proiect reduce de obicei vizibil spațiul ocupat. Arhivarea unui dosar cu fotografii sau filme aproape că nu schimbă nimic, pentru că acestea sunt deja comprimate; arhiva e utilă doar ca să le trimiți împreună, într-un singur fișier.

Limitele: de ce nu poți comprima la infinit

Nicio metodă de compresie fără pierderi nu poate micșora orice fișier: există o limită teoretică, numită entropie, sub care informația nu mai poate fi împachetată. Conceptul a fost formulat de matematicianul Claude Shannon, întemeietorul teoriei informației.

Entropia, pe înțeles

Entropia măsoară cât de „surprinzătoare” este informația. Un text format numai din litera A are entropie aproape zero: îl poți descrie în câteva cuvinte. O secvență de aruncări cu banul are entropie maximă: fiecare rezultat e imprevizibil, deci nu există tipar de exploatat. Datele reale se află între aceste extreme, iar compresorul exploatează exact partea previzibilă.

Argumentul cutiilor

Există o dovadă simplă că nu poți comprima orice. Numărul fișierelor de 1.000 de biți este mai mare decât numărul tuturor fișierelor mai scurte de 1.000 de biți luate împreună. Dacă un program ar micșora toate fișierele de 1.000 de biți, două dintre ele ar trebui să ajungă la același rezultat, iar decompresorul n-ar mai ști care era originalul. Prin urmare, orice compresor fără pierderi mărește unele fișiere, chiar dacă doar cu câțiva octeți.

De ce nu se comprimă de două ori

Rezultatul unei compresii bune arată aproape ca o secvență aleatorie: redundanța a fost deja scoasă. De aceea o arhivă ZIP pusă într-o altă arhivă ZIP nu scade, iar datele criptate nu se mai comprimă deloc, pentru că o criptare bună produce rezultate care par perfect aleatorii. Ordinea corectă este, mereu, întâi compresia, apoi criptarea; criptografia este explicată în ghidul despre criptografie și chei.

Compresia imaginilor

Fotografiile se comprimă aproape mereu cu pierderi, prin metode care țin cont de felul în care vede ochiul uman: suntem mult mai sensibili la luminozitate decât la culoare și observăm greu variațiile foarte fine de textură.

Pașii compresiei JPEG

  1. Separarea luminozității de culoare: imaginea trece din RGB într-un sistem cu un canal de luminozitate și două de culoare.
  2. Subeșantionarea culorii: canalele de culoare sunt păstrate la rezoluție mai mică, de obicei jumătate pe fiecare direcție, fără ca diferența să fie vizibilă.
  3. Împărțirea în blocuri de 8 × 8 pixeli.
  4. Transformarea cosinus discretă: fiecare bloc este descris ca o sumă de modele de variație, de la cele line la cele foarte fine.
  5. Cuantizarea: detaliile fine sunt rotunjite drastic sau eliminate; aici se pierde informația, iar nivelul de calitate ales decide cât de mult.
  6. Codificarea fără pierderi a rezultatului, cu metode de tip Huffman.

La calitate prea mică apar artefactele: pătrate vizibile în zonele line, cum ar fi cerul, și un halou în jurul marginilor contrastante, de exemplu în jurul textului.

Format de imagineTip de compresiePotrivit pentru
JPEGcu pierderifotografii
PNGfără pierdericapturi de ecran, grafică, text, transparență
WebPcu sau fără pierderiimagini pe site-uri, fișiere mai mici decât JPEG la aceeași calitate
AVIF și HEIFcu pierderi, bazate pe compresie videofotografii de pe telefoane, imagini web moderne
GIFfără pierderi, dar doar 256 de culorianimații simple

Atenție: Fiecare salvare a unui JPEG editat aplică din nou cuantizarea și pierde încă puțină calitate. Dacă editezi o fotografie de mai multe ori, păstrează originalul și lucrează pe o copie, salvând în format JPEG doar la final.

Linia de timp a unui program de editare video cu piste audio colorate

Compresia sunetului

Compresia audio cu pierderi se bazează pe psihoacustică, studiul felului în care percepe urechea sunetele. Ideea centrală este mascarea: un sunet puternic face inaudibile, pentru scurt timp, sunetele mai slabe cu frecvențe apropiate. Codorul calculează ce componente sunt mascate și nu le mai codifică sau le codifică grosier.

Debitul (bitrate), măsurat în kilobiți pe secundă, arată câtă informație folosește fiecare secundă de sunet și determină atât calitatea, cât și mărimea fișierului.

Sursa sau formatulDebit orientativObservații
CD audio necomprimataproximativ 1.411 kb/s44.100 de eșantioane pe secundă, 16 biți, stereo
Compresie fără pierderiaproximativ jumătate până la două treimi din originalrefacere exactă
Muzică comprimată, calitate ridicată256–320 kb/sgreu de deosebit de original pentru majoritatea ascultătorilor
Muzică comprimată, calitate medie128 kb/spotrivit pentru ascultare obișnuită
Voce în apeluricâțiva zeci de kb/soptimizată pentru inteligibilitate, nu pentru muzică

Codecurile de voce folosite în telefonie funcționează diferit: modelează tractul vocal uman și transmit parametrii acestui model, nu unda sonoră propriu-zisă. Așa reușesc să transmită o conversație cu foarte puțini biți.

Compresia video

Video-ul este domeniul în care compresia face diferența cea mai mare: un film necomprimat în rezoluție Full HD ar avea nevoie de sute de megabiți pe secundă, iar unul comprimat se poate vedea în condiții bune cu câțiva megabiți pe secundă, deci de peste o sută de ori mai puțin.

Cadrele cheie și cadrele de diferență

Secretul este că două cadre consecutive dintr-un film sunt aproape identice. Codorul folosește trei tipuri de cadre:

  • cadrele I (cadre cheie), comprimate independent, ca o fotografie;
  • cadrele P, care descriu doar diferențele față de un cadru anterior;
  • cadrele B, care folosesc atât cadre anterioare, cât și ulterioare.

Pentru diferențe, codorul împarte imaginea în blocuri și caută unde s-a mutat fiecare bloc față de cadrul de referință. În loc să retrimită blocul, transmite un vector de mișcare și o mică corecție. O minge care traversează un teren verde înseamnă câteva blocuri mutate, nu o imagine nouă.

Standardele de compresie video

Standardele internaționale, precum H.264, H.265 sau AV1, definesc regulile de decodare, astfel încât orice dispozitiv compatibil să poată reda fișierul. Fiecare generație nouă obține aceeași calitate cu un debit mai mic, dar cere mai multă putere de calcul, motiv pentru care telefoanele au circuite dedicate pentru decodarea video.

Când un video online devine brusc neclar și apoi își revine, nu este o defecțiune: serviciul folosește debit adaptiv, adică are pregătite mai multe variante ale aceluiași film, la calități diferite, și o alege pe cea pe care o poate transmite conexiunea ta în acel moment. Diferența dintre viteză și întârzieri este explicată în articolul despre latență și lățimea de bandă.

Compresia pe internet și în cloud

Foarte mult din ce încarcă browserul este comprimat în timpul transferului, fără ca tu să observi. Serverul comprimă textul paginilor, foile de stil și scripturile cu algoritmi standardizați precum DEFLATE sau Brotli, iar browserul le decomprimă instantaneu. Textul unei pagini web scade astfel, de obicei, la o fracțiune din mărimea inițială.

Rețelele de livrare a conținutului păstrează în memorie variante deja comprimate ale fișierelor, ca să le servească rapid vizitatorilor din toată lumea, mecanism explicat în articolul despre CDN. Serviciile de stocare combină compresia cu deduplicarea: blocurile identice de date, recunoscute după amprenta lor calculată cu funcții hash, sunt păstrate o singură dată. Despre amprente afli mai multe în ghidul despre funcțiile hash, iar despre locul în care ajung fișierele tale în articolul despre stocarea în cloud.

Sfaturi practice pentru fișierele de zi cu zi

Câteva obiceiuri simple te ajută să economisești spațiu și timp, fără să pierzi calitate acolo unde contează.

  1. Trimite fotografii ca fișiere, nu ca imagini în aplicațiile de mesagerie, când ai nevoie de calitatea originală; multe aplicații recomprimă automat imaginile.
  2. Păstrează originalele fotografiilor și înregistrărilor importante; versiunile comprimate le poți genera oricând din ele, invers nu.
  3. Folosește PNG pentru capturi de ecran cu text și JPEG sau formatele moderne pentru fotografii.
  4. Nu te aștepta la miracole de la arhivare pentru fișiere multimedia; folosește arhiva ca să grupezi fișierele.
  5. Verifică arhivele importante după creare, deschizându-le sau testându-le cu funcția de verificare a programului de arhivare.
  6. Ai grijă la arhivele primite pe e-mail, mai ales cele protejate cu parolă: sunt o metodă frecventă de a ascunde programe malițioase de filtrele de securitate.

Pentru imaginea completă a felului în care datele sunt codificate în biți și circulă între dispozitive, vezi ghidul despre tehnologia digitală, de la biți la aplicații.

Pe scurt, despre compresie

Compresia exploatează faptul că datele reale sunt pline de repetiții și tipare previzibile. Compresia fără pierderi reface exact originalul și e obligatorie pentru text și programe, dar are o limită teoretică dată de entropie. Compresia cu pierderi se folosește pentru imagini, sunet și video și obține reduceri spectaculoase eliminând ce nu percep simțurile noastre.

De reținut:

  • fără pierderi înseamnă refacere exactă; cu pierderi înseamnă aproximare;
  • nu poți comprima la nesfârșit și nici date deja comprimate sau criptate;
  • JPEG-ul pierde calitate la fiecare salvare; păstrează originalele;
  • video-ul se comprimă mai ales prin diferențele dintre cadre;
  • comprimă întâi, criptează apoi.

Întrebări frecvente

De ce nu se micșorează fotografiile când le arhivez?

Pentru că sunt deja comprimate, iar redundanța a fost eliminată la salvare. Arhiva poate chiar să iasă puțin mai mare decât suma fișierelor, din cauza informațiilor proprii de organizare.

Compresia fără pierderi afectează calitatea?

Nu, după decompresie obții exact fișierul inițial, bit cu bit. Ea doar ocupă mai puțin spațiu cât timp fișierul este comprimat.

De ce arată pixelat un video pe o conexiune lentă?

Serviciul trece automat pe o variantă cu debit mai mic, deci compresie mai puternică, ca redarea să nu se oprească. Când conexiunea se îmbunătățește, revine la calitatea mai bună.

Ce înseamnă debitul unui fișier audio?

Debitul arată câți kilobiți sunt folosiți pentru fiecare secundă de sunet. Un debit mai mare înseamnă, în general, calitate mai bună și fișiere mai mari, până la pragul de la care diferența nu mai este perceptibilă.

Poate compresia să strice un fișier?

Compresia fără pierderi, făcută corect, nu strică nimic, dar o arhivă deteriorată poate face fișierele din ea irecuperabile. De aceea copiile importante se verifică și se păstrează în mai multe locuri.

↑