ویڈیو کوڈیک کیسے کام کرتا ہے؟ حصہ 2۔ کیا، کیوں، کیسے

پہلا حصہ: ویڈیو اور تصاویر کے ساتھ کام کرنے کی بنیادی باتیں

ویڈیو کوڈیک کیسے کام کرتا ہے؟ حصہ 2۔ کیا، کیوں، کیسے

کیا؟ ویڈیو کوڈیک سافٹ ویئر/ہارڈ ویئر کا ایک ٹکڑا ہے جو ڈیجیٹل ویڈیو کو کمپریس اور/یا ڈیکمپریس کرتا ہے۔

کس لئے؟ بینڈوتھ کے لحاظ سے کچھ حدود کے باوجود اور
اور ڈیٹا ذخیرہ کرنے کی جگہ کے لحاظ سے، مارکیٹ تیزی سے اعلیٰ معیار کی ویڈیو کا مطالبہ کرتی ہے۔ کیا آپ کو یاد ہے کہ پچھلی پوسٹ میں ہم نے 30x24 ریزولوشن کے ساتھ 480 فریم فی سیکنڈ، 240 بٹس فی پکسل کے لیے مطلوبہ کم از کم کا حساب کیسے لگایا؟ ہمیں کمپریشن کے بغیر 82,944 Mbit/s موصول ہوا۔ کمپریشن فی الحال عام طور پر HD/FullHD/4K کو ٹیلی ویژن اسکرینوں اور انٹرنیٹ پر منتقل کرنے کا واحد طریقہ ہے۔ یہ کیسے حاصل ہوتا ہے؟ اب مختصراً اہم طریقوں کو دیکھتے ہیں۔

ویڈیو کوڈیک کیسے کام کرتا ہے؟ حصہ 2۔ کیا، کیوں، کیسے

ترجمہ EDISON سافٹ ویئر کے تعاون سے کیا گیا تھا۔

ہماری منگنی ہو چکی ہے ویڈیو نگرانی کے نظام کا انضماماور ہم ایک مائکروٹوموگراف تیار کر رہے ہیں۔.

کوڈیک بمقابلہ کنٹینر

نوزائیدہوں کی ایک عام غلطی ڈیجیٹل ویڈیو کوڈیک اور ڈیجیٹل ویڈیو کنٹینر کو الجھانا ہے۔ کنٹینر ایک خاص شکل ہے۔ ویڈیو (اور ممکنہ طور پر آڈیو) میٹا ڈیٹا پر مشتمل ایک ریپر۔ کمپریسڈ ویڈیو کو کنٹینر پے لوڈ کے طور پر سوچا جا سکتا ہے۔

عام طور پر، ویڈیو فائل کی توسیع اس کے کنٹینر کی قسم کی نشاندہی کرتی ہے۔ مثال کے طور پر، فائل video.mp4 شاید ایک کنٹینر ہے۔ MPEG-4 حصہ 14، اور video.mkv نامی فائل کا سب سے زیادہ امکان ہے۔ میٹر. کوڈیک اور کنٹینر فارمیٹ کے بارے میں مکمل طور پر یقین کرنے کے لیے، آپ استعمال کر سکتے ہیں۔ FFmpeg یا میڈیا انوفو.

تاریخ کا ایک تھوڑا سا

اس سے پہلے کہ ہم پہنچ جائیں۔ کس طرح؟آئیے کچھ پرانے کوڈیکس کو تھوڑا بہتر سمجھنے کے لیے تاریخ میں تھوڑا سا غوطہ لگائیں۔

ویڈیو کوڈیک H.261 1990 میں نمودار ہوا (تکنیکی طور پر - 1988 میں) اور اسے 64 Kbps کی ڈیٹا ٹرانسفر ریٹ پر کام کرنے کے لیے بنایا گیا تھا۔ اس نے پہلے ہی آئیڈیاز استعمال کیے ہیں جیسے کلر سب سیمپلنگ، میکرو بلاکس وغیرہ۔ ویڈیو کوڈیک کا معیار 1995 میں شائع ہوا تھا۔ H.263، جو 2001 تک تیار ہوا۔

پہلا ورژن 2003 میں مکمل ہوا۔ H.264 / AVC. اسی سال، TrueMotion نے اپنا مفت نقصان دہ ویڈیو کوڈیک جاری کیا۔ VP3. گوگل نے کمپنی کو 2008 میں خریدا، جاری کیا۔ VP8 اسی سال. دسمبر 2012 میں گوگل نے ریلیز کیا۔ VP9، اور یہ تقریباً ¾ براؤزر مارکیٹ (بشمول موبائل آلات) میں تعاون یافتہ ہے۔

AV1 — это новый бесплатный видеокодек с открытым исходным кодом, разработанный الائنس فار اوپن میڈیا (اے اومیڈیا)، جس میں سب سے مشہور کمپنیاں شامل ہیں، جیسے: Google, Mozilla, Microsoft, Amazon, Netflix, AMD, ARM, NVidia, Intel اور Cisco۔ کوڈیک کا پہلا ورژن، 0.1.0، 7 اپریل 2016 کو شائع ہوا تھا۔

AV1 کی پیدائش

2015 کے اوائل میں، گوگل پر کام کر رہا تھا۔ VP10Xiph (جو Mozilla کی ملکیت ہے) پر کام کر رہا تھا۔ ڈالا۔، اور سسکو نے اپنا مفت ویڈیو کوڈیک بنایا جس کو کہا جاتا ہے۔ Thor.

اس کے بعد ایم پی ای جی ایل اے کے لیے پہلے اعلان کردہ سالانہ حدود HEVC (H.265) اور H.8 کے مقابلے میں 264 گنا زیادہ فیس، لیکن انہوں نے جلد ہی دوبارہ قواعد کو تبدیل کر دیا:

کوئی سالانہ حد نہیں،
مواد کی فیس (آمدنی کا 0,5%) اور
یونٹ کی فیس H.10 سے تقریباً 264 گنا زیادہ ہے۔

الائنس فار اوپن میڈیا مختلف شعبوں کی کمپنیوں کے ذریعہ تخلیق کیا گیا تھا: سازوسامان بنانے والے (Intel, AMD, ARM, Nvidia, Cisco), مواد فراہم کرنے والے (Google, Netflix, Amazon), براؤزر تخلیق کار (Google, Mozilla) اور دیگر۔

کمپنیوں کا ایک مشترکہ مقصد تھا - ایک رائلٹی فری ویڈیو کوڈیک۔ پھر ظاہر ہوتا ہے۔ AV1 ایک بہت آسان پیٹنٹ لائسنس کے ساتھ۔ Timothy B. Terryberry نے ایک شاندار پریزنٹیشن دی جو موجودہ AV1 تصور اور اس کے لائسنسنگ ماڈل کی اصل بن گئی۔

آپ کو یہ جان کر حیرت ہوگی کہ آپ ایک براؤزر کے ذریعے اے وی 1 کوڈیک کا تجزیہ کر سکتے ہیں (جو دلچسپی رکھنے والے اس پر جا سکتے ہیں۔ aomanalyzer.org).

ویڈیو کوڈیک کیسے کام کرتا ہے؟ حصہ 2۔ کیا، کیوں، کیسے

یونیورسل کوڈیک

آئیے یونیورسل ویڈیو کوڈیک کے بنیادی میکانزم کو دیکھتے ہیں۔ ان میں سے زیادہ تر تصورات کارآمد ہیں اور جدید کوڈیکس میں استعمال ہوتے ہیں جیسے VP9, AV1 и HEVC. میں آپ کو متنبہ کرتا ہوں کہ بیان کردہ بہت سی چیزیں آسان ہو جائیں گی۔ کبھی کبھی حقیقی دنیا کی مثالیں (جیسا کہ H.264 کے ساتھ) ٹیکنالوجیز کو ظاہر کرنے کے لیے استعمال کی جائیں گی۔

پہلا مرحلہ - تصویر کو تقسیم کرنا

پہلا قدم فریم کو کئی حصوں، ذیلی حصوں اور اس سے آگے میں تقسیم کرنا ہے۔

ویڈیو کوڈیک کیسے کام کرتا ہے؟ حصہ 2۔ کیا، کیوں، کیسے

کس لیے؟ اس کی بہت سی وجوہات ہیں۔ جب ہم کسی تصویر کو تقسیم کرتے ہیں، تو ہم چھوٹے حرکت پذیر حصوں کے لیے چھوٹے حصوں کا استعمال کر کے موشن ویکٹر کی زیادہ درست پیش گوئی کر سکتے ہیں۔ جب کہ ایک مستحکم پس منظر کے لیے آپ خود کو بڑے حصوں تک محدود کر سکتے ہیں۔

کوڈیکس عام طور پر ان حصوں کو حصوں (یا ٹکڑوں)، میکرو بلاکس (یا کوڈنگ ٹری بلاکس) اور متعدد ذیلی حصوں میں ترتیب دیتے ہیں۔ ان پارٹیشنز کا زیادہ سے زیادہ سائز مختلف ہوتا ہے، HEVC اسے 64x64 پر سیٹ کرتا ہے جبکہ AVC 16x16 استعمال کرتا ہے، اور ذیلی پارٹیشنز کو 4x4 سائز تک تقسیم کیا جا سکتا ہے۔

کیا آپ کو آخری مضمون کے فریموں کی اقسام یاد ہیں؟! اسی کو بلاکس پر لاگو کیا جا سکتا ہے، لہذا ہمارے پاس ایک I-فراگمنٹ، ایک B-block، P-macroblock وغیرہ ہو سکتا ہے۔

ان لوگوں کے لیے جو مشق کرنا چاہتے ہیں، دیکھیں کہ تصویر کو کس طرح حصوں اور ذیلی حصوں میں تقسیم کیا گیا ہے۔ ایسا کرنے کے لئے، آپ پچھلے مضمون میں پہلے سے ہی ذکر کردہ ایک استعمال کرسکتے ہیں. انٹیل ویڈیو پرو تجزیہ کار (جس کی ادائیگی کی جاتی ہے، لیکن ایک مفت آزمائشی ورژن کے ساتھ جو پہلے 10 فریموں تک محدود ہے)۔ حصوں کا یہاں تجزیہ کیا گیا ہے۔ VP9:

ویڈیو کوڈیک کیسے کام کرتا ہے؟ حصہ 2۔ کیا، کیوں، کیسے

دوسرا مرحلہ - پیشن گوئی

ایک بار جب ہمارے پاس سیکشن ہو جائیں تو ہم ان کے لیے نجومی پیشین گوئیاں کر سکتے ہیں۔ کے لیے انٹر کی پیشن گوئی منتقل کرنا ضروری ہے حرکت ویکٹر اور باقی، اور INTRA کی پیشن گوئی کے لیے اسے منتقل کیا جاتا ہے۔ پیشن گوئی کی سمت اور باقی.

تیسرا مرحلہ - تبدیلی

ایک بار جب ہمارے پاس بقایا بلاک (پیش گوئی شدہ سیکشن → حقیقی سیکشن) ہو جائے، تو اسے اس طرح تبدیل کرنا ممکن ہے کہ ہم جان لیں کہ مجموعی معیار کو برقرار رکھتے ہوئے کن پکسلز کو ضائع کیا جا سکتا ہے۔ کچھ تبدیلیاں ہیں جو درست رویہ فراہم کرتی ہیں۔

اگرچہ دوسرے طریقے ہیں، آئیے ان کو مزید تفصیل سے دیکھتے ہیں۔ مجرد کوزائن ٹرانسفارم (ڈیسیٹی - سے مجرد کوزائن ٹرانسفارم)۔ DCT کے اہم کام:

  • پکسلز کے بلاکس کو فریکوئنسی گتانک کے برابر سائز کے بلاکس میں تبدیل کرتا ہے۔
  • مقامی فالتو پن کو ختم کرنے میں مدد کرنے کے لیے طاقت کو کم کرتا ہے۔
  • ریورسبلٹی فراہم کرتا ہے۔

فروری 2، 2017 Sintra R.J. (Cintra, RJ) اور Bayer F.M. (Bayer FM) نے تصویری کمپریشن کے لیے DCT جیسی تبدیلی کے بارے میں ایک مضمون شائع کیا جس میں صرف 14 اضافے کی ضرورت ہے۔

پریشان نہ ہوں اگر آپ ہر نکتے کے فوائد کو نہیں سمجھتے ہیں۔ اب آئیے ان کی حقیقی قدر دیکھنے کے لیے مخصوص مثالیں استعمال کرتے ہیں۔

آئیے پکسلز کا یہ 8x8 بلاک لیں:

ویڈیو کوڈیک کیسے کام کرتا ہے؟ حصہ 2۔ کیا، کیوں، کیسے

اس بلاک کو درج ذیل 8 بائی 8 پکسل امیج میں پیش کیا گیا ہے۔

ویڈیو کوڈیک کیسے کام کرتا ہے؟ حصہ 2۔ کیا، کیوں، کیسے

پکسلز کے اس بلاک پر ڈی سی ٹی لگائیں اور گتانکوں کا 8x8 بلاک حاصل کریں:

ویڈیو کوڈیک کیسے کام کرتا ہے؟ حصہ 2۔ کیا، کیوں، کیسے

اور اگر ہم گتانک کے اس بلاک کو پیش کرتے ہیں، تو ہمیں درج ذیل تصویر ملے گی:

ویڈیو کوڈیک کیسے کام کرتا ہے؟ حصہ 2۔ کیا، کیوں، کیسے

جیسا کہ آپ دیکھ سکتے ہیں، یہ اصل تصویر کی طرح نہیں لگتا۔ آپ دیکھ سکتے ہیں کہ پہلا گتانک باقی سب سے بہت مختلف ہے۔ یہ پہلا گتانک DC عدد کے طور پر جانا جاتا ہے، جو ان پٹ صف میں موجود تمام نمونوں کی نمائندگی کرتا ہے، کچھ اوسط کی طرح۔

گتانکوں کے اس بلاک میں ایک دلچسپ خاصیت ہے: یہ اعلی تعدد والے اجزاء کو کم تعدد والے اجزاء سے الگ کرتا ہے۔

ویڈیو کوڈیک کیسے کام کرتا ہے؟ حصہ 2۔ کیا، کیوں، کیسے

ایک تصویر میں، زیادہ تر طاقت کم فریکوئنسیوں پر مرکوز ہوتی ہے، لہذا اگر آپ تصویر کو اس کے فریکوئنسی اجزاء میں تبدیل کرتے ہیں اور زیادہ فریکوئنسی کوفیشنٹس کو ضائع کرتے ہیں، تو آپ تصویر کے معیار کی بہت زیادہ قربانی کے بغیر تصویر کو بیان کرنے کے لیے درکار ڈیٹا کی مقدار کو کم کر سکتے ہیں۔

فریکوئنسی سے مراد یہ ہے کہ سگنل کتنی جلدی تبدیل ہوتا ہے۔

آئیے ڈی سی ٹی کا استعمال کرتے ہوئے اصل تصویر کو اس کی فریکوئنسی (گتانکوں کے بلاک) میں تبدیل کرکے اور پھر کم سے کم اہم گتانک کے کچھ حصے کو ضائع کرکے ٹیسٹ کیس میں حاصل کردہ علم کو لاگو کرنے کی کوشش کریں۔

پہلے ہم اسے فریکوئنسی ڈومین میں تبدیل کرتے ہیں۔

ویڈیو کوڈیک کیسے کام کرتا ہے؟ حصہ 2۔ کیا، کیوں، کیسے

اگلا، ہم گتانکوں کا حصہ (67%)، بنیادی طور پر نیچے کا دائیں حصہ کو ضائع کر دیتے ہیں۔

ویڈیو کوڈیک کیسے کام کرتا ہے؟ حصہ 2۔ کیا، کیوں، کیسے

آخر میں، ہم گتانکوں کے اس ضائع شدہ بلاک سے تصویر کو دوبارہ تشکیل دیتے ہیں (یاد رکھیں، یہ الٹا ہونا چاہیے) اور اس کا اصل سے موازنہ کریں۔

ویڈیو کوڈیک کیسے کام کرتا ہے؟ حصہ 2۔ کیا، کیوں، کیسے

ہم دیکھتے ہیں کہ یہ اصل تصویر سے مشابہت رکھتا ہے، لیکن اصل سے بہت سے اختلافات ہیں۔ ہم نے 67,1875% پھینک دیا اور پھر بھی اصل سے مشابہت حاصل کی۔ اس سے بھی بہتر معیار کی تصویر حاصل کرنے کے لیے گتانکوں کو زیادہ سوچ سمجھ کر ضائع کرنا ممکن تھا، لیکن یہ اگلا موضوع ہے۔

ہر عدد تمام پکسلز کا استعمال کرتے ہوئے تیار کیا جاتا ہے۔

اہم: ہر عدد کو براہ راست ایک پکسل پر نقشہ نہیں بنایا جاتا ہے، بلکہ تمام پکسلز کا وزنی مجموعہ ہے۔ یہ حیرت انگیز گراف دکھاتا ہے کہ کس طرح ہر اشاریہ کے لیے منفرد وزن کا استعمال کرتے ہوئے پہلی اور دوسری عددی گنتی کی جاتی ہے۔

ویڈیو کوڈیک کیسے کام کرتا ہے؟ حصہ 2۔ کیا، کیوں، کیسے

آپ ڈی سی ٹی کی بنیاد پر ایک سادہ تصویر کی تشکیل کو دیکھ کر بھی اسے دیکھنے کی کوشش کر سکتے ہیں۔ مثال کے طور پر، یہاں ہر عددی وزن کا استعمال کرتے ہوئے تیار کردہ علامت A ہے:

ویڈیو کوڈیک کیسے کام کرتا ہے؟ حصہ 2۔ کیا، کیوں، کیسے

چوتھا مرحلہ - کوانٹائزیشن

پچھلے مرحلے پر کچھ کوفیشینٹس نکالنے کے بعد، آخری مرحلے (تبدیلی) پر ہم کوانٹائزیشن کی ایک خاص شکل انجام دیتے ہیں۔ اس مرحلے پر معلومات کا کھو جانا قابل قبول ہے۔ یا، زیادہ سادہ طور پر، ہم کمپریشن حاصل کرنے کے لیے گتانکوں کو مقدار دیں گے۔

آپ گتانکوں کے بلاک کو کس طرح کوانٹائز کر سکتے ہیں؟ سب سے آسان طریقوں میں سے ایک یکساں مقدار کا تعین ہے، جب ہم ایک بلاک لیتے ہیں، تو اسے ایک قدر (10 سے) سے تقسیم کریں اور نتیجہ کو گول کریں۔

ویڈیو کوڈیک کیسے کام کرتا ہے؟ حصہ 2۔ کیا، کیوں، کیسے

کیا ہم گتانک کے اس بلاک کو ریورس کرسکتے ہیں؟ ہاں، ہم اسی قدر سے ضرب لگا سکتے ہیں جس سے ہم نے تقسیم کیا تھا۔

ویڈیو کوڈیک کیسے کام کرتا ہے؟ حصہ 2۔ کیا، کیوں، کیسے

یہ نقطہ نظر بہترین نہیں ہے کیونکہ یہ ہر ایک عدد کی اہمیت کو مدنظر نہیں رکھتا ہے۔ کوئی ایک قیمت کے بجائے کوانٹائزرز کا میٹرکس استعمال کر سکتا ہے، اور یہ میٹرکس نیچے دائیں کی اکثریت اور اوپری بائیں کی اقلیت کو کوانٹائز کر کے DCT پراپرٹی کا استحصال کر سکتا ہے۔

مرحلہ 5 - اینٹروپی کوڈنگ

ایک بار جب ہم اعداد و شمار (تصویری بلاکس، ٹکڑے، فریم) کو کوانٹائز کر لیتے ہیں، تو پھر بھی ہم اسے بغیر کسی نقصان کے سکیڑ سکتے ہیں۔ ڈیٹا کو کمپریس کرنے کے بہت سے الگورتھمک طریقے ہیں۔ ہم ان میں سے کچھ پر ایک سرسری نظر ڈالنے جا رہے ہیں، گہری تفہیم کے لیے آپ انڈرسٹینڈنگ کمپریشن: ڈیٹا کمپریشن فار ماڈرن ڈیولپرز ("کمپریشن کو سمجھنا: جدید ڈویلپرز کے لیے ڈیٹا کمپریشن").

VLC کا استعمال کرتے ہوئے ویڈیو انکوڈنگ

ہم کہتے ہیں کہ ہمارے پاس کرداروں کا سلسلہ ہے: a, e, r и t. اس جدول میں ہر ایک کردار کے ظاہر ہونے کا امکان (0 سے 1 تک) پیش کیا گیا ہے۔

a e r t
احتمال 0,3 0,3 0,2 0,2

ہم سب سے زیادہ امکان والے کو منفرد بائنری کوڈز (ترجیحی طور پر چھوٹے) اور کم امکان والے کو بڑے کوڈ تفویض کر سکتے ہیں۔

a e r t
احتمال 0,3 0,3 0,2 0,2
بائنری کوڈ 0 10 110 1110

ہم سٹریم کو کمپریس کرتے ہیں، یہ فرض کرتے ہوئے کہ ہم ہر کردار کے لیے 8 بٹس خرچ کریں گے۔ کمپریشن کے بغیر، فی کردار 24 بٹس کی ضرورت ہوگی۔ اگر آپ ہر کردار کو اس کے کوڈ سے بدل دیتے ہیں، تو آپ کو بچت ہوگی!

پہلا قدم کردار کو انکوڈ کرنا ہے۔ e، جو 10 کے برابر ہے، اور دوسرا حرف ہے۔ a، جو شامل کیا گیا ہے (ریاضی کے طریقے سے نہیں): [10][0]، اور آخر میں تیسرا حرف t، جو ہمارے حتمی کمپریسڈ بٹ اسٹریم کو [10][0][1110] یا کے برابر بناتا ہے۔ 1001110، جس کے لیے صرف 7 بٹس (اصل سے 3,4 گنا کم جگہ) درکار ہے۔

براہ کرم نوٹ کریں کہ ہر کوڈ کو سابقہ ​​کے ساتھ ایک منفرد کوڈ ہونا چاہیے۔ ہف مین الگورتھم ان نمبروں کو تلاش کرنے میں آپ کی مدد کرے گا۔ اگرچہ یہ طریقہ اپنی خامیوں کے بغیر نہیں ہے، وہاں ویڈیو کوڈیکس موجود ہیں جو اب بھی کمپریشن کے لیے الگورتھمک طریقہ پیش کرتے ہیں۔

انکوڈر اور ڈیکوڈر دونوں کو ان کے بائنری کوڈز کے ساتھ علامت ٹیبل تک رسائی حاصل ہونی چاہیے۔ اس لیے ان پٹ کے طور پر ٹیبل بھیجنا بھی ضروری ہے۔

ریاضی کی کوڈنگ

ہم کہتے ہیں کہ ہمارے پاس کرداروں کا سلسلہ ہے: a, e, r, s и t، اور ان کا امکان اس جدول میں پیش کیا گیا ہے۔

a e r s t
احتمال 0,3 0,3 0,15 0,05 0,2

اس جدول کا استعمال کرتے ہوئے، ہم تمام ممکنہ حروف پر مشتمل رینجز بنائیں گے، جو سب سے بڑی تعداد کے حساب سے ترتیب دیں گے۔

ویڈیو کوڈیک کیسے کام کرتا ہے؟ حصہ 2۔ کیا، کیوں، کیسے

اب آئیے تین حروف کے سلسلے کو انکوڈ کریں: کھانے.

پہلے پہلا کردار منتخب کریں۔ e، جو 0,3 سے 0,6 تک سب رینج میں ہے (شامل نہیں)۔ ہم اس ذیلی رینج کو لیتے ہیں اور اسے دوبارہ اسی تناسب میں تقسیم کرتے ہیں جیسا کہ پہلے تھا، لیکن اس نئی رینج کے لیے۔

ویڈیو کوڈیک کیسے کام کرتا ہے؟ حصہ 2۔ کیا، کیوں، کیسے

آئیے اپنے سلسلے کو کوڈنگ جاری رکھیں کھانے. اب دوسرے کردار کو لیں۔ aجو کہ 0,3 سے 0,39 تک نئے سب رینج میں ہے، اور پھر ہمارا آخری کریکٹر لیں۔ t اور اسی عمل کو دوبارہ دہرانے سے، ہمیں حتمی ذیلی رینج 0,354 سے 0,372 تک ملتی ہے۔

ویڈیو کوڈیک کیسے کام کرتا ہے؟ حصہ 2۔ کیا، کیوں، کیسے

ہمیں صرف آخری ذیلی رینج میں 0,354 سے 0,372 تک نمبر منتخب کرنے کی ضرورت ہے۔ آئیے 0,36 کا انتخاب کریں (لیکن آپ اس ذیلی رینج میں کوئی اور نمبر بھی منتخب کر سکتے ہیں)۔ صرف اس نمبر کے ساتھ ہی ہم اپنے اصل سلسلے کو بحال کر سکیں گے۔ یہ ایسا ہی ہے جیسے ہم اپنے سلسلے کو انکوڈ کرنے کے لیے حدود کے اندر ایک لکیر کھینچ رہے ہوں۔

ویڈیو کوڈیک کیسے کام کرتا ہے؟ حصہ 2۔ کیا، کیوں، کیسے

ریورس آپریشن (یعنی، ضابطہ کشائی) اتنا ہی آسان ہے: ہمارے نمبر 0,36 اور ہماری ابتدائی رینج کے ساتھ، ہم وہی عمل چلا سکتے ہیں۔ لیکن اب، اس نمبر کا استعمال کرتے ہوئے، ہم اس نمبر کا استعمال کرتے ہوئے انکوڈ شدہ ندی کی شناخت کرتے ہیں۔

پہلی رینج کے ساتھ، ہم دیکھتے ہیں کہ ہمارا نمبر سلائس سے مطابقت رکھتا ہے، لہذا یہ ہمارا پہلا کردار ہے۔ اب ہم پہلے کی طرح اسی عمل پر عمل کرتے ہوئے اس ذیلی رینج کو دوبارہ تقسیم کرتے ہیں۔ یہاں آپ دیکھ سکتے ہیں کہ 0,36 علامت سے مطابقت رکھتا ہے۔ a، اور اس عمل کو دہرانے کے بعد ہم آخری کردار پر پہنچے t (ہماری اصل انکوڈ شدہ ندی کی تشکیل کھانے).

انکوڈر اور ڈیکوڈر دونوں میں علامت کے امکانات کا ایک ٹیبل ہونا ضروری ہے، لہذا اسے ان پٹ ڈیٹا میں بھی بھیجنا ضروری ہے۔

کافی خوبصورت، ہے نا؟ جو بھی اس حل کے ساتھ آیا وہ بہت ہوشیار تھا۔ کچھ ویڈیو کوڈیکس اس تکنیک کا استعمال کرتے ہیں (یا کم از کم اسے ایک آپشن کے طور پر پیش کرتے ہیں)۔

خیال یہ ہے کہ بغیر کسی کوانٹائزڈ بٹ اسٹریم کو کمپریس کیا جائے۔ یقینی طور پر اس مضمون میں بہت ساری تفصیلات، وجوہات، ٹریڈ آف وغیرہ غائب ہیں۔ لیکن اگر آپ ایک ڈویلپر ہیں، تو آپ کو مزید جاننا چاہیے۔ نئے کوڈیکس مختلف اینٹروپی انکوڈنگ الگورتھم استعمال کرنے کی کوشش کرتے ہیں جیسے ANS.

مرحلہ 6 - بٹ اسٹریم فارمیٹ

یہ سب کرنے کے بعد، جو کچھ رہ جاتا ہے وہ یہ ہے کہ کئے گئے اقدامات کے تناظر میں کمپریسڈ فریموں کو کھولنا ہے۔ ڈیکوڈر کو انکوڈر کے ذریعے کیے گئے فیصلوں کے بارے میں واضح طور پر مطلع کیا جانا چاہیے۔ ڈیکوڈر کو تمام ضروری معلومات فراہم کی جانی چاہئیں: بٹ گہرائی، رنگ کی جگہ، ریزولوشن، پیشین گوئی کی معلومات (موشن ویکٹر، ڈائریکشنل انٹر پریڈیکشن)، پروفائل، لیول، فریم ریٹ، فریم کی قسم، فریم نمبر اور بہت کچھ۔

ہم بٹ اسٹریم پر ایک سرسری نظر ڈالیں گے۔ H.264. ہمارا پہلا قدم ایک کم سے کم H.264 بٹ اسٹریم بنانا ہے (FFmpeg بذریعہ ڈیفالٹ تمام انکوڈنگ آپشنز کو شامل کرتا ہے جیسے SEI NAL - ہم تھوڑا آگے تلاش کریں گے کہ یہ کیا ہے)۔ ہم یہ اپنے ذخیرے اور FFmpeg کا استعمال کرتے ہوئے کر سکتے ہیں۔

./s/ffmpeg -i /files/i/minimal.png -pix_fmt yuv420p /files/v/minimal_yuv420.h264

یہ کمانڈ ایک خام بٹ اسٹریم تیار کرے گی۔ H.264 ایک فریم کے ساتھ، 64×64 ریزولوشن، رنگ کی جگہ کے ساتھ YUV420. اس صورت میں، مندرجہ ذیل تصویر ایک فریم کے طور پر استعمال کیا جاتا ہے.

ویڈیو کوڈیک کیسے کام کرتا ہے؟ حصہ 2۔ کیا، کیوں، کیسے

H.264 بٹ اسٹریم

سٹینڈرڈ AVC (H.264) اس بات کا تعین کرتا ہے کہ معلومات میکرو فریم (نیٹ ورک کے معنی میں) میں بھیجی جائیں گی، جسے کہا جاتا ہے۔ این اے ایل (یہ ایک نیٹ ورک تجریدی سطح ہے)۔ NAL کا بنیادی ہدف ایک "ویب دوستانہ" ویڈیو پیشکش فراہم کرنا ہے۔ یہ معیار TVs (سٹریم بیسڈ)، انٹرنیٹ (پیکٹ بیسڈ) پر کام کرنا چاہیے۔

ویڈیو کوڈیک کیسے کام کرتا ہے؟ حصہ 2۔ کیا، کیوں، کیسے

NAL عناصر کی حدود کو متعین کرنے کے لیے ایک سنکرونائزیشن مارکر موجود ہے۔ ہر مطابقت پذیری ٹوکن میں ایک قدر ہوتی ہے۔ 0x00 0x00 0x01, سوائے پہلے والے کے، جو برابر ہے۔ 0x00 0x00 0x00 0x01. اگر ہم لانچ کرتے ہیں۔ ہیکس ڈمپ تیار کردہ H.264 بٹ اسٹریم کے لیے، ہم فائل کے شروع میں کم از کم تین NAL پیٹرن کی شناخت کرتے ہیں۔

ویڈیو کوڈیک کیسے کام کرتا ہے؟ حصہ 2۔ کیا، کیوں، کیسے

جیسا کہ کہا گیا ہے، ڈیکوڈر کو نہ صرف تصویر کا ڈیٹا، بلکہ ویڈیو، فریم، رنگ، استعمال شدہ پیرامیٹرز اور بہت کچھ کی تفصیلات بھی معلوم ہونی چاہئیں۔ ہر NAL کا پہلا بائٹ اس کی قسم اور قسم کی وضاحت کرتا ہے۔

NAL قسم کا شناخت کنندہ تفصیل
0 نامعلوم قسم
1 IDR کے بغیر انکوڈ شدہ تصویر کا ٹکڑا
2 کوڈ شدہ سلائس ڈیٹا سیکشن A
3 کوڈ شدہ سلائس ڈیٹا سیکشن B
4 کوڈ شدہ سلائس ڈیٹا سیکشن C
5 IDR تصویر کا انکوڈ شدہ IDR ٹکڑا
6 SEI توسیع کے بارے میں مزید معلومات
7 SPS ترتیب پیرامیٹر سیٹ
8 PPS تصویری پیرامیٹرز کا سیٹ
9 رسائی الگ کرنے والا
10 تسلسل کا اختتام
11 دھاگے کا اختتام
... ...

عام طور پر بٹ اسٹریم کا پہلا NAL ہوتا ہے۔ PLC. اس قسم کا NAL عام انکوڈنگ متغیرات جیسے پروفائل، لیول، ریزولوشن وغیرہ کے بارے میں مطلع کرنے کا ذمہ دار ہے۔

اگر ہم پہلے سنک مارکر کو چھوڑ دیتے ہیں، تو ہم یہ معلوم کرنے کے لیے پہلے بائٹ کو ڈی کوڈ کر سکتے ہیں کہ کون سی NAL قسم پہلے ہے۔

مثال کے طور پر، سنک ٹوکن کے بعد پہلا بائٹ ہے۔ 01100111جہاں پہلا بٹ (0) فیلڈ ایف میں ہے۔orbidden_zero_bit. اگلے 2 بٹس (11) ہمیں فیلڈ بتاتا ہے۔ nal_ref_idc، جو اس بات کی نشاندہی کرتا ہے کہ آیا یہ NAL ایک ریفرنس فیلڈ ہے یا نہیں۔ اور باقی 5 بٹس (00111) ہمیں فیلڈ بتاتا ہے۔ nal_unit_type, اس صورت میں یہ SPS بلاک ہے (7) NAL

دوسرا بائٹ (بائنری=01100100, ہیکس=0x64, دسمبر=100) SPS NAL میں فیلڈ ہے۔ profile_idc، جو انکوڈر کے استعمال کردہ پروفائل کو دکھاتا ہے۔ اس معاملے میں، ایک محدود ہائی پروفائل استعمال کیا گیا تھا (یعنی، دو طرفہ بی سیگمنٹ سپورٹ کے بغیر ایک ہائی پروفائل)۔

ویڈیو کوڈیک کیسے کام کرتا ہے؟ حصہ 2۔ کیا، کیوں، کیسے

اگر آپ بٹ اسٹریم کی تفصیلات دیکھیں H.264 SPS NAL کے لیے، ہمیں پیرامیٹر کے نام، زمرہ اور تفصیل کے لیے بہت سی قدریں ملیں گی۔ مثال کے طور پر، آئیے کھیتوں کو دیکھیں pic_width_in_mbs_minus_1 и pic_height_in_map_units_minus_1.

پیرامیٹر کا نام زمرہ تفصیل
pic_width_in_mbs_minus_1 0 ue(v)
pic_height_in_map_units_minus_1 0 ue(v)

اگر ہم ان شعبوں کی قدروں کے ساتھ کچھ ریاضیاتی عمل انجام دیتے ہیں، تو ہم ریزولوشن حاصل کریں گے۔ ایک استعمال کرتے ہوئے 1920 x 1080 کی نمائندگی کرسکتا ہے۔ pic_width_in_mbs_minus_1 119 کی قدر کے ساتھ (119 + 1) * macroblock_size = 120 * 16 = 1920)۔ ایک بار پھر، جگہ بچانے کے لیے، 1920 کو انکوڈنگ کرنے کے بجائے، ہم نے اسے 119 کے ساتھ کیا۔

اگر ہم اپنی بنائی ہوئی ویڈیو کو بائنری شکل میں چیک کرتے رہیں (مثال کے طور پر: xxd -b -c 11 v/minimal_yuv420.h264)، پھر آپ آخری NAL پر جا سکتے ہیں، جو خود فریم ہے۔

ویڈیو کوڈیک کیسے کام کرتا ہے؟ حصہ 2۔ کیا، کیوں، کیسے

یہاں ہم اس کی پہلی 6 بائٹ ویلیوز دیکھتے ہیں۔ 01100101 10001000 10000100 00000000 00100001 11111111. چونکہ پہلا بائٹ NAL قسم کی نشاندہی کرنے کے لیے جانا جاتا ہے، اس صورت میں (00101) ایک IDR ٹکڑا ہے (5)، اور پھر آپ اسے مزید دریافت کر سکتے ہیں:

ویڈیو کوڈیک کیسے کام کرتا ہے؟ حصہ 2۔ کیا، کیوں، کیسے

تفصیلات کی معلومات کا استعمال کرتے ہوئے، ٹکڑے کی قسم کو ڈی کوڈ کرنا ممکن ہو گا (slice_type) اور فریم نمبر (frame_num) دیگر اہم شعبوں کے درمیان۔

کچھ فیلڈز کی قدریں حاصل کرنے کے لیے (ue(v), me(v), se(v) یا te(v))، ہمیں اس پر مبنی خصوصی ڈیکوڈر کا استعمال کرتے ہوئے ٹکڑے کو ڈی کوڈ کرنے کی ضرورت ہے۔ کفایتی گولمب کوڈ. متغیر اقدار کو انکوڈنگ کرنے کے لیے یہ طریقہ بہت کارآمد ہے، خاص طور پر جب بہت سی ڈیفالٹ ویلیوز ہوں۔

قدریں۔ slice_type и frame_num اس ویڈیو کے 7 (I-fragment) اور 0 (پہلا فریم) ہیں۔

تھوڑا سا سلسلہ ایک پروٹوکول کے طور پر سوچا جا سکتا ہے. اگر آپ بٹ اسٹریم کے بارے میں مزید جاننا چاہتے ہیں، تو آپ کو تفصیلات سے رجوع کرنا چاہیے۔ ITU H.264. یہاں ایک میکرو ڈایاگرام ہے جس میں دکھایا گیا ہے کہ تصویر کا ڈیٹا کہاں ہے (YUV کمپریسڈ شکل میں)۔

ویڈیو کوڈیک کیسے کام کرتا ہے؟ حصہ 2۔ کیا، کیوں، کیسے

دیگر بٹ اسٹریمز کی جانچ کی جاسکتی ہے، جیسے VP9, H.265 (HEVC) یا یہاں تک کہ ہمارا نیا بہترین بٹ اسٹریم AV1. کیا وہ سب ایک جیسے ہیں؟ نہیں، لیکن ایک بار جب آپ کم از کم ایک کو سمجھ لیں، تو باقی کو سمجھنا بہت آسان ہو جاتا ہے۔

مشق کرنا چاہتے ہیں؟ H.264 بٹ اسٹریم کو دریافت کریں۔

آپ ایک فریم ویڈیو بنا سکتے ہیں اور بٹ اسٹریم کی جانچ کرنے کے لیے MediaInfo استعمال کر سکتے ہیں۔ H.264. درحقیقت، کوئی بھی چیز آپ کو اس سورس کوڈ کو دیکھنے سے نہیں روکتی جو بٹ اسٹریم کا تجزیہ کرتا ہے۔ H.264 (AVC).

ویڈیو کوڈیک کیسے کام کرتا ہے؟ حصہ 2۔ کیا، کیوں، کیسے

پریکٹس کے لیے، آپ Intel Video Pro Analyzer استعمال کر سکتے ہیں (کیا میں نے پہلے ہی کہا تھا کہ پروگرام کی ادائیگی کی گئی ہے، لیکن 10 فریموں کی حد کے ساتھ مفت ٹرائل ورژن ہے؟)

ویڈیو کوڈیک کیسے کام کرتا ہے؟ حصہ 2۔ کیا، کیوں، کیسے

کا جائزہ لیں

نوٹ کریں کہ بہت سے جدید کوڈیکس وہی ماڈل استعمال کرتے ہیں جس کا ہم نے ابھی مطالعہ کیا ہے۔ یہاں، ویڈیو کوڈیک کے بلاک ڈایاگرام پر ایک نظر ڈالتے ہیں۔ Thor. اس میں وہ تمام مراحل شامل ہیں جن سے ہم گزرے ہیں۔ اس پوسٹ کا پورا مقصد کم از کم آپ کو اس شعبے میں ہونے والی اختراعات اور دستاویزات کے بارے میں بہتر سمجھنا ہے۔

ویڈیو کوڈیک کیسے کام کرتا ہے؟ حصہ 2۔ کیا، کیوں، کیسے

پہلے، یہ حساب لگایا گیا تھا کہ 139p کوالٹی اور 720 ​​fps پر ایک گھنٹے تک چلنے والی ویڈیو فائل کو ذخیرہ کرنے کے لیے 30 GB ڈسک کی جگہ درکار ہوگی۔ اگر آپ اس مضمون میں زیر بحث طریقے استعمال کرتے ہیں (انٹر فریم اور اندرونی پیشین گوئیاں، تبدیلی، کوانٹائزیشن، اینٹروپی کوڈنگ، وغیرہ)، تو آپ حاصل کر سکتے ہیں (اس حقیقت کی بنیاد پر کہ ہم 0,031 بٹس فی پکسل خرچ کرتے ہیں)، کافی ویڈیو تسلی بخش معیار، صرف 367,82 MB پر قابض ہے، نہ کہ 139 GB میموری۔

H.265 H.264 سے بہتر کمپریشن تناسب کیسے حاصل کرتا ہے؟

اب جب کہ ہم اس بارے میں مزید جانتے ہیں کہ کوڈیکس کیسے کام کرتے ہیں، یہ سمجھنا آسان ہے کہ نئے کوڈیکس کس طرح کم بٹس کے ساتھ اعلیٰ قراردادیں فراہم کر سکتے ہیں۔

اگر ہم موازنہ کریں۔ AVC и HEVC، یہ یاد رکھنے کے قابل ہے کہ یہ تقریبا ہمیشہ زیادہ CPU بوجھ اور کمپریشن تناسب کے درمیان انتخاب ہوتا ہے۔

HEVC سے زیادہ سیکشن (اور سب سیکشن) کے اختیارات ہیں۔ AVC، مزید داخلی پیشین گوئی کی سمتیں، بہتر اینٹروپی کوڈنگ، اور بہت کچھ۔ یہ تمام اصلاحات کی گئی ہیں۔ H.265 سے 50٪ زیادہ کمپریس کرنے کے قابل H.264.

ویڈیو کوڈیک کیسے کام کرتا ہے؟ حصہ 2۔ کیا، کیوں، کیسے

پہلا حصہ: ویڈیو اور تصاویر کے ساتھ کام کرنے کی بنیادی باتیں

ماخذ: www.habr.com

نیا تبصرہ شامل کریں