زمانی که برای عکاسی از فرمت RAW استفاده می‌کنیم، ممکن تعداد رنگ‌ها یا Bit-depth بیش از حد معمول باشد. حالت معمول این است که هر پیکسل از سه رنگ RGB (مخفف Red و Green و Blue) تشکیل شده که هر یک ۸ بیت یا ۲۵۶ حالت دارند. اما در دوربین‌های حرفه‌ای‌تر از عکاسی RAW با ۱۲ بیت یا ۱۴ بیت عمق رنگ هم پشتیبانی می‌شود که به معنی تنوع بسیار بیشتر رنگ‌هاست.

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

در ادامه با فرمت RAW و flac و همین‌طور مفهوم دیکدر و اینکدر و موتور مالتی‌مدیا در CPU و کارت گرافیک‌های امروزی و عمق رنگ بیشتر آشنا می‌شویم.

فرمت RAW یا خام با و بدون الگوریتم‌های فشرده‌سازی

با توجه به اینکه تصویر بدون هیچ گونه پردازش و بهینه‌سازی ذخیره می‌شود، کیفیت ظاهری آن عالی نیست و به علاوه فایل حجیم است اما عکاسان حرفه‌ای این فایل‌های دست‌نخورده را ترجیح می‌دهند و با نرم‌افزارهایی مثل Adobe Lightroom یا Photoshop مشغول بهینه‌سازی می‌شوند. 

فرمت RAW ممکن است به صورت Uncompress یا بدون فشرده‌سازی و یا با فشرده‌سازی بدون افت کیفیت که Lossless Compressed گفته می‌شود، روی حافظه ذخیره شود تا فایل‌ها حجم کمتری اشغال کنند. تفاوت این حالت‌ها را قبلاً بررسی کردیم و مقایسه‌ای بین کیفیت RAW دوربین‌های مختلف انجام دادیم:

اکنون به مقوله‌ی عمق رنگ یا Bit-depth می‌پردازیم.

Bit-depth یا عمق رنگ چیست؟

منظور از Bit-depth این که برای بازسازی و توصیف هر یک از رنگ‌های اصلی چند بیت داده استفاده می‌شود و اگر عدد ۲ را به توان Bit-depth برسانیم، مشخص می‌شود که هر رنگ اصلی چند حالت دارد.

حالت معمولی این است که عمق رنگ ۸ بیت یا ۱ بایت باشد. به عبارت دیگر یک فایل عکس یا ویدیوی که هیچ نوع فشرده‌سازی در آن به کار نرفته، برای یک پیکسل ۲۴ بیت داده نیاز دارد. حالت‌های دیگر این است که عمق رنگ ۱۰ بیت یا ۱۲ و ۱۴ بیت و … باشد. در این صورت تنوع رنگ‌ها به مراتب بیشتر است.

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

در حالت معمولی که عمق رنگ ۸ بیت است، که غلظت هر رنگ از ۰ تا ۲۵۵ قابل تغییر است و ۲۵۶ حالت ممکن دارد که معادل ۲ به توان ۸ است. به عنوان مثال رنگ قرمز در یک پیکسل عکس یا یک پیکسل نمایشگر، ممکن است وجود نداشته باشد و صفر باشد و همین‌طور ممکن است قرمز با غلظت کامل در یک پیکسل استفاده شود و مقدار عددی آن، ۲۵۵ باشد. همین‌طور رنگ سبز و آبی. با ترکیبی این سه رنگ، هر رنگ دیگری تولید می‌شود. برای اشاره به این سه رنگ، از RGB که مخفف Red یا قرمز، Green یا سبز و Blue یا آبی است، استفاده می‌شود.

در دوربین‌های پیشرفته برای عکاسی RAW، می‌توان ۲۰ تا ۶۰ درصد از حجم فایل RAW را با فشرده‌سازی به صورت توأم با افت کیفیت و بدون افت کیفیت، کاهش داد.

روش محاسبه کردن حجم فایل‌های ویدیویی و عکس با عمق رنگ‌های مختلف

در مورد عکس‌ها کافی است رزولوشن (ارتفاع و عرض) را در ۲۴ بیت (یا ۳ بایت) ضرب کنید. مثلاً عکسی با رزولوشن ۱۹۲۰ در ۱۰۸۰ (فول اچ‌دی) اگر فشرده‌سازی انجام نشود، ۶ مگابایت خواهد بود! اما همیشه از یکی از کدک‌ها برای فشرده‌سازی استفاده می‌شود و حجم فایل به مراتب کمتر است.

تبدیل به PNG یا JPG توأم با فشرده‌سازی است و در حقیقت مجموعه‌ای از پیکسل‌های مجاور با روش‌های مختلف، ترکیب شده و داده‌ی کمتری برای تعریف رنگ استفاده می‌شود و حجم فایل به شدت کمتر می‌شود.

فشرده‌تر از فرمت‌هایی مثل jpg نیز در گذر زمان معرفی می‌شود، مثل HEIC نوکیا که اکنون در برخی محصولات اپل به کار می‌رود:

در مورد ویدیوها می‌بایست Frame Rate که تعداد فریم‌ها در یک ثانیه ویدیو است را نیز در حجم یک فریم ضرب کنیم. به عنوان مثال اگر ویدیویی فول اچ‌دی (حدود ۲ مگاپیکسل یا ۲ میلیون پیکسل) باشد و فریم‌ریت آن نیز ۲۴ باشد، در یک ثانیه ۲۴ فریم ۶ مگابایتی خواهیم داشت و این یعنی یک ثانیه ویدیوی Full HD حجمی در حدود ۱۴۴ مگابایت دارد! با کدک‌های بسیار ساده که فریم‌های شبیه به هم را حذف می‌کنند، این حجم چندین برابر کمتر می‌شود.

مفهوم اینکدر و دیکدر و دیکدر سخت‌افزاری و موتور مالتی‌مدیا در تراشه‌های امروزی

همیشه برای ذخیره کردن فایل‌ها به شکلی که حجم زیادی اشغال نشود، از الگوریتم‌های فشرده‌سازی استفاده می‌کنیم.

Encoder نرم‌افزار یا سخت‌افزاری است که فریم‌های یک فایل ویدیویی یا پیکسل‌های یک فایل تصویری و یا امواج یک فایل صوتی را پردازش می‌کند و در صورتی که ممکن باشد، با روش‌های مختلف آن را ساده کرده و یا کاری می‌کند که بتوان با مقدار کمی داده، فایل را بازسازی کرد و در نتیجه فایل فشرده می‌شود.

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

به عنوان مثال flac مثل فایل‌های صوتی WAVE بدون افت کیفیت فایل‌های صوتی را فشرده می‌کند و یکی از بهترین فرمت‌ها برای کسانی است که می‌خواهند فایل‌هایی با ظرفیت کم و در عین حال کیفیت اصلی داشته باشند:

Decoder فرآیند عکس را انجام می‌دهد و این یعنی زمانی که فایل را Play کرده و باز می‌کنیم، فایل اصلی به شکل ساده‌تر (همراه با افت کیفیت) و یا به همان شکل اولیه و بدون افت کیفیت، بازسازی می‌شود. دیکدر را گاهی رمزگشا می‌گویند چرا که کدها را معنی کرده و فایل اصلی را بازسازی می‌کند.

به عنوان مثال زمانی که می‌خواهیم حجم یک فایل ویدیویی را کمتر کنیم، روش‌های زیر بسیار موثر هستند و به راحتی حجم فایل را چندین برابر کمتر می‌کنند و افت کیفیت نیز ممکن است بسیار کم و ناچیز باشد.

  • اگر چند فریم ویدیو در صحنه‌ای ساکن، کاملاً یکسان باشد، می‌توان فقط یکی را نگه داشت و همان فریم را چند بار تکرار کرد.
  • اگر در چند فریم، زمینه ثابت باشد و سوژه حرکت کند، تنها چیزی که لازم است ذخیره شود، مقدار حرکت سوژه در فریم‌های بعدی است. بنابراین چند بایت داده می‌تواند فریم‌های زیادی را بازسازی کند و این کاری است که دیکدر ویدیو انجام می‌دهد. به عبارت دیگر بردار حرکتی یا Motion Vector‌ تخمین زده شده و در فایل ذخیره می‌شود.

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

روش‌ها و الگوریتم‌های پیچیده‌تری نیز در اینکدرهای پیشرفته مثل اینکدرهای تحت استاندارد H264 و H265 و همین‌طور VP9 گوگل و … استفاده شده که در نهایت حجم ویدیوهای فول اچ‌دی را ده‌ها برابر کمتر از حالت بدون فشرده‌سازی می‌کند.

توجه کنید که اینکدر و همین‌طور دیکدر ممکن است به صورت سخت‌افزاری و با تکیه بر قدرت سخت‌افزار طراحی شده باشند که معمولاً اجرای سریع‌تری دارد و برق کمتری نیز مصرف می‌شود. به کمک دیکدرهای سخت‌افزاری که در موتور مالتی‌مدیا یا Multimedia Engine تراشه‌های امروزی به عنوان بخشی مهم اضافه شده‌اند، می‌توان ویدیوهای 4K که به شدت فشرده شده را به راحتی پخش کرد، بدون آنکه بدنه‌ی گوشی یا لپ‌تاپ داغ شود و باتری به سرعت خالی شود. CUDA انویدیا و QuickSync اینتل نمونه‌‌هایی از این روش جالب هستند. برای اطلاعات بیشتر به مقاله‌ای که قبلاً منتشر کردیم توجه فرمایید:

کدک و استانداردهای برای اینکدرها و دیکدرهای مختلف

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

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

کدک مخفف Compressor Decompressor و به معنی ابزار فشرده‌سازی و از حالت فشرده خارج کردن است.

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

به عنوان مثال استاندارد H264 که تا سال پیش برای فشرده‌سازی اغلب ویدیوها و فیلم‌ها استفاده می‌شد و هنوز هم متداول‌ترین مورد است، یک کدک کلی است. اینکدرهای مختلف تحت این استاندارد ساخته شده که معروف‌ترین و بهینه‌ترین اینکدر، x264 است. پروژه‌ای متن‌باز که متخصصین بسیاری در بهینه‌سازی آن مشارکت داشته‌اند و اکنون از نظر سرعت و کیفیت، رقیبی برای آن وجود ندارد اما چند سال پیش به موازات اینکدرهایی مثل Xvid و DivX‌ و Elecard و MainConcept و Nero و … بروز می‌شد.

برای نصب یا آن‌اینستال کردن کدک‌ها به مقاله‌ای که قبلاً منتشر کردیم توجه فرمایید: