VIDEO·CODEC
الفيديو · العقدة 02
↩ البوابة

قلب الفيديوالمبادئ الأولى

تعويض الحركة

هذه الفكرة وحدها هي ما يميّز ضغط الفيديو عن "ضغط صورٍ متتالية". بدل تخزين الفرق المباشر بين إطارين، نتتبّع أين انتقلت كل قطعة، ونخزّن الحركة + خطأً صغيراً. منها تأتي مئة الضعف الإضافية.

سيّارة تعبر الشاشة بين إطارين. الخلفية ثابتة. الفرق المباشر frame[t] − frame[t-1] صغير في الخلفية، لكنه ضخم حيث كانت السيّارة وحيث صارت (تغيّر كامل في منطقتين).

لكن لاحظ: بِكسلات السيّارة لم تتغيّر — هي نفسها، فقط في مكان آخر. كيف تستغلّ ذلك؟ بدل "ما الفرق هنا؟"، اسأل "من أين أتت بِكسلات هذه المنطقة؟". وإذا وجدت أنها نسخةٌ من منطقة قريبة في الإطار السابق مزاحةٌ بمقدار (dx,dy) — فما الذي يكفي تخزينه بدل البِكسلات كلّها؟

مطابقة البلوكات ومتّجه الحركة — حلّ اللغز

قسّم الإطار الحالي لبلوكات (مثلاً ١٦×١٦). لكل بلوك، ابحث في الإطار المرجعي عن أكثر منطقة تشابهه (ضمن نافذة بحث). الإزاحة لأفضل تطابق = متّجه الحركة (Motion Vector) (dx,dy). نخزّن: المتّجه (رقمان!) + الباقي (residual) = الفرق الصغير بين البلوك وأفضل تطابق. بلوك كامل اختُزل لرقمين وخطأ ضئيل.

FIG 1 مطابقة البلوكات: من أين أتت هذه المنطقة؟
الإطار المرجعي (t−1) نافذة البحث الموضع القديم الإطار الحالي (t) البلوك الحالي MV = الإزاحة لأفضل تطابق ⇒ خزّن (dx,dy) + باقٍ صغير بدل 256 بِكسل
لكل بلوك نبحث عن أفضل تطابق في نافذة بالإطار المرجعي. الإزاحة = متّجه الحركة. تخزين المتّجه + الباقي أرخص بكثير من تخزين البلوك أو فرقه المباشر.

تفاصيل تصنع الفرق

ليش هذا "تنبّؤ" لا "ضغط مباشر"

تعويض الحركة = نموذج تنبّؤ: "أتنبّأ بهذا البلوك = نسخةٌ مزاحة من المرجع". الباقي (residual) هو خطأ التنبّؤ — وله إنتروبي منخفض، فيُمرَّر للتحويل والتكميم والمرمّز (العقدة ٠٣). هذا بالضبط انقسام نموذج/مرمّز من مسار الصور، لكن النموذج هنا زمنيّ. لاحظ التماثل مع intra-prediction المكاني (Paeth/الاتجاهي) — كلاهما تنبّؤ، أحدهما عبر المكان والآخر عبر الزمن.

جذر خطأ شائع — MV ليس "الحركة الحقيقية"

متّجه الحركة لا يصف بالضرورة الحركة الفيزيائية الحقيقية للجسم — بل أرخص تطابق يقلّل التكلفة (الباقي + بِتّات المتّجه). قد يشير لمنطقة مشابهة صدفةً. من يخلط بينه وبين "تتبّع الأجسام" يُخطئ. (التتبّع الفيزيائي الحقيقي = التدفّق البصري، العقدة ٠٧ — وهو سؤال مختلف.)

  1. على إطارين متتاليين (من سلسلتك في العقدة ٠٠، أو فيديو حقيقي محوّل لإطارات رمادية): قسّم الإطار الحالي لبلوكات 16×16.
  2. لكل بلوك، نفّذ بحثاً شاملاً ضمن ±8 بِكسل في الإطار السابق بمقياس SAD. احفظ أفضل MV والباقي.
  3. قارن إنتروبي (الباقي + المتّجهات) مقابل إنتروبي (الفرق المباشر frame[t]−frame[t-1]) مقابل (الإطار الكامل). رتّبها — يجب أن يكون تعويض الحركة الأقل بفارق كبير على لقطات فيها حركة.
  4. قِس كلفة البحث: بدّل البحث الشامل ببحث "ثلاثي الخطوات" (three-step). كم تسارع الترميز؟ وكم خسرت من جودة التطابق؟ هذه مقايضة المرمّز الأبدية.
الخلاصة

تعويض الحركة = تنبّؤ زمنيّ: لكل بلوك، خزّن متّجه حركة + باقياً صغيراً بدل البِكسلات. SAD، بحث سريع، دقّة دون-بِكسلية، أحجام متغيّرة. هذا قلب الفيديو ومصدر ضغطه الأسطوري. الآن لدينا "الباقي" منخفض الإنتروبي — ماذا نفعل به؟ نعامله تماماً كصورة: نحوّله ونكمّمه.