If-Koubou

Bagaimana Cara Kerja Kompresi File?

Bagaimana Cara Kerja Kompresi File? (Bagaimana caranya)

Insinyur perangkat lunak selalu mengembangkan cara baru untuk menyetel banyak data ke dalam ruang kecil. Memang benar ketika hard drive kami kecil, dan munculnya internet baru saja membuatnya lebih kritis. Kompresi file memainkan peranan besar dalam menghubungkan kita, membiarkan kita mengirim lebih sedikit data ke bawah sehingga kita dapat mengunduh lebih cepat dan menyesuaikan 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 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 algoritma 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:

Algoritma LZ77 akan melihat pada teks ini, menyadari bahwa itu mengulangi "howtogeek" tiga kali, dan mengubahnya menjadi ini:

Kemudian, ketika ingin membaca teks kembali, itu akan menggantikan setiap contoh 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.

Kenyataannya, LZ77 tidak menggunakan daftar kunci, melainkan menggantikan kejadian kedua dan ketiga dengan tautan kembali dalam memori:

Jadi sekarang, ketika sampai (h), ia akan melihat kembali ke “howtogeek” dan membaca itu sebagai gantinya.

Jika Anda tertarik pada penjelasan yang lebih rinci, 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.

Sekarang jelas, itu contoh yang cukup ekstrim karena kami baru saja mengulang kata yang sama berulang kali. Dalam praktik umum, Anda mungkin akan mendapatkan sekitar 30-40% kompresi menggunakan format kompresi seperti ZIP pada file yang sebagian besar teks.

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?

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 yang kita miliki apa yang disebut "Lossy Compression" di mana Anda kehilangan beberapa data. Dan semakin banyak Anda kompres, semakin banyak data yang hilang.

Inilah yang mengarah ke JPEG yang tampak mengerikan yang telah diunggah, dibagikan, dan disaring beberapa kali. Setiap kali gambar dikompres, ia kehilangan beberapa data.

Inilah contohnya. Ini adalah screenshot yang saya ambil yang belum dikompresi sama sekali.

Saya kemudian mengambil tangkapan layar itu dan menjalankannya melalui Photoshop beberapa kali, setiap kali mengekspornya sebagai JPEG berkualitas rendah. Inilah hasilnya.

Terlihat sangat buruk, kan?

Nah, ini hanya skenario terburuk, mengekspor pada kualitas JPEG 0% setiap kali. Sebagai perbandingan, inilah JPEG kualitas 50%, yang hampir tidak dapat dibedakan dari gambar sumber PNG kecuali Anda meledakkannya dan memeriksanya.

PNG untuk gambar ini berukuran 200 KB, tetapi JPEG kualitas 50% ini hanya 28 KB.

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. Menggunakan 64 persamaan yang berbeda, tetapi sebagian besar tidak digunakan. Inilah yang disebut 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:

Gambar itu mengerikan. Tetapi kompresi JPEG dalam jumlah kecil dapat memiliki dampak yang signifikan terhadap ukuran file, dan ini membuat JPEG sangat berguna untuk kompresi gambar di situs web. Sebagian besar gambar yang Anda lihat online dikompresi untuk menghemat waktu unduh, terutama untuk pengguna seluler dengan koneksi data yang buruk. Bahkan, semua gambar di How-To Geek telah dikompresi 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 pasti melakukan itu, tetapi ada metode yang lebih baik untuk 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 membutuhkan beberapa detik dalam suatu video, banyak ruang yang disimpan karena algoritme kompresi tidak perlu menyimpan semua barang 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-banyaknya 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.

Peningkatan 30x dalam ukuran file, tetapi tidak banyak peningkatan kualitas. Umumnya, video YouTube duduk sekitar 2-10Mb / dtk tergantung koneksi Anda, karena hal lain mungkin tidak akan diperhatikan.

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

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 gitar pick pada senar jika gitar sebenarnya jauh lebih keras.

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 lossless sepenuhnya. Beberapa orang bersumpah dengan kualitas audio FLAC yang sempurna, tetapi dengan prevalensi MP3, tampaknya kebanyakan orang tidak dapat mengatakan atau tidak keberatan perbedaannya.