نگاهی به دنیای فایل‌های ویدیویی، بخش اول: آشنایی با فرمت‌ها، پسوندها و پخش‌کننده‌ها

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

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

این تصور کاملاً غلط است و شاید بارها با فایل‌هایی مثل MP4 برخورد داشته‌ایم که علی‌رغم ظاهر معمولی‌شان، با پلیرهای نصب شده، باز نمی‌شوند و هر بار هم به دنبال یک بسته‌ی کدک یا یک نرم‌افزار پخش ویدیوی جدید بوده‌ایم.

پسوند فایل نشان‌دهنده‌ی فرمت آن نیست!

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

قالب، پسوند یا کانتینر چیست؟

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

ممکن است پسوند یک فایل ویدیویی MP4 را تغییر دهیم تا نوع آن عوض شود. اما همان‌طور که می‌دانید، به این کار نمی‌توان باعث تغییر در اطلاعات داخلی آن شد.

استریم یا جریان ویدیو و صدا، هر کدام یک فایل صوتی یا ویدیویی هستند که فرمت خاصی دارند

هر فایل ویدیویی پسوندی دارد که به Container یا ظرفی که صدا و ویدیو در آن ریخته شده اشاره می‌کند. مثلاً زمانی که با MKV Merge یک فایل ویدیویی می‌سازیم، استریم یا جریان صدا و تصویر را با مشخص کردن آدرسشان و برخی پارامترهای مربوطه در کنار فایل یا فایل‌های زیر‌نویس و زمان‌بندی فصل‌ها، در یک جعبه به نام MKV قرار می‌دهیم.

به تصویری از واسط گرافیکی mkvmerge توجه کنید:

mkv-merge

یک فایل با پسوند mp4 که در آن استریم صدا و ویدیو وجود داشته با فایل زیرنویسی که پسوند srt دارد، قرار است در یک فایل ادغام شوند.

ممکن است چندین استریم ویدیو و چندین استریم صدا که دوبله‌ی فیلم به زبان‌های مختلف هستند را در کانتینر MKV بریزیم در حالی که هر استریم صدا یا ویدیو به تنهایی، دارای پسوند و به عبارتی کانتینر خاص خود است. مثلاً استریم‌های موجود در فایل mkv فیلم آواتار را در تصویر زیر ببینید:

avatar-mkvmerge

همان‌طور که گفتیم MP4 هم یک پسوند یا دقیق‌تر بگوییم، یک کانتینر یا ظرف است. می‌توان در این ظرف تمام استریم‌هایی که در تصویر بالا در قالب یک فایل MKV ریخته شده بود را قرار داد و یک فایل نهایی با پسوند MP4 تحویل گرفت. به تصویر زیر توجه کنید:

yamb

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

کانتینر چیزی است که صدا و ویدیو و دیگر اجزای یک فایل ویدیویی را در کنار هم و با یک پسوند خاص مثل MP4 یا MKV قرار می‌دهد

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

اسپلیتر در فرآیند باز کردن فایل چه نقشی دارد؟

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

اسپلیتر استریم‌های موجود در کانتینر را بیرون می‌کشد

اسپلیترها هم انواع زیادی دارند و برای هر یک از کانتینرها ممکن است چندین اسپلیتر خوب در اختیار داشته باشید. مثلاً به عنوان مثال Matroska Splitter ابزاری است که برای بازگشایی فایل‌های MKV و جدا کردن استریم صدا و ویدیو کاربرد دارد. LAV Video filter هم نرم‌افزاری متن‌باز برای باز کردن کانتینترها است که به خوبی پیشرفت کرده و بیشتر پسوندها را شناسایی می‌کند. 

lav-filters

کاری که اسپلیتری مثل LAV روی یک ورودی مثل MP4 انجام می‌دهد، به صورت زیر است؛ یعنی استریم‌ها جدا شده و به دیکدرهای مربوطه ارسال می‌شوند. در نهایت ویدیو توسط رندر کننده و صدا توسط خروجی صدا پخش می‌شود:

LAVgraph

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

نرم‌افزار‌های حرفه‌ای دارای تنظیمات زیادی برای انتخاب اسپلیتر و دیکدر هستند. مثلاً Pot Player که سازنده‌ی کره‌ای آن شخصی است که قبلاً KMPlayer معروف را هدایت کرده، یکی از ابزارهای پیشرفته‌ی پخش ویدیو با تنظیمات بسیار زیاد است. مدیا پلیر کلاسیک، VLC و KMPlayer هم از بهترین پلیرهای موجود هستند که تقریباً تمام کانتینرها و استریم‌ها را می‌شناسند.

روی سیستم من برای باز کردن یک فایل AVI سالم و بدون نقص، اسپلیتر FFmpeg و اسپلیتر AVI مایکروسافت در کنار دو اسپلیتر اضافی نصب شده است:

normal-avi

حال اینکه اسپلیترها هم از نظر کارایی و کیفیت یکسان نیستند و به عنوان مثال در مواجهه با AVIهای معیوب، اسپلیتر مایکروسافت کاربردی ندارد یا لااقل در لیست Pot Player دیده نمی‌شود:

damaged-avi

اسپلیتر خوب حتی فایل ناقص را بازگشایی می‌کند

در ضمن اسپلیترها از نظر استفاده از پردازنده و منابع سیستم هم در حد بسیار کمی متفاوت هستند که با توجه به قدرت بسیار بالای تراشه‌های امروزی، بهتر است به آن نپردازیم اما اینکه اسپلیتری بتواند فایل AVI معیوب را باز کند، یک برتری ارزشمند دارد. به عنوان مثال یک فایل نیمه دانلود شده را می‌توان با پلیری مثل VLC باز کرد حال آنکه در گذشته، امکان باز کردن آن با KMPlayer وجود نداشت. ویندوز مدیا پلیر هم در این موارد معمولاً چندان قوی نیست. در مجموع مدیا پلیر کلاسیک و پات پلیر، جزء منعطف‌ترین پلیرها هستند گرچه ممکن است در ابتدای کار، استفاده از آنها کمی مشکل‌تر باشد و نتوان تنظیمات مهم را در انبوهی از گزینه‌ها و منوها پیدا کرد.

دیکد و اینکد  با باز کردن کانتینر متفاوت است

تبدیل یا Convert شدن واقعی یک فایل زمانی اتفاق می‌افتد که استریم صدا یا ویدیو را با یک کدک خاص، از نو بسازیم. مثلاً فایل موسیقی حجیمی را با یک اینکدر یا به اصطلاح کدکننده، فشرده کنیم تا حجم کمتری داشت باشد. یعنی اتفاقی مثل تصویر زیر که در آن ورودی‌های ما، صدا و ویدیو هستند که پس از فشرده‌سازی با کدک موردنظر، در قالب یک فایل MP4، MOV، AVI و MKV ریخته می‌شوند. البته دقت داشته باشید که اساساً فشرده کردن واژه‌ی عامیانه‌ای در دنیای کدک‌ است. واژه‌ی اصلی کد کردن یا به عبارت دیگر تبدیل استریم و داده‌های دیجیتال به کدهایی با ساختار خاص است.

audio-video-stream

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

flv-codec

قانون پخش فایل این است که ما دیکدر مربوطه را روی کامپیوتر خود داشته باشیم.

برای VP6 و نسل امروزی‌تر آن یعنی VP8 و VP9 که گوگل در کدک WEBM خود از آن استفاده کرده، دیکدر WEBM را لازم داریم که البته مرورگر کروم گوگل، چنین قابلیتی را در خود نهفته دارد. برای H.264 که محبوب‌ترین کدک امروزی است هم باید دیکدر خاص آن را روی سیستم نصب کرد، البته ویندوز به صورت پیش‌فرض این کار را انجام می‌دهد. به همین ترتیب برای هر کدک، دیکدر خاصی لازم داریم. 

تغییر ظرف لزوماً به معنی تبدیل فایل نیست!

واژه‌ی کدک کمتر استفاده می‌شود و معمولاً افراد با واژه‌ی فرمت میانه‌ی بهتری دارند. بنابراین تعریف غلط فرمت که همان پسوند فایل است را کنار می‌گذاریم و اینگونه توضیح می‌دهیم:

منظور از فرمت یک فایل، همان شیوه‌ی کد شدن ویدیو و صدا در آن است.

بنابراین هر فرمت ویدیویی یا صوتی، با اینکدری خاص کد شده است. برای باز کردن هم باید متناسب با اینکدر استفاده شده، دیکدر خاصی به کار گرفته شود. مجموعه‌ی اینکدر و دیکدر را کدک می‌گویند. در واقع Codec مخفف COmpressor-DECompressor است به این معنی که هم فشرده می‌کند و هم از حالت فشرده خارج می‌سازد. البته مخفف COde-DECoder هم هست که معنای متفاوتی ندارد.

video-formats

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

خلاصه‌ی تمام موارد فوق به صورت زیر است:

  • اینکدر استریم صدا یا ویدیو را فشرده می‌کند
  • کانتینرهایی با پسوند MKV، MP4 یا AVI، جریان صدا یا ویدیو و دیگر موارد را در یک فایل با یک پسوند مشخص می‌ریزند
  • هنگام پخش، دیکدر مناسب با توجه به کدکی که ویدیو و صدا با آن فشرده شده، انتخاب می‌شود تا صدا و ویدیو دیکد شده و پخش شوند

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

از سراسر وب

  دیدگاه
کاراکتر باقی مانده

بیشتر بخوانید