फ़ाइल संपीड़न कैसे काम करता है?
सॉफ्टवेयर इंजीनियरों ने हमेशा बहुत सारे डेटा को एक छोटी सी जगह में फिट करने के नए तरीके विकसित किए हैं। यह सच था जब हमारे हार्ड ड्राइव छोटे थे, और इंटरनेट के आगमन ने इसे और अधिक महत्वपूर्ण बना दिया है। फ़ाइल संपीड़न हमें जोड़ने में एक बड़ी भूमिका निभाता है, हमें लाइन के नीचे कम डेटा भेजने देता है ताकि हम तेजी से डाउनलोड कर सकें और व्यस्त नेटवर्क पर अधिक कनेक्शन फिट कर सकें।.
तो यह कैसे काम करता है?
इस प्रश्न का उत्तर देने के लिए कि कुछ बहुत ही जटिल गणित की व्याख्या करना शामिल है, निश्चित रूप से अधिक से अधिक हम इस लेख में शामिल कर सकते हैं, लेकिन आपको यह समझने की आवश्यकता नहीं है कि मूल बातें समझने के लिए यह गणितीय रूप से कैसे काम करता है।.
पाठ को संपीड़ित करने के लिए सबसे लोकप्रिय पुस्तकालय दो संपीड़न एल्गोरिदम पर भरोसा करते हैं, दोनों एक ही समय में बहुत उच्च संपीड़न अनुपात प्राप्त करने के लिए उपयोग करते हैं। ये दो एल्गोरिदम "LZ77" और "हफ़मैन कोडिंग" हैं। हफ़मैन कोडिंग काफी जटिल है, और हम यहाँ उस पर विस्तार से नहीं जाएंगे। मुख्य रूप से, यह छोटे को असाइन करने के लिए कुछ फैंसी गणित का उपयोग करता है बाइनरी कोड अलग-अलग अक्षरों में, प्रक्रिया में फ़ाइल के आकार को सिकोड़ना। यदि आप इसके बारे में अधिक जानना चाहते हैं, तो इस लेख को देखें कि कोड कैसे काम करता है, या कंप्यूटरफाइल द्वारा यह व्याख्याकार.
दूसरी ओर, LZ77 अपेक्षाकृत सरल है और हम यहां बात कर रहे हैं। यह डुप्लिकेट शब्दों को हटाने और उन्हें एक छोटे "कुंजी" के साथ बदलना चाहता है जो शब्द का प्रतिनिधित्व करता है.
उदाहरण के लिए पाठ का यह छोटा टुकड़ा लें:
LZ77 एल्गोरिथ्म इस पाठ को देखेगा, यह महसूस करेगा कि यह तीन बार "howtogeek" को दोहराता है, और इसे इस पर बदलें:
फिर, जब वह पाठ को वापस पढ़ना चाहता है, तो यह "htogeek" के साथ (h) के हर उदाहरण को बदल देगा, हमें मूल वाक्यांश में वापस लाएगा।.
हम इस तरह के "दोषरहित" कॉल को कहते हैं, आपके द्वारा डाला गया डेटा वैसा ही होता है जैसा कि आप डेटा प्राप्त करते हैं। कुछ भी नहीं खोया है.
वास्तव में, LZ77 कुंजी की एक सूची का उपयोग नहीं करता है, लेकिन इसके बजाय स्मृति में एक लिंक के साथ दूसरी और तीसरी घटना की जगह लेता है:
तो अब, जब यह (एच) हो जाता है, तो यह "हाउटोगेक" पर वापस दिखेगा और इसके बजाय इसे पढ़ें.
यदि आप अधिक विस्तृत विवरण में रुचि रखते हैं, तो कंप्यूटरफाइल का यह वीडियो काफी मददगार है.
अब, यह एक आदर्श उदाहरण है। वास्तव में, अधिकांश पाठ कुंजियों के साथ छोटे अक्षरों के समान संकुचित होते हैं। उदाहरण के लिए, "शब्द" तब भी संपीड़ित होगा जब यह "वहां," "उनके", और "तब" जैसे शब्दों में प्रकट होता है। दोहराया पाठ के साथ, आप कुछ पागल संपीड़न अनुपात प्राप्त कर सकते हैं। इस टेक्स्ट फ़ाइल को "हाउटोगेक" शब्द के साथ 100 बार दोहराया गया। मूल पाठ फ़ाइल आकार में तीन किलोबाइट है। जब संकुचित होता है, हालांकि, यह केवल 158 बाइट्स लेता है। यह लगभग 95% संपीड़न है.
अब जाहिर है, यह एक बहुत ही चरम उदाहरण है क्योंकि हमारे पास एक ही शब्द बार-बार दोहराया गया था। सामान्य व्यवहार में, आपको संभवतः लगभग 30-40% कम्प्रेशन मिलेगा, जिसमें जिप जैसी फाइल पर कम्प्रेशन फॉर्मेट का उपयोग करना होगा जो कि ज्यादातर टेक्स्ट है.
यह LZ77 एल्गोरिथ्म सभी द्विआधारी डेटा पर लागू होता है, वैसे, और न केवल पाठ, हालांकि पाठ आमतौर पर कितने शब्दों को दोहराए जाने के कारण संपीड़ित करना आसान होता है। उदाहरण के लिए, अंग्रेजी की तुलना में चीनी जैसी भाषा थोड़ी कठिन हो सकती है.
कैसे छवि और वीडियो संपीड़न काम करता है?
वीडियो और ऑडियो संपीड़न बहुत अलग तरीके से काम करता है। पाठ के विपरीत जहां आप दोषरहित संपीड़न कर सकते हैं, और कोई डेटा नहीं खो जाता है, छवियों के साथ हमने "हानिपूर्ण संपीड़न" कहा है जहां आप कुछ डेटा खो देते हैं। और जितना अधिक आप संपीड़ित करते हैं, उतना ही अधिक डेटा आप खो देते हैं.
यह उन भयानक दिखने वाले जेपीईजी की ओर जाता है जो लोगों ने कई बार अपलोड, साझा और स्क्रीनशोट किए हैं। हर बार छवि संकुचित हो जाती है, यह कुछ डेटा खो देता है.
यहाँ एक उदाहरण है। यह एक ऐसा स्क्रीनशॉट है जिसे मैंने लिया है जो कि संपीड़ित नहीं किया गया है.
फिर मैंने उस स्क्रीनशॉट को लिया और इसे कई बार फ़ोटोशॉप के माध्यम से चलाया, हर बार इसे कम-गुणवत्ता वाले जेपीईजी के रूप में निर्यात किया। यहाँ परिणाम है.
बहुत बुरा लग रहा है, सही है?
खैर, यह केवल सबसे खराब स्थिति है, हर बार 0% जेपीईजी गुणवत्ता पर निर्यात होता है। तुलना के लिए, यहां 50% गुणवत्ता वाली जेपीईजी है, जो स्रोत पीएनजी छवि से लगभग अप्रभेद्य है जब तक कि आप इसे उड़ा नहीं देते और एक करीब से देख लेते हैं.
इस छवि के लिए PNG का आकार 200 KB था, लेकिन यह 50% गुणवत्ता वाला JPEG केवल 28 KB का है.
तो यह इतनी जगह कैसे बचाता है? खैर, जेपीईजी एल्गोरिथ्म इंजीनियरिंग का एक करतब है। अधिकांश चित्र संख्याओं की एक सूची संग्रहीत करते हैं, प्रत्येक संख्या एक एकल पिक्सेल का प्रतिनिधित्व करती है.
JPEG इसमें से कुछ भी नहीं करता है। इसके बजाय, यह एक असतत कोसाइन ट्रांसफॉर्म नामक एक चीज का उपयोग करके छवियों को संग्रहीत करता है, जो अलग-अलग तीव्रता पर एक साथ जोड़े गए साइन तरंगों का एक संग्रह है। यह 64 विभिन्न समीकरणों का उपयोग करता है, लेकिन इनमें से अधिकांश का उपयोग नहीं किया जाता है। यह वही है जो फ़ोटोशॉप में जेपीईजी और अन्य छवि ऐप के लिए गुणवत्ता स्लाइडर का उपयोग करता है कि कितने समीकरणों का उपयोग करना है। ऐप्स तब फ़ाइल आकार को और भी कम करने के लिए हफ़मैन एन्कोडिंग का उपयोग करते हैं.
यह जेपीईजी को एक अत्यधिक उच्च संपीड़न अनुपात देता है, जो एक फ़ाइल को कम कर सकता है जो कि गुणवत्ता के आधार पर, कुछ मेगाबाइट के एक जोड़े से कई किलोबाइट तक कम हो सकता है। बेशक, यदि आप इसे बहुत अधिक उपयोग करते हैं, तो आप इसे समाप्त करते हैं:
वह छवि भयानक है। लेकिन जेपीईजी कम्प्रेशन की मामूली मात्रा फ़ाइल आकार पर महत्वपूर्ण प्रभाव डाल सकती है, और यह जेपीईजी वेबसाइटों पर छवि संपीड़न के लिए बहुत उपयोगी है। अधिकांश चित्र जिन्हें आप ऑनलाइन देखते हैं, वे डाउनलोड समय पर सहेजने के लिए संपीड़ित होते हैं, विशेष रूप से खराब डेटा कनेक्शन वाले मोबाइल उपयोगकर्ताओं के लिए। वास्तव में, हाउ-टू गीक पर सभी छवियों को पेज लोडिंग तेज बनाने के लिए संकुचित किया गया है, और आपने शायद कभी ध्यान नहीं दिया है.
वीडियो संपीड़न
वीडियो छवियों से थोड़ा अलग काम करता है। आपको लगता है कि वे सिर्फ JPEG का उपयोग करके वीडियो के प्रत्येक फ्रेम को संकुचित करेंगे, और वे निश्चित रूप से ऐसा करते हैं, लेकिन वीडियो के लिए एक बेहतर तरीका है.
हम "इंटरफ़्रेम संपीड़न" नामक कुछ का उपयोग करते हैं, जो प्रत्येक फ्रेम के बीच परिवर्तनों की गणना करता है और केवल उन को संग्रहीत करता है। इसलिए, उदाहरण के लिए, यदि आपके पास एक अपेक्षाकृत अभी भी शॉट है जो एक वीडियो में कई सेकंड लेता है, तो बहुत सारी जगह बच जाती है क्योंकि संपीड़न एल्गोरिदम को दृश्य में सभी सामानों को संग्रहीत करने की आवश्यकता नहीं होती है जो बदलते नहीं हैं। इंटरफ्रेम संपीड़न हम डिजिटल टीवी और वेब वीडियो का मुख्य कारण है। इसके बिना, वीडियो सैकड़ों गीगाबाइट्स होंगे, 2005 में YouTube लॉन्च होने पर औसत हार्ड ड्राइव के आकार से अधिक.
इसके अलावा, चूंकि इंटरफ़्रेम संपीड़न ज्यादातर स्थिर वीडियो के साथ सबसे अच्छा काम करता है, यही कारण है कि कंफ़ेद्दी वीडियो की गुणवत्ता को बर्बाद कर देता है.
नोट: जीआईएफ ऐसा नहीं करता है, यही वजह है कि एनिमेटेड जीआईएफ अक्सर बहुत छोटा और छोटा होता है, लेकिन फिर भी एक बहुत बड़ा फ़ाइल आकार होता है.
वीडियो के बारे में ध्यान रखने वाली एक और बात इसकी बिटरेट है- हर सेकंड में अनुमत डेटा की मात्रा। यदि आपका बिटरेट 200 kb / s है, उदाहरण के लिए, आपका वीडियो बहुत बुरा लगेगा। जैसे ही बिटरेट ऊपर जाता है, गुणवत्ता बढ़ जाती है, लेकिन प्रति सेकंड मेगाबाइट्स के बाद, आपको कम रिटर्न मिलता है.
यह एक जूमफिश के वीडियो से लिया गया ज़ूम ज़ूम है। बाईं ओर एक 3Mb / s पर है, और दाईं ओर एक 100Mb / s है.
फ़ाइल आकार में 30 गुना वृद्धि, लेकिन गुणवत्ता में बहुत अधिक वृद्धि नहीं। आम तौर पर, YouTube वीडियो आपके कनेक्शन के आधार पर 2-10Mb / s के आस-पास बैठते हैं, क्योंकि कुछ भी अधिक ध्यान नहीं दिया जाएगा.
यह डेमो वास्तविक वीडियो के साथ बेहतर काम करता है, इसलिए यदि आप इसे अपने लिए देखना चाहते हैं, तो आप यहां उपयोग किए गए उसी बिटरेट परीक्षण वीडियो को डाउनलोड कर सकते हैं.
ऑडियो संपीड़न
ऑडियो कंप्रेशन टेक्स्ट और इमेज कंप्रेशन के समान काम करता है। जहाँ JPEG एक इमेज से डिटेल निकालता है जिसे आप नहीं देखेंगे, ऑडियो कम्प्रेशन ध्वनियों के लिए भी यही करता है। यदि वास्तविक गिटार बहुत, बहुत लाउड है, तो आपको स्ट्रिंग पर गिटार पिक की चरमराहट सुनने की आवश्यकता नहीं हो सकती है.
एमपी 3 भी बिटरेट का उपयोग करता है, 48 के अंत और 96 केबीपीएस (कम अंत) से 128 और 240kbps (बहुत अच्छा) से 320kbps (उच्च अंत ऑडियो) तक होता है, और आप केवल असाधारण अच्छे हेडफ़ोन के साथ अंतर सुनेंगे और कान).
ऑडियो के लिए दोषरहित संपीड़न कोडेक्स भी हैं-मुख्य एक है FLAC-जो पूरी तरह से दोषरहित ऑडियो देने के लिए LZ77 एन्कोडिंग का उपयोग करता है। कुछ लोग FLAC की सही ऑडियो क्वालिटी की कसम खाते हैं, लेकिन MP3 के प्रचलन के साथ, ऐसा लगता है कि ज्यादातर लोग या तो यह नहीं बता सकते हैं या उन्हें फर्क नहीं पड़ेगा.