منظور از اینکد ویدیو که گاهی به اشتباه فشردهسازی ویدیو ترجمه میشود، تبدیل ویدیوی خام (فشرده نشده) به استریمی با حجم کمتر است. استریم در فایلی با پسوند مشخص قرار میگیرد و در هنگام پخش ویدیو، به کمک دیکدر که ممکن است دیکدر سختافزاری باشد پخش میشود.
در ادامه این موضوعات را دقیقتر بررسی میکنیم.
در این مقاله میخواهیم تفسیری کامل از فیلمبرداری و صدابرداری تا ایجاد یک فایل کمحجم ویدیویی داشته باشیم.
استریم صدا و تصویر و متادیتا تهیه میشود. به کمک اینکدری که طبق کدکهای استاندارد تعریف و طراحی شده، فشرده میشود، در قدم بعدی توسط نرمافزارهای مختلف فایلی با پسوند شناخته شده شکل میگیرد و در نهایت فایلی با پسوند mp4 و mkv و ... خواهیم داشت.
کدک (Cedec) چیست؟ چه تفاوتی با پسوند فایل و اینکدر دارد؟
برای اینکد کردن ویدیو از کدک استفاده میشود. کدک مخفف COmpressor DECompressor است و در حقیقت ابزاری برای فشرده کردن و سپس از حالت فشرده خارج کردن داده است. کدکها برای حفظ سازگاری صنعت ویدیو و سینما با انواع وسایل پخش ویدیو، استاندارد شدهاند.
اینکدر ابزاری است که ویدیو را فشرده میکند و نه کدک، اما معمولاً این دو واژه به جای هم به کار میرود و معنا کاملاً نزدیک است. در اینتوتک معمولاً مینویسیم: اینکدر x264 تحت استاندارد H.264 یا گاهی سریع و ساده میگوییم: کدکهای تحت استاندارد H.264 ، حالت اول صحیحتر است. چرایی آن را در ادامه خواهیم دید:
به عنوان مثال استاندارد چند سال پیش صنعت ویدیو H.263 بود. تحت این استاندارد اینکدرهای نرمافزاری معروفی مثل Xvid و DivX شکل گرفت. نتیجه این است که ویدیوی فشرده شده به کمک هر دو اینکدر، در محصولات مختلف پخش میشود و مشکلی به وجود نمیآید. البته استفاده از آپشنهای اضافی هنگام تبدیل ویدیو، مشکلات سازگاری را به دنبال دارد. این روزها H.264 هم استانداردی کاملاً متداول با چندین اینکدر معروف است: x264 ، MainConcept ، Elecard و حتی Xvid و DivX بروز شده، Nero Digital و ... اینکدرهای نرمافزاری تحت این استاندارد کلی هستند و اینکدرهای سختافزاری CUDA و NVENC انویدیا، Quick Sync اینتل و Avivo ایامدی هم بر اساس همین کدک مطرح شدهاند.
صدا و ویدیو به صورت دو استریم جداگانه در یک فایل ویدیویی قرار میگیرد و هنگام پخش فایل، از دو مسیر جدا دیکد و تبدیل به سیگنال تصویری و صوتی میشوند.
برای قرار گرفتن چند استریم در کنار هم ، به استاندارد واحدی نیاز داریم. لذا مقولهی دیگری که استاندارد شده، کانتِینر (Container) فایل است. فایل ویدیویی با پسوند MKV که در حال حاضر یکی از بهترینهاست، شامل یک یا چند استریم ویدیو و همینطور یک یا چند استریم صدا است و دقت کنید که کانتینتری مثل mp4 نمیتواند ویدیوهای با کدک خاص را در خود جای دهد. برخی پلیرها میتوانند فرمت MKV را بازگشایی کنند اما در ادامه ممکن است استریم ویدیو قابل دیکد کردن نباشد و پخش نشود!
برای درست پخش کردن یک ویدیو، اپلیکیشن انتخابی باید کانتینر یا پسوند فایل را شناسایی کند، دیکدر سختافزاری یا حداقل دیکدر نرمافزاری آن روی سیستم عامل نصب شده باشد و به این ترتیب فرآیند پخش ویدیو امکانپذیر شود.
توصیه میکنم یک بار پس از مطالعهی بخشهای بعدی، مجدداً به توضیح تفاوت کدک، اینکدر، پسوند یا فرمت فایل به توضیحات فوق برگردید و ماجرا را مرور کنید.
اینکد ویدیو چیست و چرا به آن نیاز داریم؟ آشنایی با مفهوم کدک
اینکد واژهای با کاربرد بسیار گسترده است. نوع خاص آن اینکد ویدیو است که گاهی به صورت فشرده کردن ویدیو ترجمه میشود ولیکن ممکن است ویدیویی با حجم بیشتر حاصل شود!
اینکد کردن (encode) ویدیو به معنی تبدیل اطلاعات خام ویدیوی معمولی و در حقیقت فشرده نشده یا خام به اطلاعاتی با حجم کمتر است. درست مثل پردازش یک فایل عکس با فرمت RAW و تبدیل آن به فایلی با پسوند jpg که به مراتب کوچکتر است و میتواند از نظر بصری، زیباتر هم باشد.
دقت کنید فرمتی که در DVDها و دیسکهای بلوری به کار میرود هم به ترتیب MPEG2 و H.264 است، هر دو از جمله استانداردهای معروف فشردهسازی ویدیو هستند و در حقیقت ویدیویی با فرمت Lossless (بدون افت کیفیت) در کار نیست هر چند ممکن است حجم ویدیو بسیار زیاد به نظر برسد.
اینکد ویدیوی H.264 به صورت MPEG2 حجم آن را افزایش میدهد، به همین علت ترجمان اینکد به صورت فشردهسازی، کاملاً غلط است!
اینکد کردن ویدیو با نرمافزار و همینطور سختافزار خاص انجام میشود، درست مثل دیکد کردن نرمافزاری و سختافزاری و البته حالت ترکیبی هم وجود دارد. در ادامه به این موارد اشاره میکنم.
اینکد کردن برای کاهش حجم ویدیو
و اصحاب حساب و کتاب، بد نیست محاسبهای کوتاه داشته باشیم که حجم شگفتانگیز ویدیوهای فشردهنشده که در صنعت سینما کاربرد دارد، آشکار شود:
ویدیوی فشرده نشده بسیار حجیم است و به عنوان مثال 1 دقیقه ویدیوی 1080p با سرعت معمولی 24 فریم بر ثانیه و عمق رنگ معمولی 8 بیت، شامل 60 ثانیه ضربدر 24 فریم و ضربدر 2 میلیون پیکسل است، هر پیکسل با سه ساب-پیکسل 8 بیتی تعریف میشود و سه بایت داده نیاز است. بنابراین 24 ضربدر 2 میلیون ضربدر 3 بایت داده برای 1 دقیقه ویدیو نیاز داریم که حدود 9 گیگابایت است.
یک دقیقه ویدیو، حجم 9 گیگابایت، به این ترتیب یک فیلم معمولی 100 دقیقهای، 900 گیگابایت حجم دارد و به هیچ عنوان روی دیسکهای بلوری جا نمیشود!
و سه هدف encode کردن ویدیو که هر یک بخشی از اهمیت آن را توصیف میکند:
اینکد کردن برای افزایش سرعت فیلمبرداری
در یک گوشی رده اول، حافظهی داخلی بسیار سریع است اما بیتریت ویدیوهای فشرده نشده، بسیار بالاست و طبعاً نمیتوان با رزولوشن 1080p و نرخ 24 فریم بر ثانیه فیلمبرداری کرد.
باز هم اگر از اصحاب محاسبه هستید بخوانید:
1080p یا دو میلیون پیکسل (مگاپیکسل) در یک فریم، 24 فریم در هر ثانیه، 3 بایت داده برای یک پیکسل و در نهایت اگر ضرب کنید، بیتریت 150 مگابایت در ثانیه (معادل 1200 مگابیت در ثانیه) به دست میآید. حافظههای میکرواسدی U3 شاید در بهترین حالت چنین سرعتی داشته باشند اما دیگر انواع میکرواسدی فقط کسری از این سرعت عجیب را در اختیار گوشی قرار میدهند
اینکد برای افزایش سرعت دیکد، کاهش مصرف باتری و ...
فرآیند معکوس اینکد، دیکد است. برای دیکد اگر از روش نرمافزاری استفاده شود، هستههای پردازندهی اصلی وارد عمل شده و الگوریتمهای پیچیدهی خواندن داده و سپس ایجاد فریمهای متوالی ویدیو را انجام میدهند. این روش اصلاً بهینه نیست.
روش سختافزاری استفاده از دیکدر سختافزاری است که محدودیتهای زیادی دارد. به عنوان مثال دیکدر سختافزاری از تمام فرمتها پشتیبانی نمیکند و بنابراین برای پخش شدن روان ویدیو و جلوگیری از خالی شدن سریع باتری و همینطور داغ نکردن تراشهی مرکزی گوشی و تبلت، بهتر است ویدیو با کدک خاصی مثل H.264 که تقریباً هر تراشهای دیکدر سختافزاری آن را در اختیار دارد، استفاده شود.
به این نوع اینکد، اصطلاحاً کانورت کردن یا تبدیل فایل هم گفته میشود و هدف آن سازگار کردن ویدیو با محصولات موردنظر است.
دیکد کردن ویدیو و اینکدر و دیکدر سختافزاری
منظور از دیکد کردن (decode) همانطور که اشاره شد تبدیل داده به چیزی مثل فریمهای یک ویدیو است. البته اینکد و دیکد صرفاً در مقال ویدیو و صدا کاربرد ندارند و تعریف دیکد گستردهتر از آن است که بگوییم دیکد یعنی از حالت فشرده خارج کردن و پخش ویدیو.
در دیکد نرمافزاری، الگوریتمها و در واقع مجموعهی مراحلی که داده به فریمهای ویدیو تبدیل میشود، توسط پردازندهی اصلی (عمومی) صورت میگیرد. روش دیگر استفاده از دیکدر سختافزاری است که همان مراحل را با پردازندهای اختصاصی که در اینتوتک تحت عنوان دیکدر سختافزاری به آن اشاره میکنیم، به پایان میرساند. اینکد کردن هم میتواند به صورت نرمافزاری و همینطور سختافزاری مثل شدوپلی انویدیا صورت گیرد. روش ترکیبی هم قابل استفاده است.
دیکدر سختافزاری برای دیکد کردن ویدیوهایی با کدک خاص طراحی شده و کاملاً بهینه است. به همین جهت ممکن است بخش زیادی از مساحت تراشهی مرکزی گوشی را اشغال کند و حتی بزرگتر از هستههای پردازشی باشد ولیکن هنگام پخش ویدیو، بار زیادی را از دوش پردازندهی اصلی برداشته و با کمترین مصرف باتری و همینطور بیشترین سرعت ممکن، ویدیو را دیکد و پخش میکند. نتیجهی دیگر این است که تراشه گرمای کمتری تولید کرده و داغ نمیشود. دیکدر سختافزاری میتواند فرآیندهای پردازشی دیگری مثل افزایش وضوح لبهها را هم انجام دهد.
تصویر زیر تفاوتی که استفاده کردن یا نکردن از دیکدر سختافزاری کوئیک سینک اینتل در تبدیل ویدیو ایجاد میکند را نشان میدهد. دقت کنید که قبل از تبدیل، ویدیو دیکد هم میشود. خط آبی پررنگ حالت کاملاً سختافزاری است که نشان میدهد تبدیل ویدیو در زمانی بسیار کوتاهتر و با مصرف انرژی کمتر، خاتمه یافته است. خط قهوهای (میانگین 30 وات) دیکد نرمافزاری و اینکد سختافزاری است که طبعاً بیشتر طول میکشد و در مجموع انرژی بیشتری مصرف میشود؛ و نکتهی جالب این است که با استفاده از سختافزار کوئیک سینک اینتل، پردازندهی اصلی تقریباً بی کار است!
تفاوت بهینهترین روشهای نرمافزاری و سختافزاری دیکد و اینکد ویدیو
قبلاً بررسی جالب در مورد میزان مصرف انرژی سیستم حین پخش ویدیو به روشهای مختلف تهیه کرده بودم. مقالهی دیگری نیز در باب مقایسه روش نرمافزاری و سختافزاری تبدیل ویدیو تهیه شده.
در نهایت برای چندمین بار توصیه میکنم که در اندروید از پلیرهایی مثل MX Player و در ویندوز از پلیر قدرتمند PotPlayer با قابلیت انتخاب روش دیکد ویدیو و حتی انتخاب انواع دیکدر نرمافزاری و سختافزاری استفاده کنید. دقت کنید که PotPlayer نسخهی بروزتر و پیشرفتهتر KMP معروف است.
در تراشههای امروزی، بخشی به اسم موتور مالتیمدیا وجود دارد. موتور مالتیمدیا همانطور که از نامش پیداست، انواع فایلهای صوتی و ویدیویی را دیکد و پردازش میکند و در حقیقت شامل چند دیکدر سختافزاری برای کدکهای معروف و استاندارد است. بخش دیکدر سختافزاری با نام Video Decode Processor در تراشهی قدیمی تگرا 2 انویدیا را در تصویر زیر مشاهده میکنید، مساحت این بخش بیش از یک هستهی Cortex-A9 و چند برابر بیشتر از Cortex-A7 است حال آنکه این روزها دیکدرهای سختافزاری پیچیدهتر شدهاند:
دقت کنید که دیکدر سختافزاری صرفاً برای دیکد کردن ویدیو طراحی نمیشود، ممکن است دیکدرهای سختافزاری برای رمزگشایی سایر انواع داده و فایل کاربرد داشته باشد.
در مقالهای دیگر اشارهای به کدکهای ویدیویی H.264 و H.265 پرداخته و آنچه در فرآیند فشردهسازی ویدیو رخ میدهد را بسیار خلاصه و کوتاه، مرور میکنیم.
اینتوتک
تشکر از مطلب آموزشی و خوب شما.آفای شیری عزیز آیا کارتهای AMD از کدک x265 برای فشرده سازی پشتیبانی می کنند؟کدام سری هستند؟
دقیق نمیدونم اما تا جایی که دنبال کردم فقط دیکد سختافزاری H.265 رو ساپورت کرده AMD. انویدیا هم روش ترکیبی داره برای اینکد، سختافزاری محض نیست گویا.
x265 نیست البته اسمش، H.265 هست. x265 و x264 نرمافزاری و فوق العاده بهینه هستند و برای استریم ویدیو به درد نمیخورن طبعاً.
ممنون آقای شیری از مقاله.بی صبرانه منتظر مقاله بعدی هستم. 🙂
ممنون.
بعدی یه جورایی خلاصهی آپشنهای اساسی x264 هست! چیز خیلی جدید و جالبی نیست. بیشتر برای خوانندههای جدید سایت مفیده تا شما.
آقای شیری تا حالا چندتا مقاله در مورد فرمت ها و کدک ها از شما خوندم اما هنوز که هنوزه نمیتونم همه مطالبش رو بفهمم و گیج میشم! اگه میشه تو مقاله های بعدی یکی دوتا ویدئو هم اضافه کنید آماتور ها هم یه کم با این قضیه آشناتر بشن!
سلام خسته نباشید.من یک فایل ویدیویی با پسوند ccl دارم که با ویدیو پلیر خاصی میشه دید.این کدک هست یا اینکد؟چطوری باید با یک ویدیو پلیر معمولی دیدش؟
سلام
پسوند فایل ccl رو تا به حال ندیدم. با VLC و PotPlayer اگر باز نشه، برنامهای که بازش کنه راحت پیدا نمیشه.