دنیای فایل‌های ویدیویی: ویدیو چطور فشرده می‌شود؟

پنج‌شنبه ۱۹ تیر ۱۳۹۳ - ۲۲:۴۴
مطالعه 7 دقیقه
در قسمت دوم از سری مطالب دنیای فایل‌های ویدیویی به فشرده سازی یا اینکد کردن ویدیو، تفاوت روش‌های فشرده‌سازی ویدیو، اهمیت H.265 و 4K می‌پردازیم.
تبلیغات

اینکد یا فشرده کردن ویدیو

اگر به چگونگی فشرده کردن ویدیو علاقه دارید، بد نیست کمی بیشتر در مورد آن بررسی کنیم. یک فایل ویدیویی که کیفیت بالایی دارد و حجم آن نسبتاً کم است را با نرم‌افزار Media Info باز می‌کنم. مشخصات فایل به صورت زیر است:

media-info-s

حجم فایل حدود 240 مگابایت است. 125 ثانیه ویدیو که در هر ثانیه‌ی آن حدود 30 فریم نمایش داده می‌شود. رزولوشن هم 1920 در 1080 پیکسل است. بنابراین در مجموع تعداد کل پیکسل‌های لازم برای پخش ویدیو، 125 ضربدر 30 ضربدر 1920 ضربدر 1080 خواهد شد. 7.77 میلیارد پیکسل!

pixels= (1920 x 1080) x 30 (frame/s) x 125 (sec) = 7.77 Gigapixel

اگر به روش ساده‌ی 24 بیت برای سه رنگ اصلی رجوع کنیم و بخواهیم رنگ یک پیکسل در زمانی خاص را با مشخص کردن غلظت سه رنگ اصلی نمایشگرها یعنی RGB یا قرمز، سبز و آبی، بسازیم، در مجموع برای یک پیکسل 3 بایت نیاز داریم و برای تمام پیکسل‌های این ویدیو، حدود 22 میلیارد بایت یا به عبارتی 23گیگابایت!

size=(1920 x 1080) x 30 (frame/s) x 125 (sec) x 24 (bit) = 23.3 Gigabyte

اما چگونه است که این ویدیوی 240 مگابایتی، تمام پیکسل‌ها را رنگ‌آمیزی می‌کند و 100 برابر نسبت به تخمین اولیه‌ی ما کم‌حجم‌تر است؟

تفاوت روش Lossless و Lossy برای فشرده‌سازی انواع فایل

روش‌های مختلفی برای فشرده کردن ویدیو وجود دارد که برخی بدون افت کیفیت هستند و به اصطلاح Lossless گفته می‌شوند؛ برخی دیگر Lossy یا همراه با افت کیفیت هستند. این موضوع در مورد کدک‌های فشرده کردن تصویر و صدا هم مصداق دارد. وقتی یک فایل را زیپ می‌کنیم، پس از بازگشایی فایل زیپ شده، دقیقاً همان فایل اصلی را تحویل می‌گیریم. الگوریتم‌های زیپ کردن همگی بر این اصل استوارند که تعداد بیت‌های لازم برای از نو تشکیل دادن فایل، به حداقل برسد.

ممکن است در 7-zip با استفاده از الگوریتم LAMA و نسخه‌ی دوم آن، فشردگی آرشیو و حجم فایل نهایی نسبت به زیپ کننده‌ی اصلی ویندوز یا نرم‌افزارهای معروفی مثل WinRAR کمتر باشد و در عین حال سرعت فشرده‌سازی و همچنین سرعت بازگشایی آرشیو، بالاتر باشد. وجه مشترک این الگوریتم‌ها، حفظ بیت‌های اصلی است و هیچ کاهش کیفیتی وجود ندارد.

اما در روش Lossy از الگوریتم‌هایی استفاده می‌شود که فایل جدید، دقیقاً با نسخه‌ی اصلی یکسان نیست. مثلاً برخی از اطلاعات جزئی‌تر که جزئیات تصویر، ویدیو یا صدا را ایجاد می‌کنند، حذف می‌شوند. jpeg و webp برای تصویر، MP3 و AAC برای صدا و H.263 و H.264 برای ویدیو، نمونه‌هایی از روش‌های فشرده کردن Lossy هستند. البته برخی موارد در کنار حالت اصلی، حالت بدون افت کیفیت هم دارند.

ویدیو چطور فشرده می‌شود؟

در کدک‌ها و استانداردهای مختلف فشرده‌سازی ویدیو، تفاوت‌های زیادی دیده می‌شود اما اصول کلی یکسان است. برای بررسی بیشتر موضوع تنها به H.264 اشاره می‌کنم و به جزئیات دیگر کدک‌ها نمی‌پردازم.

در H.264، استریم ویدیو شامل سه نوع فریم است:

  • فریم‌های اصلی I یا Intra فریم نام دارند. یک فریم اصلی برای شروع پخش ویدیو لازم است و بیشترین داده‌ها را در مورد تصویر در خود جمع کرده است و لذا حجم بالاتری نسبت به سایر فریم‌ها دارد.
  • نوع دوم، P Frame یا  Predicted Frame به معنی  فریم پیش‌بینی شده است. این نوع فریم‌ها تنها به I یا P فریم‌های قبلی وابستگی دارند و از روی آنها ساخته می‌شود.
  • نوع سوم B Frame است که برای ایجاد آن، اطلاعات فریم‌های قبلی و بعدی قابل استفاده است. به همین علت Bi-Directionally Predicted یا پیش‌بینی شده‌ی دوطرفه نام‌گذاری شده است.

یک گروه فریم‌ها یا GOP شامل ترکیبی از فریم‌های فوق است، مثل تصویر زیر:

7 1d

هنگامی که ویدیو توسط اینکدر فشرده می‌شود، الگوریتم‌های مختلفی برای فشرده‌سازی قابل استفاده است. یکی از روش‌های مهم، حذف داده‌هایی است که در فریم قبلی وجود دارد و در فریم جدید، هیچ تغییر خاصی نکرده است. مثلاً در تصویر زیر نیازی به استفاده از بیت‌های اضافی جهت مشخص کردن خانه در فریم‌های بعدی نیست. بنابراین فقط بیت‌های مربوط به حرکت شخص در فریم‌های پیش‌بینی شده، ذکر می‌شود:

7 1b

روش ساده‌ی دیگر، استفاده از بردارهای حرکتی است. مثلاً در دو تصویر زیر به موقعیت بیضی در مربع دقت کنید. رنگ آن تغییر کرده و برای مشخص کردن این تغییر، به بیت‌هایی نیاز داریم. اما اگر بخواهیم تمام مرزهای بیضی را با بیت‌های جداگانه مشخص کنیم، روش بهینه‌ای نخواهد بود.

بهتر است تفاوت دو فریم را با الگوریتم‌هایی خاص، معین کرده و بردار حرکت سوژه را بسازیم. در مراحل بعدی بردار حرکتی هم به روش‌های مختلف به کد تبدیل می‌شود.

800px-Interframe prediction

اگر با تنظیمات اینکدر x264 آشنایی داشته باشید، تنظیمات بسیار مهمی برای تخمین حرکت یا Motion Estimation در آن وجود دارد. اینکه فریم را به بلوک‌هایی در اندازه‌های مختلف تقسیم کنیم و محدودیت اندازه‌ی بردار حرکت سوژه را تغییر دهیم و از همه مهم‌تر، اینکه دقت تقسیم‌بندی و جستجو برای شناسایی سوژه‌های حرکت کرده چه قدر دقیق باشد، همگی در x264 قابل انتخاب است و روی کیفیت و سرعت تبدیل و همچنین دیکد فایل، اثرگذار است.

در تصویر زیر تب مربوط به این تنظیمات را در نرم‌افزار Hybrid مشاهده می‌کنید:

motion-x264

اهمیت H.265 و 4K

از یک جمله‌ی ساده که در بررسی تراشه‌ی قدرتمندی به نام S810 برایتان نوشتم، شروع می‌کنم، تراشه‌ای 8 هسته‌ای که کوآلکام برای وسایل همراه معرفی کرده و اولین 64 بیتی 8 هسته‌ای این کمپانی محسوب می‌شود. 

S810 به عنوان بهترین تراشه، به اینکودر و دیکودر اختصاصی مجهز شده است تا به راحتی ویدیوهای 4K فشرده شده با این کدک (منظور کدک‌های استاندارد H.265) را باز کند و نیز قدرت فشرده‌سازی ویدیو با این کدک را داشته باشد.
مقاله‌های مرتبط:

    جمله‌ی ساده‌ایست اما جالب است بدانید برای یک استاندارد جدید کدک‌های ویدیویی، چند سال تحقیق و توسعه لازم است. آن هم زمانی که از ویدیوهای 4K صحبت می‌کنیم که از نظر مساحت هر فریم ویدیو، 4 برابر بزرگ‌تر از فریم‌های ویدیوی فول ‌اچ‌دی هستند و بار سنگینی بر دوش تراشه‌های امروزی به حساب می‌آیند. S810 قرار است در سال 2015 به دنیای پرهیاهوی تراشه‌ها و وسایل همراه وارد شود و در آن زمان، ویدیوهای 4K و کدک‌های تحت استاندارد H.265، بیش از دوران فعلی متداول شده‌اند.

    H.265 از نظر اینکد و دیکد، بسیار پیچیده‌تر از H.264 امروزی است. در ادامه به بررسی دیکد ویدیوهای فشرده شده با کدک‌های H.264 می‌پردازم. رزولوشن 4K و H.265 بحث اصلی ماست اما فعلاً به H.264 و روش‌های دیکد سخت‌افزاری می‌پردازم.

    HEVC و H.265 چه رابطه‌ای با MPEG-4 Part 10 یا AVC و H.264 دارند؟

    در بخش بعدی مقاله به استانداردسازی کدک‌های مطرح اشاره می‌کنیم، اما فعلاً به صورت خلاصه باید بگوییم که HEVC و H.265 کاملاً مشابه هم هستند. علت این است که دو گروه اصلی استانداردسازی کدک‌های ویدیویی طی همکاری نزدیک خود این دو استاندارد را تصویب کرده‌اند. یک گروه مسئول استانداردهای سری H است که قبلاً H.264 را معرفی کرده بود و گروه دیگر به MPEGها علاقه دارد.

    HEVC مخفف High Efficiency Video Coding و به معنی کد کردن ویدیو با بازدهی بالا است. این استاندارد جدید جایگزین استاندارد AVC که نام دیگر آن MPEG-4 Part 10 است، می‌شود. AVC یا کد کردن پیشرفته‌ی ویدیویی از نظر کیفیت و حجم فایل، استاندارد موفقی بوده اما هدف HEVC، نصف کردن حجم ویدیو با همان کیفیت قبلی است.

    HEVC معادل H.265 است؛ H.264 معادل AVC یا MPEG-4 Part 10

    H.265 یا همان HEVC مورد بحث هم جایگزین H.264 می‌شود. البته H.264 هم از نظر تعاریف و استانداردها بسیار نزدیک به AVC بوده است و پلیرها و ابزارهای همراه، به خوبی با هر دو سازگار هستند. در واقع می‌توان گفت که تمام ابزارهای سازگار با AVC، کدک H.264 را هم به درستی دیکد و پخش می‌کنند اما آنچه بیشتر متداول و مصطلح شده H.264 و H.265 است. در نرم‌افزارهای مختلفی ویرایش یا تبدیل ویدیو، بیشتر با دو عنوان AVC و HEVC سروکار داریم که معادل H.264 و H.265 هستند. بنابراین در عمل تنها با دو استاندارد ساده روبرو هستیم.

    اینکه برای تبدیل ویدیو به H.264 از چه کدکی استفاده کنیم موضوع پیچیده‌ای نیست. به عنوان مثال در دیکد کردن ویدیویی که با یکی از کدک‌های x264، MainConcept، DivX 264، Xvid h.264، Elecard H.264 و انواع سخت‌افزاری مثل Quick Sync H.264 یا CUDA H.264 اینکد شده باشند، تنظیمات متنوع و متفاوت است اما در نهایت وقتی فایل با یکی از کدک‌های تحت استاندارد H.264 تبدیل شده باشد، می‌توان آن را با پلیرهای سازگار با این استاندارد به راحتی اجرا کرد.

    در بخش بعدی مقاله در این خصوص کمی بیشتر توضیح می‌دهم گرچه هدف اصلی، معرفی بهترین‌ها برای فشرده‌‎سازی ویدیو است و نیازی به بررسی تمام موارد نداریم.

    تبلیغات
    داغ‌ترین مطالب روز

    نظرات

    تبلیغات