Bagaimana cara kerja kompresi file?
Insinyur perangkat lunak selalu mengembangkan cara baru untuk menyesuaikan banyak data ke dalam ruang kecil. Memang benar ketika hard drive kita kecil, dan munculnya internet baru saja membuatnya lebih kritis. Kompresi file berperan besar dalam menghubungkan kami, memungkinkan kami mengirimkan lebih sedikit data sehingga kami dapat mengunduh lebih cepat dan memasukkan lebih banyak koneksi ke jaringan yang sibuk.
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 persis 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 algoritma ini adalah "LZ77" dan "Pengkodean Huffman." Pengkodean Huffman cukup rumit, dan kami tidak akan membahas detailnya di sini. Terutama, ini menggunakan beberapa matematika mewah untuk menetapkan lebih pendek kode biner untuk setiap huruf, menyusutkan ukuran file dalam proses. Jika Anda ingin mempelajari lebih lanjut tentang hal ini, lihat artikel ini tentang cara kode bekerja, atau penjelasan oleh Computerphile ini.
LZ77, di sisi lain, relatif sederhana dan apa yang akan kita bicarakan di sini. Itu berusaha untuk menghapus kata-kata duplikat dan menggantinya dengan "kunci" yang lebih kecil yang mewakili kata.
Ambil potongan teks pendek ini misalnya:
Algoritma LZ77 akan melihat teks ini, menyadari bahwa ia mengulangi "howtogeek" tiga kali, dan mengubahnya menjadi ini:
Kemudian, ketika ingin membaca teks kembali, itu akan menggantikan setiap instance dari (h) dengan "howtogeek," membawa kita kembali ke frasa asli.
Kami menyebut kompresi seperti ini "lossless" - data yang Anda masukkan sama dengan data yang Anda dapatkan. Tidak ada yang hilang.
Pada kenyataannya, LZ77 tidak menggunakan daftar kunci, tetapi menggantikan kejadian kedua dan ketiga dengan tautan kembali di memori:
Jadi sekarang, ketika sampai ke (h), itu akan melihat kembali ke "howtogeek" dan membacanya.
Jika Anda tertarik dengan penjelasan yang lebih rinci, video dari Computerphile ini cukup membantu.
Sekarang, ini adalah contoh ideal. Pada kenyataannya, sebagian besar teks dikompres dengan tombol sekecil hanya beberapa karakter. Misalnya, kata "the" akan dikompres 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" diulang 100 kali. File teks asli berukuran tiga kilobyte. Namun ketika dikompresi, itu hanya membutuhkan 158 byte. Itu hampir 95% kompresi.
Jelas, itu adalah contoh yang cukup ekstrem karena kita hanya mengulangi kata yang sama. Dalam praktik umum, Anda mungkin akan mendapatkan kompresi sekitar 30-40% menggunakan format kompresi seperti ZIP pada file yang sebagian besar berupa teks.
Algoritma LZ77 ini berlaku untuk semua data biner, omong-omong, dan bukan hanya teks, meskipun teks umumnya lebih mudah untuk dikompres karena banyaknya kata yang diulang yang digunakan kebanyakan bahasa. Bahasa seperti bahasa Cina mungkin sedikit lebih sulit untuk dikompres daripada bahasa Inggris, misalnya.
Bagaimana Cara Kerja Kompresi Gambar dan Video?
Kompresi video dan audio bekerja sangat berbeda. Berbeda dengan teks di mana Anda dapat memiliki kompresi lossless, dan tidak ada data yang hilang, dengan gambar kami memiliki apa yang disebut "Kompresi Rugi" di mana Anda kehilangan beberapa data. Dan semakin Anda kompres, semakin banyak data yang hilang.
Inilah yang menyebabkan JPEG yang tampak mengerikan yang telah diunggah, dibagikan, dan di-screenshoot berkali-kali. Setiap kali gambar dikompresi, ia kehilangan beberapa data.
Ini sebuah contoh. Ini adalah tangkapan layar yang saya ambil yang belum dikompresi sama sekali.
Saya kemudian mengambil screenshot itu dan menjalankannya melalui Photoshop beberapa kali, setiap kali mengekspornya sebagai JPEG berkualitas rendah. Inilah hasilnya.
Terlihat sangat buruk, benar?
Yah, ini hanya skenario terburuk, mengekspor pada kualitas JPEG 0% setiap kali. Sebagai perbandingan, inilah JPEG kualitas 50%, yang hampir tidak dapat dibedakan dari sumber gambar PNG kecuali Anda meledakkannya dan melihatnya dari dekat..
PNG untuk gambar ini berukuran 200 KB, tetapi kualitas JPEG 50% ini hanya 28 KB.
Jadi bagaimana cara menghemat banyak ruang? Algoritme JPEG adalah prestasi teknik. Sebagian besar gambar menyimpan daftar angka, dengan masing-masing angka mewakili satu piksel.
JPEG tidak melakukan ini. Sebagai gantinya, ia menyimpan gambar menggunakan sesuatu yang disebut Discrete Cosine Transform, yang merupakan kumpulan gelombang sinus yang ditambahkan bersama pada berbagai intensitas. Ini menggunakan 64 persamaan yang berbeda, tetapi sebagian besar tidak digunakan. Inilah yang dilakukan 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 JPEG rasio kompresi sangat tinggi, yang dapat mengurangi file yang akan menjadi beberapa megabita hingga beberapa kilobyte, tergantung pada kualitasnya. Tentu saja, jika Anda menggunakannya terlalu banyak, Anda berakhir dengan ini:
Gambar itu mengerikan. Tetapi sejumlah kecil kompresi JPEG dapat memiliki dampak signifikan pada ukuran file, dan ini membuat JPEG sangat berguna untuk kompresi gambar di situs web. Sebagian besar gambar yang Anda lihat online dikompres untuk menghemat waktu unduhan, terutama untuk pengguna seluler dengan koneksi data yang buruk. Faktanya, semua gambar di How-To Geek telah dikompres untuk membuat pemuatan halaman lebih cepat, dan Anda mungkin tidak pernah menyadarinya.
Kompresi Video
Video bekerja sedikit berbeda dari gambar. Anda akan berpikir bahwa mereka hanya akan memampatkan setiap frame video menggunakan JPEG, dan mereka tentu saja melakukannya, tetapi ada metode yang lebih baik untuk video.
Kami menggunakan sesuatu yang disebut "kompresi antar bingkai," yang menghitung perubahan antara setiap frame dan hanya menyimpannya. Jadi, misalnya, jika Anda memiliki bidikan yang relatif masih membutuhkan beberapa detik dalam sebuah video, banyak ruang yang dihemat karena algoritma kompresi tidak perlu menyimpan semua hal di adegan yang tidak berubah. Kompresi antarframe adalah alasan utama kami memiliki TV digital dan video web sama sekali. Tanpa itu, video akan menjadi ratusan gigabyte, lebih dari ukuran rata-rata hard drive pada tahun 2005 ketika YouTube diluncurkan.
Juga, karena kompresi antarframe bekerja paling baik dengan sebagian besar video yang tidak bergerak, inilah mengapa confetti merusak kualitas video.
Catatan: GIF tidak melakukan ini, itulah sebabnya animasi GIF seringkali sangat pendek dan kecil, tetapi masih memiliki ukuran file yang cukup besar.
Satu hal yang perlu diingat tentang video adalah bitrate-nya jumlah data yang diperbolehkan dalam setiap detik. Jika bitrate Anda 200 kb / s, misalnya, video Anda akan terlihat sangat buruk. Kualitas naik seiring laju bit naik, tetapi setelah beberapa megabyte per detik, Anda mendapatkan hasil yang semakin berkurang.
Ini adalah bingkai yang diperbesar yang diambil dari video ubur-ubur. Yang di sebelah kiri adalah 3Mb / s, dan yang di sebelah kanan adalah 100Mb / s.
Peningkatan ukuran file 30x, tetapi tidak banyak peningkatan kualitas. Secara umum, video YouTube berada di sekitar 2-10Mb / s tergantung pada koneksi Anda, karena apa pun yang lebih mungkin tidak akan diperhatikan.
Demo ini bekerja lebih baik dengan video aktual, jadi jika Anda ingin memeriksanya sendiri, Anda dapat mengunduh video uji bitrate yang sama dengan yang digunakan di sini.
Kompresi Audio
Kompresi audio bekerja sangat mirip dengan kompresi teks dan gambar. Di mana JPEG menghapus detail dari gambar yang tidak akan Anda lihat, kompresi audio melakukan hal yang sama untuk suara. Anda mungkin tidak perlu mendengar derit pick gitar pada senar jika gitar yang sebenarnya jauh, lebih keras.
MP3 juga menggunakan bitrate, mulai dari low end 48 dan 96 kbps (low end) hingga 128 dan 240kbps (lumayan bagus) hingga 320kbps (audio high-end), dan Anda mungkin hanya akan mendengar perbedaannya dengan headphone yang luar biasa bagus ( dan telinga).
Ada juga codec kompresi lossless untuk audio-yang utama adalah FLAC-yang menggunakan pengkodean LZ77 untuk memberikan audio yang sepenuhnya lossless. Beberapa orang bersumpah dengan kualitas audio FLAC yang sempurna, tetapi dengan prevalensi MP3, tampaknya kebanyakan orang tidak tahu atau tidak keberatan bedanya.