Laman » bagaimana untuk » Bagaimana Kerja Mampatan Fail?

    Bagaimana Kerja Mampatan Fail?

    Jurutera perisian sentiasa mengembangkan cara baru untuk memuat banyak data ke ruang kecil. Memang benar apabila cakera keras kami kecil, dan kemunculan internet telah menjadikannya lebih kritikal. Mampatan fail memainkan peranan yang besar dalam menghubungkan kami, membiarkan kami menghantar data kurang ke garisan supaya kami dapat memuat turun lebih pantas dan muat lebih banyak sambungan ke rangkaian yang sibuk.

    Jadi Bagaimana Ia berfungsi?

    Untuk menjawab soalan itu akan melibatkan menjelaskan beberapa matematik yang sangat rumit, tentunya lebih daripada yang kita dapat sampaikan dalam artikel ini, tetapi anda tidak perlu memahami dengan tepat bagaimana ia berfungsi secara matematik untuk memahami asas-asas.

    Perpustakaan yang paling popular untuk memampatkan teks bergantung kepada dua algoritma pemampatan, menggunakan kedua-dua pada masa yang sama untuk mencapai nisbah mampatan yang sangat tinggi. Kedua-dua algoritma ini adalah "LZ77" dan "Huffman coding." Pengekodan Huffman agak rumit, dan kita tidak akan terperinci mengenai perkara itu di sini. Terutama, ia menggunakan beberapa matematik mewah untuk memberikan lebih pendek kod binari kepada huruf individu, menyusut saiz fail dalam proses. Jika anda ingin mengetahui lebih lanjut mengenainya, lihat artikel ini mengenai cara kerja kod, atau penjelasan ini oleh Computerphile.

    LZ77, sebaliknya, agak mudah dan adalah apa yang akan kita bicarakan di sini. Ia bertujuan untuk mengeluarkan kata-kata pendua dan menggantikannya dengan "kunci" yang lebih kecil yang mewakili perkataan.

    Ambil sekeping teks pendek ini sebagai contoh:

    Algoritma LZ77 akan melihat teks ini, sedar bahawa ia mengulangi "howtogeek" tiga kali, dan mengubahnya kepada:

    Kemudian, apabila ia mahu membaca kembali teks, ia akan menggantikan setiap contoh (h) dengan "howtogeek," membawa kita kembali ke frasa asal.

    Kami memanggil pemampatan seperti ini "lossless" -data yang anda masukkan adalah sama seperti data yang anda keluar. Tiada apa-apa yang hilang.

    Pada hakikatnya, LZ77 tidak menggunakan senarai kekunci, tetapi menggantikan kejadian kedua dan ketiga dengan pautan kembali ke ingatan:

    Jadi sekarang, apabila sampai pada (h), ia akan melihat kembali "howtogeek" dan membaca sebaliknya.

    Sekiranya anda berminat dengan penjelasan yang lebih terperinci, video ini dari Computerphile sangat membantu.

    Kini, ini adalah contoh ideal. Pada hakikatnya, kebanyakan teks dimampatkan dengan kunci sekecil hanya dengan beberapa aksara. Sebagai contoh, perkataan "the" akan dimampatkan walaupun ia muncul dalam kata-kata seperti "di sana," "mereka," dan "kemudian." Dengan teks berulang, anda boleh mendapatkan beberapa nisbah mampatan gila. Ambil fail teks ini dengan perkataan "howtogeek" diulang 100 kali. Fail teks asal adalah tiga kilobyte. Walau bagaimanapun, apabila dimampatkan ia hanya memerlukan 158 bait. Itulah hampir mampatan 95%.

    Kini jelas sekali, itulah contoh yang sangat melampau kerana kami hanya mempunyai kata yang sama berulang kali. Amalan umum, anda mungkin akan mendapat sekitar 30-40% mampatan menggunakan format mampatan seperti ZIP pada fail yang kebanyakannya teks.

    Algoritma LZ77 ini terpakai kepada semua data binari, dengan cara, dan bukan hanya teks, walaupun teks umumnya lebih mudah untuk dimampatkan kerana berapa banyak kata yang berulang yang digunakan oleh kebanyakan bahasa. Contohnya bahasa seperti Cina mungkin agak sukar untuk dimampatkan daripada bahasa Inggeris.

    Bagaimana Kerja Pemampatan Imej dan Video?

    Pemampatan video dan audio berfungsi dengan sangat berbeza. Tidak seperti teks di mana anda boleh mempunyai mampatan tanpa kehilangan, dan tiada data yang hilang, dengan imej yang kami ada yang disebut "Mampatan Lossy" di mana anda kehilangan beberapa data. Dan semakin banyak anda memampatkan, lebih banyak data yang anda kalahkan.

    Inilah yang membawa kepada JPEG yang mengerikan bahawa orang telah memuat naik, dikongsi, dan dimuat naik beberapa kali. Setiap kali imej dimampatkan, ia kehilangan beberapa data.

    Contohnya. Ini adalah tangkapan skrin yang saya ambil yang belum dimampatkan sama sekali.

    Saya kemudian mengambil gambar itu dan berlari melalui Photoshop beberapa kali, setiap kali mengeksportnya sebagai JPEG berkualiti rendah. Inilah hasilnya.

    Kelihatan sangat buruk, betul?

    Nah, ini hanya senario terburuk, mengeksport pada kualiti JPEG 0% setiap kali. Sebagai perbandingan, inilah kualiti JPEG 50%, yang hampir tidak boleh dibezakan daripada imej PNG sumber kecuali anda meletupkannya dan melihat.

    PNG untuk imej ini bersaiz 200 KB, tetapi kualiti JPEG 50% ini hanya 28 KB.

    Jadi bagaimana ia menjimatkan banyak ruang? Nah, algoritma JPEG adalah kejayaan kejuruteraan. Kebanyakan imej menyimpan senarai nombor, dengan setiap nombor mewakili piksel tunggal.

    JPEG tidak melakukan perkara ini. Sebaliknya, ia menyimpan imej menggunakan sesuatu yang dipanggil Transformasi Diskrit Kosin, yang merupakan koleksi gelombang sinus ditambah bersama-sama dengan pelbagai intensiti. Ia menggunakan 64 persamaan yang berbeza, tetapi kebanyakannya tidak digunakan. Inilah yang slider kualiti JPEG dalam Photoshop dan aplikasi imej lain-memilih berapa banyak persamaan yang digunakan. Apl tersebut kemudian menggunakan pengekodan Huffman untuk mengurangkan saiz fail lebih jauh lagi.

    Ini memberikan JPEG nisbah mampatan yang sangat tinggi, yang boleh mengurangkan fail yang akan menjadi berbilang megabyte hingga beberapa kilobyte, bergantung pada kualiti. Sudah tentu, jika anda menggunakannya terlalu banyak, anda akan berakhir dengan ini:

    Imej itu dahsyat. Tetapi jumlah kecil pemampatan JPEG boleh mempunyai kesan yang signifikan terhadap saiz fail, dan ini menjadikan JPEG sangat berguna untuk pemampatan imej di laman web. Kebanyakan gambar yang anda lihat dalam talian dimampatkan untuk menjimatkan masa muat turun, terutamanya untuk pengguna mudah alih dengan sambungan data yang lemah. Sebenarnya, semua imej di How-To Geek telah dimampatkan untuk membuat halaman memuat lebih cepat, dan anda mungkin tidak perasan.

    Mampatan Video

    Video berfungsi sedikit berbeza dari imej. Anda akan berfikir bahawa mereka hanya akan memampatkan setiap bingkai video menggunakan JPEG, dan mereka pasti melakukannya, tetapi ada kaedah yang lebih baik untuk video.

    Kami menggunakan sesuatu yang dipanggil "mampatan interframe," yang menghitung perubahan antara setiap bingkai dan hanya menyimpannya. Contohnya, jika anda mempunyai pukulan yang agak tetap yang mengambil beberapa saat dalam video, banyak ruang disimpan kerana algoritma pemampatan tidak perlu menyimpan semua benda di tempat kejadian yang tidak berubah. Mampatan interframe adalah sebab utama kami mempunyai TV digital dan video web sama sekali. Tanpa itu, video akan beratus-ratus gigabait, lebih daripada saiz cakera keras pada tahun 2005 apabila YouTube dilancarkan.

    Juga, kerana mampatan interframe berfungsi dengan kebanyakan video pegun, ini adalah mengapa komposit merosakkan kualiti video.

    Nota: GIF tidak melakukan ini, sebab itu GIF animasi sering sangat pendek dan kecil, tetapi masih mempunyai saiz fail yang cukup besar.

    Satu lagi perkara yang perlu diingat tentang video adalah bitrate-jumlah data yang dibenarkan dalam setiap saat. Jika bitrate anda 200 kb / s, misalnya, video anda akan kelihatan buruk. Kualiti meningkat apabila kadar bit naik, tetapi selepas beberapa megabait sesaat, anda mendapat pulangan yang semakin berkurang.

    Ini adalah bingkai zoom yang diambil dari video ubur-ubur. Yang di sebelah kiri adalah pada 3Mb / s, dan yang di sebelah kanan adalah 100Mb / s.

    Saiz 30x dalam saiz fail, tetapi tidak banyak peningkatan dalam kualiti. Umumnya, video YouTube duduk sekitar 2-10Mb / s bergantung kepada sambungan anda, kerana apa-apa yang lebih mungkin tidak akan diperhatikan.

    Demo ini berfungsi dengan lebih baik dengan video sebenar, jadi jika anda ingin menyemak sendiri, anda boleh memuat turun video uji bitrate yang sama di sini.

    Pemampatan Audio

    Mampatan audio berfungsi dengan sangat sama seperti teks dan pemampatan imej. Di mana JPEG memadam terperinci dari imej yang tidak akan dapat dilihat, pemampatan audio tidak sama untuk bunyi. Anda mungkin tidak perlu mendengar jeritan gitar pada rentetan jika gitar sebenar jauh lebih kuat.

    MP3 juga menggunakan bitrate, dari hujung rendah 48 dan 96 kbps (akhir rendah) hingga 128 dan 240kbps (cukup bagus) hingga 320kbps (audio high-end), dan anda mungkin hanya mendengar perbezaan dengan fon kepala yang sangat baik ( dan telinga).

    Terdapat juga codec pemampatan tanpa hos untuk audio-utama yang menjadi FLAC-yang menggunakan pengekodan LZ77 untuk menyampaikan audio yang sepenuhnya tidak luput. Sesetengah orang bersumpah dengan kualiti audio yang sempurna FLAC, tetapi dengan kelaziman MP3, nampaknya kebanyakan orang tidak boleh memberitahu atau tidak keberatan perbezaan.