برداشت بسیاری از ما از مفهوم کدک (Codec) اشتباه است. به عنوان مثال در مقالات زیادی از H.264 به عنوان یک کدک ویدیویی یاد میکنیم؛ در حالی که اصلاُ کدک نیست. به جای Encoding از برابرهای فارسی اشتباهی مثل رمزگذاری یا رمزنگاری استفاده میکنیم. Encryption را مترادف با Encoding میدانیم. mp4 را نوعی کدک ویدیویی فرض میکنیم. بسیاری از این اشتباهات مصطلح شده و دیگر نمیتوان به آن خرده گرفت؛ ولی به هر حال دانستن بهتر از ندانستن است. در این مقاله میخواهیم به کوتاهترین شکل ممکن، اشکالات رایج در بهکارگیری این اصطلاحات را برطرف کنیم.
آشنایی با مفهوم Encoding و Encryption
این دو واژه اغلب به خاطر قرابت معنایی، اشتباه گرفته میشوند.
Encoding (کدینگ یا کدگذاری) – که گاهی با رمزنگاری یا رمزگذاری اشتباه میشود – فرایند تبدیل دادهها از شکلی به شکل دیگر است. به عکس این عمل Decoding یا کدگشایی میگویند. به عنوان مثال دادههایی که بر بستر وب منتقل میشوند به شکل باینری ارسال و سپس در مقصد با عمل دیکدینگ به شکل اولیه بازمیگردند. اسکی (ASCII) نمونهٔ مشهوری از انکدینگ است که کاراکترهای انگلیسی را به معادلهای عددی تبدیل میکند. به همین ترتیب، کدینگ فرمتهای دیگری مثل Base64, Unicode داریم. زبان اشارۀ ناشنوایان یک نمونه از انکدینگ در دنیای واقعی است.
از سوی دیگر Encryption (رمزنگاری یا رمزگذاری)، فرایند تبدیل اطلاعات به فرمتی است که تنها مخاطب هدف با در دست داشتن کلید رمزگشایی میتواند به اصل پیام دست پیدا کند. عکس این عمل Decryption (رمزگشایی) نام دارد. در اینکریپشن، بر خلاف انکدینگ، به دنبال مخفی کردن اطلاعات هستیم. از روشهای مرسوم رمزنگاری میتوان به AES, RSA اشاره کرد. وقتی با زبان رمز با دوست خود صحبت میکنید در حال انجام یک عمل رمزنگاری هستید؛ چون فقط او میتواند منظور شما را بفهمد.
کدک چیست؟
Codec از ترکیب دو کلمۀ Coder/Decoder ساخته شده و به نرمافزار یا سختافزاری اطلاق میشود که سیگنال یا جریان دادۀ ورودی را اینکد و/یا دیکد میکند. کدک برخلاف تصور عموم، یک روش یا الگوریتم انکدینگ نیست، بلکه نرمافزار یا سختافزاری است که یک الگوریتم اینکودینگ/دیکودینگ را پیادهسازی کرده است.
اشتباه رایج دیگر این است که به خاطر شهرت زیاد کدینگ فرمتها در دنیای ویدیو، از آنها به عنوان الگوریتمهای فشردهسازی یاد میکنند. این گفته تا حدودی درست است چون غریب به اتفاق همهٔ کدینگ فرمتهایی ویدیویی یا صوتی، در بخشی از فرایند خود عمل فشردهسازی را انجام میدهند؛ ولی نکته اینجاست که ما کدینگ فرمتهایی داریم که در آنها خبری از فشردهسازی نیست؛ به عنوان مثال زبان ناشنوایان، کدگذاری مورس یا تکنیکهای کدگذاریهای NRZ و NRZI. بنابراین بهتر است به جای الگوریتم فشردهسازی از همان عبارت کدینگ فرمت استفاده کنیم.
کدک، پیادهسازی نرمافزاری یا سختافزاری یک کدینگ فرمت است؛ به عنوان مثال کدک x264، پیادهسازی نرمافزاری کدینگ فرمت H.264 است و تصویر پایین یک نمونه پیادهسازی سختافزاری آن را نشان میدهد. بنابراین نگوییم کدک H.264، بگوییم کدینگ فرمت H.264.
گاهی عمل انکدینگ و دیکدینگ توسط دو قطعۀ جدا به اسم انکودر و دیکودر انجام میشود و گاهی هر دوی آنها روی یک قطعهٔ واحد تعبیه شده است (مثلا تصویر بالا).
چند نمونه از کدینگ فرمتهای مشهور ویدیویی که تقریباً همهٔ آنها به استانداردهای صدا و تصویر تبدیل شدهاند عبارتند از: H264, H265, VP9, AV1, H266 و چند کدینگ فرمت صوتی: MP3, AAC, Vorbis, FLAC, Opus, G.722.
کانتینر (Container) چیست؟
Container یا Wrapper (حامل) فایلی است که اجازه میدهد چندین data stream درون آن ذخیره شود. ZIP و MP4 و AVI چند نمونه از کانتینرهای مشهور هستند که بارها با آنها سروکار داشتهایم. یک ویدیوی MP4 میتواند حاوی چندین زیرنویس و دوبلهٔ مختلف باشد. کانتینر مثل یک ظرف، دادههای مختلف را درون خود ذخیره میکند. وقتی یک فیلم تماشا میکنید ویدیو و صدا همزمان با هم پخش میشود. در پخش آنلاین، معمولاً استریمها به قطعات کوچکی شکسته میشود که به هر یک از آنها Chunk یا سگمنت گفته میشود. هر یک از این سگمنتها، زمان شروع و پایان دارند. تمام این اطلاعات درون کانتینر ذخیره شده است. پلیر با دیدن این اطلاعات متوجه میشود که چه زمانی باید کدام قطعه از ویدیو و صدا را دیکد و نمایش دهد و چگونه صدا و تصویر را با هم هماهنگ کند.
چند نمونه از مدیا کانتینرهای معروف عبارتند از: MP4, WebM, Matroska, MPEG-TS, FLV و AVI. در بین اینها MPEG-TS را بیشتر با پسوند ts میشناسیم و Matrsoka را با پسوند mkv.
نکته: کانتینر را با پسوند فایل اشتباه نگیرید. پسوند فایل صرفاً یک زبان قراردادی است که به سیستمعامل میفهماند فلان فایل را با چه نرمافزاری باز کند. برای امتحان، پسوند یک فایل ویدیویی را حذف کنید و سپس آن را با یک پلیر باز کنید. خواهید دید که بدون هیچ مشکلی پخش میشود. آنچه مهم است محتوای فایل است، پسوند آن اهمیت زیادی ندارد. البته هنگام آپلود فایل در اینترنت هیچگاه پسوند فایل را حذف نکنید؛ چون مرجع اعتبارسنجی یک فایل و تشخیص فرمت آن در اینترنت، اغلب پسوند فایل است؛ دلیلش این است که دانلود فایل و سپس تشخیص محتوای فایل، زمان بیشتری از چک کردن پسوند فایل میبرد.