موقف من الحياة اليومية#
صورة على موبايلك حجمها كام ميجا بس، وفيلم ساعتين ممكن تلاقيه بحجم كام جيجا. طبيعي، صح؟
لكن لو الفيلم ده اتخزّن زي ما هو من غير أي ضغط، كان هيحتاج حوالي 1340 جيجا. طب الكمبيوتر بيحوّل الصورة والصوت لأرقام إزاي؟ وإزاي الحجم بيصغر بالشكل ده؟
خلاصة سريعة#
- الصورة شبكة من نقط صغيرة اسمها Pixel · البكسلأصغر وحدة في الصورة الرقمية أو الشاشة، وهي نقطة واحدة لها لون واحد.عرض في القاموس، وكل بكسل لونه متخزّن كأرقام. والصوت قياسات لموجة الصوت آلاف المرات في الثانية. والفيديو صور ورا بعض بسرعة، ومعاها صوت.
- الملفات دي من غير ضغط ضخمة جدًا، علشان كده أغلب الصور والصوت والفيديو اللي بتستخدمها مضغوطة.
- فيه نوعين ضغط: Lossless Compression · الضغط بدون فقدتصغير حجم البيانات بطريقة تسمح باسترجاعها كما كانت تمامًا دون أي تغيير، مثل gzip وPNG.عرض في القاموس (الملف بيرجع زي ما كان بالظبط) و**Lossy Compression · الضغط مع الفقدتصغير حجم البيانات بحذف جزء من التفاصيل نهائيًا، فلا يمكن استرجاع الأصل كما كان، مثل JPEG وMP3.عرض في القاموس** (بيشيل تفاصيل نهائيًا، بس الحجم أصغر بكتير).
ببساطة#
فكّر في لوحة فسيفساء كبيرة: من بعيد شايف صورة، ومن قريب هي مربعات صغيرة كل واحد بلون واحد. الصورة الرقمية بالظبط كده، وكل مربع اسمه بكسل.
والصوت؟ تخيّل إنك بتقيس ارتفاع موجة في البحر كل ثانية وتكتب الرقم. لو قست كتير كفاية، تقدر من الأرقام دي ترسم الموجة تاني. والكمبيوتر بيعمل كده مع الصوت، بس عشرات الآلاف من المرات في الثانية.
والضغط زي إنك تطبّق هدومك في الشنطة: نفس الهدوم في مساحة أصغر (ده بدون فقد). أو إنك تسيب شوية هدوم مش هتحتاجها خالص (ده مع الفقد).
بالتفصيل#
الصورة: شبكة بكسلات#
الصورة الرقمية العادية عبارة عن شبكة من Pixel · البكسلأصغر وحدة في الصورة الرقمية أو الشاشة، وهي نقطة واحدة لها لون واحد.عرض في القاموس، وده اسمه Raster Image (Bitmap) · الصورة النقطيةصورة مكوّنة من شبكة من البكسلات، مثل صور JPEG وPNG وGIF، وتفقد حدتها عند تكبيرها كثيرًا.عرض في القاموس (Raster). وصورة مقاسها 1920×1080 معناها 1920 بكسل في العرض و1080 في الطول، يعني أكتر من 2 مليون بكسل.
وكل بكسل لونه متخزّن بنظام RGB (Red, Green, Blue) · نموذج الألوان الأحمر والأخضر والأزرقطريقة لتمثيل اللون بثلاثة أرقام تحدد كمية الأحمر والأخضر والأزرق فيه، وغالبًا يكون كل رقم من 0 إلى 255.عرض في القاموس: 3 أرقام لكمية الأحمر والأخضر والأزرق. وكل رقم غالبًا 8 بت، يعني من 0 لـ 255:
255, 0, 0= أحمر صافي.0, 0, 0= أسود.255, 255, 255= أبيض.
يعني كل بكسل 24 بت (3 بايت)، وده بيدّي 2^24 = 16,777,216 لون مختلف. ولو شفت ألوان مكتوبة زي #FF0000، دي نفس الأرقام التلاتة بس بالنظام السداسي عشر، وشرحناه في مقال النظام السداسي عشر والثماني.
طب الصورة دي حجمها كام؟
1920 × 1080 × 3 بايت = 6,220,800 بايت، يعني حوالي 6.2 ميجابايت لصورة واحدة من غير ضغط. ولو محتاج تراجع الوحدات، شوف مقال وحدات قياس البيانات والسرعة.
وفيه نوع تاني من الصور: Vector Image · الصورة المتجهةصورة محفوظة كأوامر رسم (أشكال وخطوط وألوان) بدلًا من بكسلات، فتبقى حادة بأي حجم، مثل صور SVG.عرض في القاموس (Vector)، زي صيغة SVG. دي مش بكسلات، دي أوامر رسم: «ارسم دايرة هنا بالحجم ده واللون ده». علشان كده بتفضل حادة مهما كبّرتها، وده بيخليها ممتازة للأيقونات والرسومات البيانية. وكل الرسومات المتحركة في موقعنا معمولة بالطريقة دي.
الصوت: قياسات كتير جدًا في الثانية#
الصوت في الحقيقة موجة بتتحرك في الهوا. والكمبيوتر ما يقدرش يخزّن موجة، فبيعمل حاجة تانية: بيقيس ارتفاعها على فترات ثابتة، وبيخزّن كل قياس كرقم. وده اسمه Sampling · أخذ العيناتقياس قيمة موجة الصوت على فترات زمنية ثابتة وتخزين كل قياس كرقم، لتحويل الصوت إلى بيانات رقمية.عرض في القاموس (Sampling).
وفيه رقمين بيحددوا جودة الصوت:
- Sample Rate · معدل أخذ العيناتعدد القياسات المأخوذة من الصوت في الثانية الواحدة، ويُقاس بالهرتز، مثل 44.1 kHz في أسطوانات CD.عرض في القاموس (Sample Rate): الكمبيوتر بيقيس كام مرة في الثانية. وأسطوانات الـ CD مثلًا بتقيس 44,100 مرة في الثانية (44.1 kHz).
- Bit Depth (Sample Size) · عمق البتعدد البتات المستخدمة لتخزين كل عينة صوت، وكلما زاد كان القياس أدق، مثل 16 بت في أسطوانات CD.عرض في القاموس (Bit Depth): كل قياس بيتخزّن في كام بت. وفي الـ CD كل قياس 16 بت.
وكمان عدد القنوات: صوت Stereo فيه قناتين، شمال ويمين، فكل قياس بيتخزّن مرتين.
طب ليه 44,100 بالذات؟ الإنسان بيسمع أصوات لحد حوالي 20,000 هرتز (اهتزازة في الثانية). وعلشان الكمبيوتر يسجّل صوت بدقة، لازم يقيسه أكتر من ضعف أعلى تردد فيه. يعني أكتر من 40,000 مرة في الثانية.
وأغنية 3 دقايق بجودة الـ CD حجمها كام؟
44,100 × 2 بايت × 2 قناة = 176,400 بايت في الثانية. وفي 180 ثانية = 31,752,000 بايت، يعني حوالي 32 ميجابايت من غير ضغط.
الفيديو: صور ورا بعض#
الفيديو عبارة عن صور كتير بتتعرض ورا بعض بسرعة، فعينك بتشوفها حركة. وكل صورة منهم اسمها Frame (إطار)، ومعدل شائع هو 30 إطار في الثانية. وطبعًا معاها الصوت.
ودقيقة فيديو 1080 من غير ضغط؟
- الإطار الواحد = 6,220,800 بايت (زي الصورة اللي فوق).
- في الثانية:
× 30= حوالي 187 ميجابايت. - في الدقيقة:
× 60= حوالي 11.2 جيجابايت. - وفيلم ساعتين = حوالي 1340 جيجابايت.
علشان كده الضغط في الفيديو مش رفاهية: لازم الفيديو يتضغط جامد علشان نقدر نخزّنه، فما بالك بإننا نبعته على النت. وحتى الضغط بدون فقد مش كفاية مع الفيديو، والملفات بتفضل كبيرة جدًا، علشان كده أغلب الفيديو بيستخدم الضغط مع الفقد.
وجرّب الحسبات دي بنفسك: غيّر مقاس الصورة، أو مدة الأغنية، أو دقة الفيديو، وشوف الحجم قبل الضغط بيكبر قد إيه.
جرّب بنفسك: حاسبة الحجم بدون ضغط
غيّر الأرقام وشاهد الحجم قبل الضغط. الأحجام بالنظام العشري (الميجابايت مليون بايت).
الضغط: نوعين#
Lossless Compression · الضغط بدون فقدتصغير حجم البيانات بطريقة تسمح باسترجاعها كما كانت تمامًا دون أي تغيير، مثل gzip وPNG.عرض في القاموس (Lossless): بيلاقي تكرار في البيانات ويكتبه بطريقة أقصر. ولما تفك الضغط، الملف بيرجع زي ما كان بالظبط، بايت ببايت. وده لازم في الملفات اللي مينفعش يتغير فيها حرف، زي النصوص والبرامج. وأمثلة عليه: gzip للملفات، وPNG للصور، وFLAC للصوت.
Lossy Compression · الضغط مع الفقدتصغير حجم البيانات بحذف جزء من التفاصيل نهائيًا، فلا يمكن استرجاع الأصل كما كان، مثل JPEG وMP3.عرض في القاموس (Lossy): بيشيل تفاصيل نهائيًا، ويحاول يختار التفاصيل اللي الإنسان غالبًا مش هيلاحظها. والحجم بيبقى أصغر بكتير من الضغط بدون فقد. لكن اللي اتشال ما بيرجعش تاني أبدًا. وأمثلة عليه: JPEG للصور، وMP3 وAAC وOpus للصوت، وأغلب ترميزات الفيديو المستخدمة على النت.
ترميز الفيديو والصيغة: حاجتين مختلفين#
لما تشوف ملف اسمه movie.mp4، فيه حاجتين:
- Container Format · صيغة الحاويةصيغة ملف تجمع داخلها مسار الصورة ومسار الصوت ومعلومات عنهما، مثل MP4 وWebM، ويمكن أن تحتوي ترميزات مختلفة.عرض في القاموس (Container): زي MP4 وWebM. دي الكرتونة اللي جواها مسار الصورة ومسار الصوت ومعلومات عنهم.
- Codec (Coder-Decoder) · الترميز (برنامج الضغط وفك الضغط)برنامج أو خوارزمية أو جهاز يضغط الصوت أو الفيديو ويفك ضغطه بطريقة محددة، مثل H.264 وAV1 وMP3.عرض في القاموس (Codec): زي H.264 وH.265 وAV1. ده طريقة الضغط نفسها اللي اتضغط بيها الفيديو جوه الكرتونة.
يعني ملفين MP4 ممكن يكون جواهم ترميزات مختلفة. علشان كده ساعات ملف MP4 يشتغل على جهاز وما يشتغلش على جهاز تاني: الجهاز التاني ما بيعرفش يفك الترميز اللي جوه.
أشهر الامتدادات#
| الامتداد | النوع | الضغط |
|---|---|---|
.jpg / .jpeg | صورة | مع الفقد |
.png | صورة | بدون فقد |
.gif | صورة (وممكن متحركة) | بدون فقد، لكن 256 لون بالكتير |
.webp | صورة | الاتنين |
.svg | صورة متجهة | أوامر رسم، مش بكسلات |
.wav | صوت | غالبًا من غير ضغط |
.flac | صوت | بدون فقد |
.mp3 | صوت | مع الفقد |
.mp4 / .webm | فيديو (كرتونة) | على حسب الترميز اللي جواها |
جرّب بنفسك: الضغط بدون فقد#
هنعمل ملف نصي، ونضغطه، ونرجّعه، ونتأكد إنه رجع زي ما كان بالظبط.
- اعمل ملف فيه الأرقام من 1 لـ 20000، كل رقم في سطر:
seq 1 20000 > numbers.txt- اضغطه، والخيار
-kمعناه سيب الملف الأصلي وما تمسحوش:
gzip -k numbers.txt- قارن الحجمين:
ls -l numbers.txt numbers.txt.gzالنتيجة المتوقعة: الملف المضغوط أصغر من نص الأصلي:
-rw-r--r--. 1 user user 108894 numbers.txt -rw-r--r--. 1 user user 45016 numbers.txt.gz
- فك الضغط في ملف جديد، وقارنه بالأصلي:
gunzip -c numbers.txt.gz > restored.txtcmp numbers.txt restored.txt && echo "الملفين متطابقين"النتيجة المتوقعة:
الملفين متطابقين
الأمر cmp بيقارن الملفين بايت ببايت، ولو لقى أي اختلاف بيقول مكانه. ولأنه ما لقاش، يبقى الضغط ده بدون فقد: الملف رجع زي ما كان بالظبط.
لو حصلت مشكلة: لو ظهرت رسالة إن numbers.txt.gz موجود قبل كده، يبقى انت جربت الخطوات قبل كده. امسح الملفات القديمة بالأمر rm numbers.txt.gz restored.txt وابدأ من الخطوة 2.
للمتعمقين
الحسبات كاملة
| الحسبة | الحجم من غير ضغط | |
|---|---|---|
صورة 1920×1080 | 1920 × 1080 × 3 | 6,220,800 بايت |
| ثانية صوت CD | 44,100 × 2 × 2 | 176,400 بايت |
| 3 دقايق صوت CD | 176,400 × 180 | 31,752,000 بايت |
| ثانية فيديو 1080 بـ 30 إطار | 6,220,800 × 30 | 186,624,000 بايت |
| ساعتين فيديو | 186,624,000 × 7200 | حوالي 1.34 تريليون بايت |
وفي الحسبات دي اعتبرنا البكسل 3 بايت (RGB بس). ولو الصورة فيها شفافية (قناة رابعة اسمها Alpha)، البكسل بيبقى 4 بايت والأحجام بتزيد الربع.
ليه لازم نقيس بضعف التردد؟
ده اسمه مبدأ Nyquist-Shannon: علشان تسجّل صوت بدقة، لازم معدل القياس يكون ضعف أعلى تردد في الصوت على الأقل. ولو قست أقل من كده، الأصوات الحادة مش هتتسجّل بدقة. وده اللي بيخلّي 44.1 kHz قريب من ضعف أعلى صوت بيسمعه الإنسان (حوالي 20 kHz).
GIF و256 لون
كل بكسل في GIF عبارة عن رقم 8 بت بيشاور على لون في جدول ألوان، والجدول ده فيه 256 لون بالكتير. علشان كده GIF مش مناسب للصور الفوتوغرافية اللي فيها ألوان كتير.
الـ WAV
ملفات WAV ممكن تشيل ترميزات مختلفة، لكن تقريبًا كلها بتخزّن الصوت من غير ضغط (بطريقة اسمها Linear PCM)، علشان كده حجمها كبير.
أخطاء شائعة#
- «PNG دايمًا أحسن من JPEG»: مش دايمًا. PNG أحسن للرسومات ولقطات الشاشة والكتابة، لكن في الصور الفوتوغرافية JPEG بيدّي حجم أصغر بكتير بفرق جودة صعب تلاحظه.
- «ممكن أرجّع جودة صورة JPEG لو حوّلتها PNG»: لأ. التفاصيل اللي اتشالت في الضغط مع الفقد راحت نهائيًا، والتحويل لـ PNG بيكبّر الحجم بس.
- «MP4 ده نوع ترميز»: لأ. MP4 كرتونة، والترميز (زي H.264 أو AV1) هو اللي جواها.
- «التعديل والحفظ كذا مرة بصيغة JPEG مش بيأثر»: ممكن يأثر. الضغط مع الفقد ما بيرجعش، وكل مرة بتحفظ فيها بيحصل ضغط جديد ممكن يشيل تفاصيل زيادة. علشان كده الأحسن تعدّل على النسخة الأصلية.
المصطلحات#
- البكسل (Pixel · البكسلأصغر وحدة في الصورة الرقمية أو الشاشة، وهي نقطة واحدة لها لون واحد.عرض في القاموس): أصغر وحدة في الصورة الرقمية، نقطة واحدة بلون واحد.
- نموذج RGB (RGB (Red, Green, Blue) · نموذج الألوان الأحمر والأخضر والأزرقطريقة لتمثيل اللون بثلاثة أرقام تحدد كمية الأحمر والأخضر والأزرق فيه، وغالبًا يكون كل رقم من 0 إلى 255.عرض في القاموس): تمثيل اللون بكمية الأحمر والأخضر والأزرق.
- الصورة النقطية (Raster Image (Bitmap) · الصورة النقطيةصورة مكوّنة من شبكة من البكسلات، مثل صور JPEG وPNG وGIF، وتفقد حدتها عند تكبيرها كثيرًا.عرض في القاموس): صورة مكوّنة من شبكة بكسلات.
- الصورة المتجهة (Vector Image · الصورة المتجهةصورة محفوظة كأوامر رسم (أشكال وخطوط وألوان) بدلًا من بكسلات، فتبقى حادة بأي حجم، مثل صور SVG.عرض في القاموس): صورة محفوظة كأوامر رسم، وتبقى حادة بأي حجم.
- أخذ العينات (Sampling · أخذ العيناتقياس قيمة موجة الصوت على فترات زمنية ثابتة وتخزين كل قياس كرقم، لتحويل الصوت إلى بيانات رقمية.عرض في القاموس): قياس موجة الصوت على فترات ثابتة وتخزين كل قياس كرقم.
- معدل أخذ العينات (Sample Rate · معدل أخذ العيناتعدد القياسات المأخوذة من الصوت في الثانية الواحدة، ويُقاس بالهرتز، مثل 44.1 kHz في أسطوانات CD.عرض في القاموس): عدد القياسات في الثانية.
- عمق البت (Bit Depth (Sample Size) · عمق البتعدد البتات المستخدمة لتخزين كل عينة صوت، وكلما زاد كان القياس أدق، مثل 16 بت في أسطوانات CD.عرض في القاموس): عدد البتات لكل قياس.
- الضغط بدون فقد (Lossless Compression · الضغط بدون فقدتصغير حجم البيانات بطريقة تسمح باسترجاعها كما كانت تمامًا دون أي تغيير، مثل gzip وPNG.عرض في القاموس): ضغط يسمح باسترجاع البيانات كما كانت تمامًا.
- الضغط مع الفقد (Lossy Compression · الضغط مع الفقدتصغير حجم البيانات بحذف جزء من التفاصيل نهائيًا، فلا يمكن استرجاع الأصل كما كان، مثل JPEG وMP3.عرض في القاموس): ضغط يحذف تفاصيل نهائيًا مقابل حجم أصغر.
- الترميز (Codec (Coder-Decoder) · الترميز (برنامج الضغط وفك الضغط)برنامج أو خوارزمية أو جهاز يضغط الصوت أو الفيديو ويفك ضغطه بطريقة محددة، مثل H.264 وAV1 وMP3.عرض في القاموس): طريقة ضغط الصوت أو الفيديو وفك ضغطه.
- صيغة الحاوية (Container Format · صيغة الحاويةصيغة ملف تجمع داخلها مسار الصورة ومسار الصوت ومعلومات عنهما، مثل MP4 وWebM، ويمكن أن تحتوي ترميزات مختلفة.عرض في القاموس): الملف الذي يجمع مسار الصورة والصوت معًا.
اختبر نفسك#
صورة عرضها 100 بكسل وطولها 100 بكسل، وكل بكسل 3 بايت. حجمها من غير ضغط كام؟
إظهار الإجابة
30,000 بايت. 100 × 100 = 10,000 بكسل، و× 3 = 30,000 بايت (حوالي 30 كيلوبايت).
عايز تبعت ملف برنامج مضغوط لصاحبك. تستخدم ضغط مع فقد ولا بدون فقد؟ وليه؟
إظهار الإجابة
بدون فقد (زي gzip). البرنامج لازم يرجع زي ما كان بالظبط، ولو اتغيّر بايت واحد ممكن ما يشتغلش.
ملف فيديو امتداده .mp4 اشتغل على الكمبيوتر وما اشتغلش على تليفزيون قديم. إيه السبب المحتمل؟
إظهار الإجابة
غالبًا الترميز اللي جوه الملف (زي H.265 أو AV1) التليفزيون ما بيعرفش يفكه، حتى لو بيعرف صيغة MP4 نفسها. لأن MP4 مجرد كرتونة، والترميز هو اللي جواها.