অভিধান

ভিডিওতে B‑Frame কী?

একটি B-frame হলো এমন একটি ভিডিও ফ্রেম, যা আগের এবং পরের উভয় ফ্রেমকেই ব্যবহার করতে পারে। জানুন B-frame কীভাবে কাজ করে এবং আপনার ফাইলে Has B Frames মানের অর্থ কী।

b-frames

B-ফ্রেম এমন একটি ভিডিও ফ্রেম যা তার ছবি তৈরি করতে আগের এবং পরের দুই ধরনের ফ্রেমই ব্যবহার করতে পারে। এখানে B মানে bidirectional। B‑ফ্রেম অন্য ফ্রেম ধরনের তুলনায় বেশি কমপ্রেশন দেয়, যা ভিডিওকে ছোট রাখতে সাহায্য করে।

একটি ভিডিও ফাইলের মেটাডাটায় আপনি Has B Frames নামে একটি ফিল্ড দেখতে পারেন, যেটি has_b_frames হিসেবেও লেখা হয়। নাম দেখে এটিকে হ্যাঁ বা না ধরনের মান মনে হলেও, আসলে মানটি একটি সংখ্যা। এই সংখ্যা বলে ডিকোডারকে সঠিক ক্রমে ভিডিও দেখাতে একসাথে মেমরিতে কতগুলি ফ্রেম ধরে রাখতে হবে।

B-frame কীভাবে I-frame এবং P-frame থেকে আলাদা

ভিডিও কমপ্রেশন সাধারণত বিভিন্ন ফ্রেমের তুলনা করে এবং তাদের মধ্যে পার্থক্য রেকর্ড করে কাজ করে। MPEG‑2 ভিডিও এই ৩ ধরনের ফ্রেম নির্ধারণ করে:

  • I‑ফ্রেম: অন্য ফ্রেমের রেফারেন্স ছাড়াই কোডেড, তাই ডিকোডিং এখান থেকেই শুরু করা যায়
  • P‑ফ্রেম: আগের I‑ফ্রেম বা P‑ফ্রেম ব্যবহার করতে পারে
  • B‑ফ্রেম: আগের এবং পরের I‑ফ্রেম বা P‑ফ্রেম দুটিই ব্যবহার করতে পারে

একটি B‑ফ্রেম সময়ের হিসেবে পরে আসা কোনো ফ্রেমের ওপর নির্ভর করতে পারে, তাই সেই পরের ফ্রেমটিকে আগে সংরক্ষণ করতে হয়। তাই সংরক্ষিত ফ্রেমের ক্রম আপনার স্ক্রিনে দেখা ক্রমের সঙ্গে মেলে না। একটি সাধারণ MPEG‑2 সিকোয়েন্স এ রকম দেখায়:

  • Display order: B1 B2 I3 B4 B5 P6 B7 B8 P9 B10 B11 P12
  • Stored order: I3 B1 B2 P6 B4 B5 P9 B7 B8 P12 B10 B11

মানগুলি দেখতে কেমন

Has B Frames একটি পূর্ণসংখ্যা। FFmpeg এই মানকে ডিকোডারে frame reordering buffer‑এর আকার হিসেবে বর্ণনা করে। MPEG‑2 ভিডিওর ক্ষেত্রে, FFmpeg ২টি মান নির্ধারণ করে:

  • 0: শুধুমাত্র I‑ফ্রেম ও P‑ফ্রেমসহ কম বিলম্বের ভিডিও
  • 1: I‑ফ্রেম, P‑ফ্রেম এবং B‑ফ্রেমসহ ভিডিও

H.264 এবং HEVC encoder কিছু কিছু B‑ফ্রেমকেও অন্য ফ্রেমের জন্য রেফারেন্স হিসেবে ধরে রাখতে পারে। H.264‑এর জন্য FFmpeg‑এর test file‑গুলো দেখায় এই মান কীভাবে বদলায়। ফাইলের নামেই encoder‑এর সেটিংগুলো দেওয়া থাকে:

  • সর্বোচ্চ পরপর ৩টি B‑ফ্রেম, কোনোটি রেফারেন্স হিসেবে রাখা হয় না: 1
  • সর্বোচ্চ পরপর ৩টি B‑ফ্রেম, কিছু রেফারেন্স হিসেবে রাখা হয়: 2
  • সর্বোচ্চ পরপর ৪টি B‑ফ্রেম, কিছু রেফারেন্স হিসেবে রাখা হয়: 2

তাই এই মানটি B‑ফ্রেমের সংখ্যা নয়। ffprobe প্রোগ্রাম প্রতিটি ফ্রেমের ধরনকে pict_type মান হিসেবে দেখায়: I, P, বা B। NB Frames ফিল্ডটি মোট ফ্রেমের সংখ্যা দেয়, কিন্তু তাদের ধরন নয়।

মানের উৎস কোথায়

এই ফিল্ডের নাম এসেছে FFmpeg থেকে, যার ffprobe প্রোগ্রাম ভিডিও স্ট্রিমের জন্য has_b_frames প্রিন্ট করে। একটি H.264 স্ট্রিম তার নিজের হেডারেই এই সংখ্যাটি দিতে পারে। হেডারে সংখ্যা না থাকলে, FFmpeg ফ্রেম ও তাদের সময় থেকে এটি বের করে।

ভিডিওতে B‑ফ্রেম ব্যবহার হবে কি না তা encoder‑এর সেটিং ঠিক করে। FFmpeg এবং Microsoft H.264 encoder‑এ 0 মান সেট করলে B‑ফ্রেম বন্ধ হয়ে যায়।

কোন ফাইলগুলো এটিকে বহন করে

এই ফিল্ড কেবল ভিডিও স্ট্রিমের জন্য বিদ্যমান। আপনি MP4, MOV, MKV, WebM এবং AVI ফাইলের ভিডিওতে এই ফিল্ড দেখতে পাবেন। পুনর্গঠিত (reordered) ফ্রেমসহ একটি MOV ফাইল প্রতিটি ফ্রেমের ডিকোডিং ও প্রদর্শনের সময়ের পার্থক্যও একটি টেবিলে সংরক্ষণ করে।

কোনো কোডেক B‑ফ্রেম ব্যবহার করতে পারবে কি না, তা কোডেক নিজেই ঠিক করে। MPEG‑2 ভিডিও এবং H.264 Main প্রোফাইল B‑ফ্রেম ব্যবহার করতে পারে, কিন্তু H.264 Baseline প্রোফাইল পারে না। VP8, যা WebM ফাইলে ব্যবহৃত একটি কোডেক, কখনো পরের ফ্রেম থেকে পূর্বাভাস করে না বলে এতে B‑ফ্রেম নেই।

এটি কেন গুরুত্বপূর্ণ

B‑ফ্রেম ভিডিওকে ছোট রাখতে সাহায্য করে, কিন্তু এগুলো কিছু বিলম্ব যোগ করে। encoder‑কে সংরক্ষণ করার আগে ফ্রেমগুলোর ক্রম বদলাতে হয়, আর এই বিলম্ব নির্ভর করে পরপর কতটি B‑ফ্রেম আছে তার ওপর।

পুনর্গঠিত ভিডিওতে প্রতিটি ফ্রেমের জন্য ২টি ভিন্ন সময় থাকে: কখন ফ্রেমটি ডিকোড করতে হবে এবং কখন এটি দেখাতে হবে। FFmpeg এই দুটোই স্ট্রিমের time base‑এ timestamp হিসেবে দেয়।

মেটা কী