التحويل والتكميم للباقي
بعد التنبّؤ (الزمني بالحركة، أو المكاني intra)، يبقى الباقي — صورة خطأ صغيرة. ماذا نفعل بها؟ نعاملها بكل ما تعلّمناه في مسار الصور: تحويل لمجال التردد، تكميم، ترميز. لكن مع لمسات تخصّ الفيديو.
الباقي بعد تعويض الحركة ليس "صورة طبيعية" — هو غالباً قيمٌ صغيرة متناثرة، وأحياناً حوافّ حادّة حيث فشل التنبّؤ (حافة جسم متحرّك).
تعرف من مسار الصور أن DCT يركّز طاقة الصور الطبيعية. لكن هل DCT أمثل لـالباقي؟ وإذا كان الكوديك سيُنفَّذ على ملايين الأجهزة (هواتف، تلفزيونات)، فهل تريد DCT بأعداد عشرية (float) قد تختلف نتيجته من معالج لآخر — فينحرف الفكّاك عن المرمّز؟ ما البديل الذي يضمن تطابقاً بِتّياً عبر كل الأجهزة؟
التحويل على الباقي — نفس DCT بمنطق مختلف
نطبّق تحويلاً (DCT أو شبيهه) على بلوكات الباقي تماماً كـJPEG: يركّز الطاقة في معاملات قليلة، فالتكميم يرمي الترددات العالية للباقي (التي تخفيها العين)، ثم zig-zag + ترميز إنتروبي. الفرق الجوهري: الإدخال هنا خطأ تنبّؤ لا بِكسلات أصلية — فطاقته أقلّ بكثير أصلاً، فالضغط أعلى.
التحويلات الصحيحة — حلّ اللغز
DCT الكلاسيكي يستعمل cos (أعداد غير نسبية) → نتائج float قد تختلف
بين معالجٍ وآخر بفروق تقريب دقيقة. في الفيديو هذا كارثة: الفكّاك يبني تنبّؤه على
إطارات أعاد بناءها؛ أي انحراف بِتّيّ بينه وبين المرمّز يتراكم عبر GOP
(drift) فينهار المشهد. لذا H.264 وما بعده تستعمل تحويلاً
صحيحاً (integer transform) — تقريب لـDCT بأعداد صحيحة فقط، يضمن
تطابقاً بِتّياً عبر كل جهاز. مقايضة: دقّة تردد أقل قليلاً مقابل حتمية
تامّة. هذا درس معماريّ لا تحتاجه الصورة المنفردة (لا drift فيها).
| الجانب | صورة (JPEG) | فيديو (H.264+) |
|---|---|---|
| مدخل التحويل | بِكسلات أصلية | باقي تنبّؤ (طاقة أقل) |
| نوع التحويل | DCT عشري 8×8 | تحويل صحيح 4×4/8×8+ (حتمي) |
| أحجام البلوك | ثابت غالباً | متغيّرة (quadtree) |
| القلق من drift | لا يوجد | حاسم (إطارات مرجعية معاد بناؤها) |
لتجنّب drift، يحتوي المرمّز فكّاكاً داخله: يعيد بناء الإطار المرجعي بالضبط كما سيراه الفكّاك (بعد التكميم وفقده)، ويتنبّأ منه — لا من الأصل. هذا "الحلقة المغلقة" (closed-loop). تذكّر in-loop filtering من مسار الصور (العقدة ٦): نفس المبدأ — المرمّز والفكّاك يجب أن يبقيا متطابقين خطوةً بخطوة.
- خذ الباقي (residual) من تمرين العقدة ٠٢. طبّق عليه DCT 8×8 (أعِد استخدام كودك من مسار الصور) + تكميم + zig-zag + Huffman.
- قارن: حجم (باقٍ مضغوط + متّجهات) للإطار P مقابل حجم الإطار I (intra مضغوط). يجب أن يكون P أصغر بكثير.
- أرِ الـdrift بنفسك: ابنِ سلسلة P طويلة، وتنبّأ مرّةً من الإطار الأصلي ومرّةً من الإطار المعاد بناؤه (المكمَّم). راكم ٢٠ إطاراً. قارن — النسخة التي تنبّأت من الأصل ستنحرف بصرياً عن الفكّاك. هذا لماذا الحلقة مغلقة.
الباقي يُعامَل كصورة خطأ: تحويل + تكميم + ترميز (مسار الصور بالكامل). لكن الفيديو يفرض تحويلاً صحيحاً (حتمية بِتّية) وحلقة مغلقة (تنبّؤ من المعاد بناؤه) لتفادي drift. الآن نملك كل القطع: تنبّؤ + تحويل + تكميم. حان وقت تركيبها في الكوديك الهجين الكامل، وتتبّع تطوّره عبر ثلاثين سنة.