الصفحة الرئيسية » howto » كيف عمل ضغط الملفات؟

    كيف عمل ضغط الملفات؟

    لطالما طور مهندسو البرمجيات طرقًا جديدة لملائمة الكثير من البيانات في مساحة صغيرة. كان ذلك صحيحًا عندما كانت محركات الأقراص الصلبة صغيرة جدًا ، وقد جعل ظهور الإنترنت أكثر أهمية. يلعب ضغط الملفات دورًا كبيرًا في الاتصال بنا ، مما يسمح لنا بإرسال بيانات أقل إلى أسفل الخط حتى يتسنى لنا الحصول على تنزيلات أسرع وتناسب المزيد من الاتصالات على الشبكات المزدحمة.

    فكيف يعمل?

    للإجابة على هذا السؤال قد ينطوي على تفسير بعض الرياضيات المعقدة للغاية ، وبالتأكيد أكثر مما يمكن أن نغطيه في هذه المقالة ، لكنك لست بحاجة إلى أن تفهم بدقة كيف تعمل رياضياً لفهم الأساسيات..

    تعتمد المكتبات الأكثر شيوعًا لضغط النص على خوارزمي ضغط ، باستخدام كلاهما في نفس الوقت لتحقيق نسب ضغط عالية جدًا. هاتان الخوارزمتان هما "LZ77" و "Huffman coding." إن ترميز Huffman معقد للغاية ، ولن نقوم بالتفاصيل على ذلك هنا. في المقام الأول ، فإنه يستخدم بعض الرياضيات الهوى لتعيين أقصر رموز ثنائية إلى الأحرف الفردية ، تقلص أحجام الملفات في العملية. إذا كنت ترغب في معرفة المزيد حول هذا الموضوع ، راجع هذه المقالة حول كيفية عمل الشفرة أو شرح هذا من خلال Computerphile.

    LZ77 ، من ناحية أخرى ، هو بسيط نسبيا وهو ما سنتحدث عنه هنا. وهي تسعى إلى إزالة الكلمات المكررة واستبدالها "بمفتاح" أصغر يمثل الكلمة.

    خذ هذا النص القصير على سبيل المثال:

    ستنظر الخوارزمية LZ77 إلى هذا النص ، وتدرك أنه يكرر "howtogeek" ثلاث مرات ، وتغييره إلى هذا:

    بعد ذلك ، عندما تريد قراءة النص مرة أخرى ، ستحل محل كل حالة (h) بـ "howtogeek" ، مما يعيدنا إلى العبارة الأصلية.

    نحن نطلق على الضغط مثل "فقدان البيانات" - البيانات التي تضعها هي نفس البيانات التي تخرج منها. لا شيء ضائع.

    في الواقع ، لا تستخدم LZ77 قائمة من المفاتيح ، ولكنها بدلاً من ذلك تستبدل الحدث الثاني والثالث مع وجود رابط في الذاكرة:

    إذاً الآن ، عندما تصل إلى (ح) ، سوف تنظر إلى "howtogeek" وتقرأها بدلاً من ذلك.

    إذا كنت مهتمًا بشرح أكثر تفصيلاً ، فإن هذا الفيديو من Computerphile مفيد جدًا.

    الآن ، هذا مثال مثالي. في الواقع ، يتم ضغط معظم النص باستخدام مفاتيح صغيرة مثل عدد قليل من الأحرف. على سبيل المثال ، سيتم ضغط كلمة "the" حتى عندما تظهر في كلمات مثل "there" و "their" و "then". بالنص المتكرر ، يمكنك الحصول على بعض نسب الضغط المجنونة. خذ هذا الملف النصي مع كلمة "howtogeek" تكرارا 100 مرة. الملف النصي الأصلي ثلاثة كيلوبايت في الحجم. عند الضغط ، على الرغم من ذلك ، فإنه يستغرق فقط 158 بايت. هذا ما يقرب من 95 ٪ من الضغط.

    من الواضح الآن ، هذا مثال شديد التطرف حيث أننا نكرر نفس الكلمة مرارًا وتكرارًا. في الممارسة العامة ، من المحتمل أن تحصل على ضغط يتراوح من 30 إلى 40٪ باستخدام تنسيق ضغط مثل ZIP في ملف يكون في الغالب نصًا.

    هذه الخوارزمية LZ77 تنطبق على جميع البيانات الثنائية ، بالمناسبة ، وليس فقط النص ، على الرغم من أن النص بشكل عام أسهل للضغط بسبب عدد الكلمات المتكررة التي تستخدمها معظم اللغات. قد تكون لغة مثل اللغة الصينية أصعب قليلاً من الإنجليزية ، على سبيل المثال.

    كيف تعمل الصور وضغط الفيديو?

    يعمل ضغط الفيديو والصوت بشكل مختلف تمامًا. على عكس النص حيث يمكنك الحصول على ضغط بدون فقدان ، ولا يتم فقد أية بيانات ، مع الصور لدينا ما يسمى ب "ضياع الضغط" حيث تفقد بعض البيانات. وكلما ضغطت ، زادت البيانات التي تفقدها.

    هذا هو ما يؤدي إلى تلك JPEGs الرهيبة التي قام الناس بتحميلها ومشاركتها ، ومسقطها عدة مرات. في كل مرة يتم ضغط الصورة ، تفقد بعض البيانات.

    وهنا مثال على ذلك. هذه لقطة التقطتها ولم يتم ضغطها على الإطلاق.

    ثم أخذت لقطة الشاشة هذه وركضت عليها من خلال Photoshop عدة مرات ، كل مرة تصديرها باعتبارها JPEG منخفضة الجودة. وهنا النتيجة.

    يبدو سيئا جدا ، صحيح?

    حسنا ، هذا هو السيناريو الأسوأ فقط ، حيث يتم تصدير جودة JPEG 0٪ في كل مرة. للمقارنة ، هنا جودة JPEG بنسبة 50٪ ، والتي لا يمكن تمييزها تقريبًا عن صورة PNG المصدر ما لم تفجرها وتلقي نظرة فاحصة.

    كان حجم ملف PNG لهذه الصورة 200 كيلوبايت ، ولكن هذه الجودة JPEG بنسبة 50٪ هي 28 كيلوبايت فقط.

    إذن ، كيف توفر الكثير من المساحة؟ حسنا ، خوارزمية JPEG هي إنجاز هندسي. تخزن معظم الصور قائمة بالأرقام ، مع كل رقم يمثل بكسل واحد.

    لا يقوم JPEG بأي من ذلك. بدلا من ذلك ، تخزن الصور باستخدام شيء يسمى "تحويل جيب التمام المنفصل" ، وهو عبارة عن مجموعة من موجات الجيب التي تتم إضافتها معًا بكثافة متفاوتة. ويستخدم 64 معادلة مختلفة ، ولكن معظم هذه لا تستخدم. هذا ما يختاره شريط تمرير الجودة لـ JPEG في Photoshop وتطبيقات الصور الأخرى كم المعادلات التي يجب استخدامها. ثم تستخدم التطبيقات ترميز Huffman لتقليل حجم الملف بشكل أكبر.

    وهذا يعطي JPEGs نسبة ضغط عالية بجنون ، والتي يمكن أن تقلل من ملف من شأنه أن يكون عدة ميغابايت إلى بضعة كيلوبايت ، اعتمادا على الجودة. بالطبع ، إذا كنت تستخدمها كثيرًا ، فينتهي بذلك:

    تلك الصورة فظيعة ولكن قد يكون لحد بسيط من ضغط JPEG تأثير كبير على حجم الملف ، وهذا يجعل JPEG مفيدًا جدًا لضغط الصور على مواقع الويب. يتم ضغط معظم الصور التي تشاهدها عبر الإنترنت لتوفيرها في أوقات التنزيل ، خاصة لمستخدمي الجوال الذين لديهم اتصالات بيانات ضعيفة. في الواقع ، تم ضغط جميع الصور على How-To Geek لجعل تحميل الصفحات أسرع ، وربما لم يلاحظك.

    ضغط الفيديو

    يعمل الفيديو بطريقة مختلفة بعض الشيء عن الصور. كنت أعتقد أنها مجرد ضغط كل إطار من الفيديو باستخدام JPEG ، وبالتأكيد يفعلون ذلك ، ولكن هناك طريقة أفضل للفيديو.

    نستخدم شيئًا يسمى "ضغط الإطار البيني" ، والذي يحسب التغييرات بين كل إطار ويخزنها فقط. لذلك ، على سبيل المثال ، إذا كان لديك لقطة ثابتة نسبيًا تستغرق عدة ثوانٍ في الفيديو ، فسيتم حفظ الكثير من المساحة لأن خوارزمية الضغط لا تحتاج إلى تخزين كل العناصر في المشهد الذي لا يتغير. ضغط الإطار البيني هو السبب الرئيسي في أن لدينا تلفازًا رقميًا وفيديو الويب على الإطلاق. وبدون ذلك ، ستكون مقاطع الفيديو مئات الجيجابايت ، أكثر من متوسط ​​حجم محرك الأقراص الثابتة في عام 2005 عند إطلاق YouTube.

    أيضا ، لأن الضغط interframe يعمل بشكل أفضل مع الفيديو الثابت في الغالب ، وهذا هو السبب في أن النثار تفسد جودة الفيديو.

    ملاحظة: لا يقوم GIF بهذا ، ولهذا السبب غالبًا ما تكون صور GIF المتحركة صغيرة جدًا وصغيرة ، ولكن لا يزال حجم الملف كبير جدًا.

    هناك شيء آخر يجب أخذه في الاعتبار حول الفيديو وهو معدل البت فيه - كمية البيانات المسموح بها في كل ثانية. إذا كان معدل البت الخاص بك هو 200 كيلوبت / ثانية ، على سبيل المثال ، سيبدو الفيديو الخاص بك سيئًا جدًا. ترتفع الجودة مع ارتفاع معدل البت ، ولكن بعد بضع ميغابايت في الثانية ، ستحصل على عوائد متناقصة.

    هذا هو إطار مكبرة مأخوذة من شريط فيديو لسمكة قنديل البحر. واحد على اليسار هو في 3MB / s ، والآخر على اليمين هو 100MB / ثانية.

    زيادة بمقدار 30 ضعفًا في حجم الملف ، ولكن ليس زيادة في الجودة. عمومًا ، تتراوح مدة مقاطع فيديو YouTube من 2 إلى 10 ميغابايت / ثانية اعتمادًا على اتصالك ، نظرًا لأنه من المحتمل ألا يتم ملاحظة أي شيء آخر.

    يعمل هذا العرض التوضيحي بشكل أفضل مع الفيديو الفعلي ، لذلك إذا كنت ترغب في التحقق من ذلك بنفسك ، يمكنك تنزيل نفس مقاطع فيديو اختبار معدل البت المستخدمة هنا.

    ضغط الصوت

    يعمل ضغط الصوت بشكل مشابه جدًا على ضغط النص والصورة. عندما تقوم JPEG بإزالة التفاصيل من صورة لن تراها ، فإن ضغط الصوت يقوم بنفس الشيء بالنسبة للأصوات. قد لا تحتاج إلى سماع صرير اختيار الغيتار على الخيط إذا كان الغيتار الفعلي أكبر بكثير.

    يستخدم MP3 أيضًا معدل البت ، بدءًا من الطرف المنخفض من 48 و 96 كيلوبت في الثانية (النهاية المنخفضة) إلى 128 و 240 كيلوبت في الثانية (جيد جدًا) إلى 320 كيلوبت في الثانية (الصوت المتطور) ، ومن المرجح أن تسمع الفرق فقط مع سماعات رأس استثنائية جيدة ( وآذان).

    وهناك أيضًا برامج تشفير للضغط بدون فقدان للصوت - الصوت الرئيسي ، وهو FLAC - والذي يستخدم ترميز LZ77 لتقديم صوت بدون ضياع تمامًا. بعض الناس يقسمون بجودة صوت FLAC الممتازة ، ولكن مع انتشار MP3 ، يبدو أن معظم الناس إما لا يستطيعون إخبارهم أو لا يمانعون الفرق.