Jadi Bagaimana Cara Kerjanya?
Untuk menjawab pertanyaan itu akan melibatkan menjelaskan beberapa matematika yang sangat rumit, tentu saja lebih dari yang dapat kita bahas dalam artikel ini, tetapi Anda tidak perlu memahami secara tepat bagaimana cara kerjanya secara matematis untuk memahami dasar-dasarnya.
Perpustakaan paling populer untuk mengompresi teks bergantung pada dua algoritma kompresi, menggunakan keduanya pada saat yang sama untuk mencapai rasio kompresi yang sangat tinggi. Kedua algoritme ini adalah "LZ77" dan "Huffman coding." Pengodean Huffman cukup rumit, dan kami tidak akan membahasnya secara detail di sini. Terutama, menggunakan beberapa matematika mewah untuk menetapkan lebih pendekkode biner untuk masing-masing huruf, mengecilkan ukuran file dalam prosesnya. Jika Anda ingin mempelajari lebih lanjut tentang hal ini, baca artikel ini tentang cara kerja kode, atau penjelasan ini oleh Computerphile.
LZ77, di sisi lain, relatif sederhana dan inilah yang akan kita bicarakan di sini. Ini berusaha untuk menghapus kata-kata duplikat dan menggantikannya dengan "kunci" yang lebih kecil yang mewakili kata.
Ambil bagian teks singkat ini misalnya:
Kami menyebut kompresi seperti ini "lossless" - data yang Anda masukkan sama dengan data yang Anda dapatkan. Tidak ada yang hilang.
Kenyataannya, LZ77 tidak menggunakan daftar kunci, melainkan menggantikan kejadian kedua dan ketiga dengan tautan kembali dalam memori:
Jika Anda tertarik dengan penjelasan yang lebih detail, video dari Computerphile ini cukup membantu.
Sekarang, ini adalah contoh yang diidealkan. Pada kenyataannya, sebagian besar teks dikompresi dengan kunci sekecil hanya beberapa karakter. Misalnya, kata "the" akan dikompresi bahkan ketika muncul dalam kata-kata seperti "di sana," "mereka," dan "kemudian." Dengan teks berulang, Anda bisa mendapatkan beberapa rasio kompresi gila. Ambil file teks ini dengan kata "howtogeek" berulang 100 kali. File teks asli berukuran tiga kilobyte. Ketika dimampatkan, meskipun, hanya membutuhkan 158 byte. Itu hampir 95% kompresi.
Algoritma LZ77 ini berlaku untuk semua data biner, by the way, dan bukan hanya teks, meskipun teks umumnya lebih mudah untuk dikompres karena berapa banyak kata yang berulang yang digunakan sebagian besar bahasa. Bahasa seperti bahasa Cina mungkin sedikit lebih sulit dikompres daripada bahasa Inggris, misalnya.
Bagaimana Cara Kerja Kompresi Gambar dan Video?
Inilah yang mengarah ke JPEG yang tampak mengerikan yang telah diunggah, dibagikan, dan disaring beberapa kali. Setiap kali gambar dikompres, ia kehilangan beberapa data.
Ini contohnya. Ini adalah screenshot yang saya ambil yang belum dikompresi sama sekali.
Nah, ini hanya skenario terburuk, mengekspor pada kualitas JPEG 0% setiap kali. Sebagai perbandingan, ini adalah JPEG kualitas 50%, yang hampir tidak dapat dibedakan dari gambar sumber PNG kecuali Anda meledakkannya dan memeriksanya.
Jadi bagaimana cara menyimpan begitu banyak ruang? Yah, algoritma JPEG adalah prestasi teknik. Sebagian besar gambar menyimpan daftar angka, dengan setiap angka mewakili satu piksel.
JPEG tidak melakukan semua ini. Sebaliknya, menyimpan gambar menggunakan sesuatu yang disebut Discrete Cosine Transform, yang merupakan kumpulan gelombang sinus yang ditambahkan bersama-sama pada berbagai intensitas. Ini menggunakan 64 persamaan yang berbeda, tetapi sebagian besar tidak digunakan. Ini adalah slider kualitas untuk JPEG di Photoshop dan aplikasi gambar lainnya - pilih berapa banyak persamaan yang akan digunakan. Aplikasi kemudian menggunakan pengkodean Huffman untuk mengurangi ukuran file lebih jauh.
Ini memberikan JPEGs rasio kompresi yang sangat tinggi, yang dapat mengurangi file yang akan menjadi beberapa megabyte ke beberapa kilobyte, tergantung pada kualitas. Tentu saja, jika Anda menggunakannya terlalu banyak, Anda akan berakhir dengan ini:
Kompresi Video
Kami menggunakan sesuatu yang disebut "interframe compression," yang menghitung perubahan antara setiap frame dan hanya menyimpannya. Jadi, misalnya, jika Anda memiliki pemotretan yang relatif diam yang memerlukan beberapa detik dalam suatu video, banyak ruang yang disimpan karena algoritme kompresi tidak perlu menyimpan semua hal dalam adegan yang tidak berubah. Kompresi Interframe adalah alasan utama kami memiliki TV digital dan video web sama sekali. Tanpa itu, video akan menjadi ratusan gigabyte, lebih dari ukuran hard drive rata-rata pada tahun 2005 ketika YouTube diluncurkan.
Juga, karena kompresi interframe bekerja paling baik dengan kebanyakan video stasioner, inilah alasan mengapa confetti merusak kualitas video.
Catatan: GIF tidak melakukan ini, itulah mengapa animasi GIF seringkali sangat pendek dan kecil, tetapi masih memiliki ukuran file yang cukup besar.
Hal lain yang perlu diingat tentang video adalah bitrate-nya - jumlah data yang diizinkan dalam setiap detik. Jika bitrate Anda 200 kb / s, misalnya, video Anda akan terlihat sangat buruk. Kualitas naik saat bitrate naik, tetapi setelah beberapa megabyte per detik, Anda mendapatkan hasil yang semakin berkurang.
Ini adalah bingkai diperbesar yang diambil dari video ubur-ubur. Yang di sebelah kiri adalah 3Mb / s, dan yang di sebelah kanan adalah 100Mb / dtk.
Demo ini berfungsi lebih baik dengan video sebenarnya, jadi jika Anda ingin memeriksanya sendiri, Anda dapat mengunduh video pengujian bitrate yang sama yang digunakan di sini.
Kompresi Audio
MP3 juga menggunakan bitrate, mulai dari low end 48 dan 96 kbps (low end) hingga 128 dan 240kbps (cukup bagus) hingga 320kbps (audio high-end), dan Anda mungkin hanya akan mendengar perbedaan dengan headphone yang sangat baik ( dan telinga).
Ada juga codec kompresi lossless untuk audio - yang utama adalah FLAC - yang menggunakan pengkodean LZ77 untuk menghasilkan audio yang sepenuhnya tanpa kehilangan. Beberapa orang bersumpah dengan kualitas audio FLAC yang sempurna, tetapi dengan prevalensi MP3, tampaknya kebanyakan orang tidak dapat mengatakan atau tidak keberatan perbedaannya.