ڈکشنری

ویڈیو میں B-Frames کیا ہوتے ہیں؟

B-frame ایک ویڈیو فریم ہوتا ہے جو پہلے والے اور بعد میں آنے والے دونوں فریموں کو استعمال کر سکتا ہے۔ جانیں کہ B-frames کیسے کام کرتے ہیں اور آپ کی فائل میں Has B Frames کی ویلیو کا کیا مطلب ہے۔

b-frames

B-frame ایک ویڈیو فریم ہوتا ہے جو اپنی تصویر بنانے کے لیے ایک پہلے والے اور ایک بعد میں آنے والے فریم دونوں کو استعمال کر سکتا ہے۔ یہاں B کا مطلب bidirectional ہے۔ B-frames دوسرے فریم کے اقسام کے مقابلے میں زیادہ compression فراہم کرتے ہیں، جس سے ویڈیو کا سائز چھوٹا رکھنے میں مدد ملتی ہے۔

ویڈیو فائل کے metadata میں آپ کو ایک فیلڈ Has B Frames کے نام سے نظر آ سکتی ہے، جسے has_b_frames بھی لکھا جاتا ہے۔ نام سے ہاں یا نہیں کا جواب ظاہر ہوتا ہے، لیکن قدر درحقیقت ایک عدد ہوتی ہے۔ یہ عدد بتاتا ہے کہ درست ترتیب میں ویڈیو دکھانے کے لیے decoder کو بیک وقت کتنے فریمز میموری میں رکھنے کے قابل ہونا چاہیے۔

B-فریمز، I-فریمز اور P-فریمز سے کیسے مختلف ہوتے ہیں

ویڈیو compression عام طور پر فریمز کا آپس میں موازنہ کر کے اور ان کے درمیان فرق کو ریکارڈ کر کے کام کرتی ہے۔ MPEG-2 ویڈیو یہ 3 فریم کی اقسام متعین کرتی ہے:

  • I-frame: دوسرے فریمز کا حوالہ دیے بغیر code کیا جاتا ہے، اس لیے decoding یہاں سے شروع ہو سکتی ہے
  • P-frame: پچھلے I-frame یا P-frame کو استعمال کر سکتا ہے
  • B-frame: پچھلے اور اگلے I-frame یا P-frame دونوں کو استعمال کر سکتا ہے

ایک B-frame ایسے فریم پر منحصر ہو سکتا ہے جو وقت میں بعد میں آتا ہے، اس لیے اس بعد والے فریم کو پہلے ذخیرہ کرنا ضروری ہوتا ہے۔ اسی وجہ سے محفوظ کرنے کی ترتیب اس ترتیب سے مختلف ہوتی ہے جو آپ اسکرین پر دیکھتے ہیں۔ ایک عام MPEG-2 سلسلہ کچھ یوں ہوتا ہے:

  • Display کی ترتیب: B1 B2 I3 B4 B5 P6 B7 B8 P9 B10 B11 P12
  • ذخیرہ کرنے کی ترتیب: I3 B1 B2 P6 B4 B5 P9 B7 B8 P12 B10 B11

قدریں کیسی نظر آتی ہیں

Has B Frames ایک صحیح عدد (whole number) ہوتا ہے۔ FFmpeg اس قدر کو decoder میں frame reordering buffer کے سائز کے طور پر بیان کرتا ہے۔ MPEG-2 ویڈیو کے لیے FFmpeg 2 قدریں بتاتا ہے:

  • 0: کم delay والی ویڈیو، جس میں صرف I-frames اور P-frames ہوتے ہیں
  • 1: ویڈیو جس میں I-frames، P-frames، اور B-frames شامل ہوں

H.264 اور HEVC encoders بعض B-frames کو دوسرے فریمز کے لیے reference کے طور پر بھی محفوظ رکھ سکتے ہیں۔ H.264 کے لیے FFmpeg کی test فائلیں دکھاتی ہیں کہ اس سے قدر کیسے بدلتی ہے۔ فائل کے نام encoder کی settings ظاہر کرتے ہیں:

  • زیادہ سے زیادہ 3 B-frames مسلسل، کوئی بھی reference کے طور پر محفوظ نہیں: 1
  • زیادہ سے زیادہ 3 B-frames مسلسل، ان میں سے کچھ reference کے طور پر محفوظ: 2
  • زیادہ سے زیادہ 4 B-frames مسلسل، ان میں سے کچھ reference کے طور پر محفوظ: 2

لہٰذا یہ قدر B-frames کی گنتی نہیں ہے۔ ffprobe پروگرام ہر فریم کی قسم کو pict_type قدر کے طور پر دکھاتا ہے: I، P، یا B۔ فیلڈ NB Frames فریمز کی تعداد بتاتا ہے، ان کی اقسام نہیں۔

قدر کہاں سے آتی ہے

یہ فیلڈ نام FFmpeg سے آتا ہے، جس کا ffprobe پروگرام ویڈیو streams کے لیے has_b_frames پرنٹ کرتا ہے۔ ایک H.264 stream اپنی header میں یہ عدد دے سکتی ہے۔ اگر header یہ عدد نہ دے، تو FFmpeg اسے فریمز اور ان کے اوقات سے خود نکالتا ہے۔

Encoder کی settings طے کرتی ہیں کہ ویڈیو B-frames استعمال کرے گی یا نہیں۔ FFmpeg اور Microsoft H.264 encoder دونوں میں 0 کی setting B-frames کو بند کر دیتی ہے۔

کون سی فائلیں اسے رکھتی ہیں

یہ فیلڈ صرف ویڈیو streams کے لیے موجود ہوتا ہے۔ آپ ویڈیو کے لیے یہ فیلڈ MP4، MOV، MKV، WebM اور AVI فائلوں میں دیکھ سکتے ہیں۔ ایک MOV فائل جس میں فریمز کی ترتیب بدلی گئی ہو، ہر فریم کے لیے decoding اور display کے درمیان وقت کی جدول بھی محفوظ کرتی ہے۔

Codec طے کرتا ہے کہ B-frames ممکن ہیں یا نہیں۔ MPEG-2 ویڈیو اور H.264 کا Main پروفائل انہیں استعمال کر سکتے ہیں، لیکن H.264 کا Baseline پروفائل نہیں کر سکتا۔ VP8، جو WebM فائلوں میں استعمال ہونے والا codec ہے، میں B-frames نہیں ہوتے، کیونکہ اس کے فریمز کبھی بعد کے فریمز سے predict نہیں کیے جاتے۔

یہ کیوں اہم ہے

B-frames ویڈیو کو چھوٹا رکھنے میں مدد دیتے ہیں، لیکن یہ delay بڑھاتے ہیں۔ Encoder کو فریمز کو محفوظ کرنے سے پہلے ان کی ترتیب بدلنی پڑتی ہے، اور یہ delay اس بات پر منحصر ہوتا ہے کہ مسلسل کتنے B-frames استعمال کیے گئے ہیں۔

ترتیب بدلے ہوئے ویڈیو میں ہر فریم کے لیے 2 الگ اوقات ہوتے ہیں: فریم کو decode کرنے کا وقت اور اسے دکھانے کا وقت۔ FFmpeg دونوں کو stream کے time base میں timestamps کے طور پر دیتا ہے۔

میٹا کیز