دوماً ما كان يسعى مهندسو البرمجيات لتطوير طرق جديدة تمكّن من تخزين حجم كبير من البيانات في مساحة تخزينية صغيرة، وهذا الأمر كان مهماً عندما كانت محركات الأقراص الصلبة صغيرة جداً، وقد جعله ظهور الانترنت أيضاً أكثر أهمية.
إن ضغط الملفات له دور كبير في الاتصال عبر الشبكة ، حيث يسمح لنا بإرسال بيانات أقل حجماً عبر خطوط الاتصال بحيث يمكننا رفع و تحميل الملفات بشكل أسرع ، وهذا الأمر مفيد جداً خاصة من أجل الشبكات المزدحمة..
فكيف يتمّ ضغط الملفات ؟
تتضمن الإجابة على هذا السؤال تفسير عمليات رياضية معقدة للغاية، وهي أكثر مما يمكن أن نغطيه في هذه المقالة، لكن يمكنك فهم الأساسيات دون الحاجة إلى التعمّق بالعمليات الرياضية والحسابية التي تستخدمها خوارزميات ضغط الملفات ..
تعتمد المكتبات الأكثر شيوعاً لضغط النص على خوارزميتين ، وتستخدمان معاً في نفس الوقت للحصول على نسب ضغط عالية جداً، هما LZ77 ( Lempel-Ziv Coding ) و Huffman Coding.
Huffman Coding (خوارزميّة هوفمان )هي خوارزمية معقدة للغاية، ولن نغطي كافة التفاصيل المتعلقة بها هنا… لكن بشكل أساسي ، تستخدم هذه الخوارزمية الرياضيات لترميز الأحرف الفردية برموز ثنائية أقصر، بالتالي تتقلص أحجام الملفات بعد هذه العملية.
من ناحية أخرى ، LZ77 خوارزمية بسيطة نسبياً، حيث تسعى لاستبدال الكلمات المكررة بمفتاح أصغر يمثل الكلمة.
لنأخذ هذا النص كمثال:خوارزمية LZ77 تقرأ النص، وتحدد الكلمات المكررة مثل SyrianTech ، فتستبدلها كما يلي:بعد ذلك، عندما تتمّ قراءة النص، سيتمّ استبدال كل (S) ب SyrianTech ، أي يظهر لنا النص الأصلي كما هو دون ضياع أو فقدان في البيانات .
لكن حقيقةً خوارزمية LZ77 لا تستخدم قائمة مفاتيح للدلالة على الكلمات ، وإنما تستبدل كلّ ظهور مكرّر لكلمة في النص ( في مثالنا هنا SyrianTech) بمؤشر مرجعي في الذاكرة يعود إلى الكلمة الأولى ، فتقرأ SyrianTech بدلاً من (S) :لكي تفهم آلية عمل الخوارزميّة بشكل أفضل ننصحك بمتابعة هذا الفيديو التعليمي :
لا تقوم الخوارزميّة بضغط الكلمات المكررة و حسب بل أيضاً جزء من الكلمة قد يتكرّر في كلمة أخرى , مثلاً، سيتم ضغط كلمة The حتى ضمن كلمات أخرى مثل There و Their و Then …
عند وجود عدد كبير من الكلمات المكررة، سنحصل على نسبة عالية من الضغط ، فمثلاً إذا كررنا كلمة SyrianTech مئة مرة، سيكون حجم النص الأساسي 3 كيلوبايت، وعند ضغط الملف، سيأخذ حجماً يصل إلى 158 بايت فقط، فتكون نسبة الضغط 95 % .
لكن هذه النسبة لا تنطبق حقيقةً على النصوص العاديّة إذ أننا نفترض هنا أنّ النص يحوي كلمة واحدة فقط مكررة أكثر من مرّة , لكن بشكل عام عند ضغط الملفات النصية تكون نسبة الضغط بين 30-40% وذلك باستخدام إحدى تنسيقات الضغط مثل ZIP للملف النصي ..
تُطبّق خوارزمية LZ77 على جميع البيانات الثنائية Binary Data, وليس فقط على النص..
و على الرغم من أن ضغط النص بهذه الطريقة يكون أسهل عادة بسبب الكلمات المتكررة التي تستخدمها معظم اللغات ، فقط تكون لغة مثل اللغة الصينية أصعب قليلا لتطبيق الخوارزميّة …
كيف يتم ضغط الصور والفيديو؟
يتم ضغط الفيديو والصور بشكل مختلف تماما، على عكس النص حيث يمكنك الحصول على ما يسمى Lossless Compression أيّ ( ضغط بدون فقدان للبيانات) …
عند التعامل مع الصور سنحصل على ما يسمى Lossy Compression بمعنى (الضغط مع خسارة ) ، أيّ مع فقدان لبعض البيانات الأصلية ، بحيث أنه كلما زاد ضغط الصورة ، زادت كميّة البيانات المفقودة .
لنأخذ هذا المثال، هذه لقطة شاشة لم يتم ضغطها:لنأخذ الصورة ونفتحها من خلال برنامج الفوتوشوب عدة مرات، وفي كل مرة نقوم بتصدير الصورة بصيغة JPEG بدقة منخفضة، وهذه هي النتيجة:تبدو النتيجة سيئة جداً، أليس كذلك ؟!
ذلك لأننا قمنا بتصدير الصورة كـ JPEG في كل مرة بدقة (جودة الصورة Quality) 0 % , ما يعني أننا قمنا بضغط ملف الصورة وتقليل حجمه ,
الصورة التالية هي الصورة ذاتها بصيغة JPEG ولكن بدقة 50% ، ونلاحظ أنها ً لا تختلف كثيراً عن الصورة الأصل إذا لم تدقق بها عن قرب ! ..الصورة بصيغة PNG كانت بحجم 200 كيلوبايت، أما هذه الصورة ذات الصيغة JPEG بدقة (جودة ) 50 % من دقة الصورة الأصلية فهي بحجم 28 كيلوبايت فقط .
إذاً، كيف يتم توفير كل هذه المساحة؟ خوارزمية JPEG هي بالفعل إنجاز هندسي…
معظم الصور تُخزن كقائمة من الأرقام، وكل رقم يمثل بكسل واحد (وحدة الصورة ), تقوم الخوارزمية JPEG بتخزين الصور باستخدام ما يسمى Discrete Cosine Transform (التحويل التجيبي المتقطع ) و هو عبارة عن مجموعة موجات جيبية Sine Waves تمت إضافتها مع بعضها بترددات مختلفة .
تقدم هذه الخوارزمية 64 معادلة ، لكن لا تستخدم جميعها ، كما يحصل في الفوتوشوب وغيره من تطبيقات تحرير الصور (اختيار عدد المعادلات التي يجب استخدامها)، ثم تستخدم هذه التطبيقات ترميز Huffman لتقليل حجم الملف أكثر.
وهذا يعطي صور بصيغة JPEG بنسبة ضغط عالية جداً، حيث بإمكانها تقليل حجم صورة يمكن أن يكون حجمها عدة ميغابايتات إلى بضع كيلوبايتات فقط ..
يمكنك الإطلاع على هذا الشرح لمعرفة المزيد عن التحويل التجيبي المتقطع وعمل خوارزميّة JPEG :
لكن إن قمت بتكرار ضغط الصورة بهذه الطريقة أكثر من مرة قد تنتج لديك صورة كهذه :إذاً كمية قليلة من عملية الضغط باستخدام JPEG يمكن أن يكون لها تأثير كبير على حجم الملف، وهذا ما يجعل خوارزمية JPEG مفيدة جداً لضغط الصور في مواقع الويب, حيث يتم ضغط معظم الصور التي تراها على الانترنت لتقليل زمن تحميل هذه الصور، خصوصاً لمستخدمي أجهزة الهاتف المحمول و الذين يملكون اتصال بيانات ضعيف.
ضغط الفيديو :
يعمل الفيديو بطريقة مختلفة قليلاً عن الصور ، قد تعتقد أن ضغط الفيديو يتم عن طريق ضغط كل إطار من الفيديو باستخدام خوارزميّة JPEG ، بالتأكيد يتم ذلك، ولكن بطريقة أفضل ..
إذ يتمّ باستخدام ما يسمى (ضغط الإطار البيني) Interframe Compression ، والذي يقوم بحساب التغييرات بين كل إطار ويخزن هذه التغييرات فقط ، لذلك وعلى سبيل المثال إذا كان لديك مقطع فيديو بلقطة ثابتة نسبياً ولعدة ثوان، فسيتم توفير الكثير من المساحة، لأن خوارزمية الضغط لا تحتاج إلى تخزين كل عناصر اللقطات التي لا تتغير.
Interframe Compression هو السبب الرئيسي في وجود التلفاز الرقمي اليوم والفيديو على الانترنت، فبدونه ستكون مقاطع الفيديو بحجم كبير جداً يصل إلى مئات الجيجابايت، وهذا أكثر مما كان عليه متوسط حجم محركات الأقراص الثابتة عام 2005 عند إطلاق موقع اليوتيوب !!.
نلاحظ أن الصور المتحركة GIF لا تقوم بالضغط باستخدام هذه العملية، وهذا ما يفسر أنها غالباً ما تكون قصيرة وصغيرة، و يبقى حجمها كبير جداً .
هناك ما يجب أخذه بعين الاعتبار حول الفيديو، ألا وهو معدل البت Bit-rate (أي مقدار البيانات المسموح به في كل ثانية )
فإذا كان معدل البت 200 كيلوبت/ثانية ، على سبيل المثال ، عندها سيبدو مقطع الفيديو رديئاً جداً، حيث ترتفع الجودة مع ارتفاع معدل البت ، ولكن في حال وصل إلى أكثر من ميغابايت Megabyte في الثانية، ستحصل أيضاً على مردود سيء !..
لنأخذ على سبيل المثال إطار مكبر من فيديو لـسمكة قنديل البحر، الإطار على اليسار له معدل بت 3 ميغابت/ثانية ، والذي على اليمين بمعدل 100 ميغابت/ثانية :نلاحظ هنا زيادة حجم الملف 30 ضعف، ولكن لا نلاحظ زيادة كبيرة في الجودة !….
بشكل عام، يتراوح معدل البت لمقاطع فيديو اليوتيوب بين 2 و 10 ميغابت/ثانية وذلك يعتمد أيضاً على سرعة الاتصال لديك..
ضغط الصوت:
عملية ضغط الصوت مشابهة بشكل كبير لعملية ضغط النص والصور، فكما أن خوارزمية JPEG تحذف التفاصيل التي لا تراها في الصورة، فإن ضغط الصوت يتمّ بنفس الطريقة (الضغط مع فقدان بعض البيانات ), فأنت لا تحتاج مثلاً لسماع صرير الريشة على أوتار الغيتار إذا كان الصوت الأساسي للغيتار أعلى من هذا الصرير بكثير !.
الملفات الصوتيّة ذات الصيغة mp3 تستخدم أيضاً معدل البت ، ويكون المعدل المنخفض بين 48 و 96 كيلوبت/ثانية ( kb/s )، والمعدل الجيد جداً يصل إلى 128 إلى 240 كيلوبت/ثانية( kb/s )،
في حين أن المعدل المرتفع يصل إلى 320 كيلوبت/ثانية ، لكنّك على الأرجح لن تلاحظ هذا الاختلاف إلا باستخدام مكبرات جيدة (أو سماعات أذن )…
هناك أيضاً ترميزات أخرى لضغط الصوت دون فقدان البيانات، كـ ترميز FLAC , الذي يستخدم ترميز LZ77 لضغط الملفات الصوتية دون ضياع للبيانات …