शब्दकोश

वीडियो में 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 भी लिखा जाता है। नाम से तो हाँ या नहीं का जवाब लगता है, लेकिन इसका मान एक संख्या होता है। यह संख्या बताती है कि वीडियो को सही क्रम में दिखाने के लिए डिकोडर को एक समय में कितने फ्रेम memory में रखने में सक्षम होना चाहिए।

B-frames I-frames और P-frames से कैसे अलग होते हैं

वीडियो compression आम तौर पर फ्रेमों की तुलना करके और उनके बीच के अंतर को रिकॉर्ड करके काम करता है। MPEG-2 वीडियो इन 3 प्रकार के फ्रेम परिभाषित करता है:

  • I-frame: अन्य फ्रेमों को संदर्भ किए बिना coded, इसलिए decoding यहीं से शुरू हो सकती है
  • P-frame: पिछले I-frame या P-frame का उपयोग कर सकता है
  • B-frame: पिछले और अगले I-frame या P-frame दोनों का उपयोग कर सकता है

एक B-frame ऐसे फ्रेम पर निर्भर हो सकता है जो समय में बाद में आता है, इसलिए उस बाद वाले फ्रेम को पहले स्टोर करना पड़ता है। इस कारण stored order, स्क्रीन पर दिखने वाले क्रम से अलग होता है। एक सामान्य MPEG-2 sequence इस तरह दिखता है:

  • 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 इस मान को decoder में frame reordering buffer के आकार के रूप में बताता है। MPEG-2 वीडियो के लिए, FFmpeg दो मान बताता है:

  • 0: low 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 को बंद कर देती है।

कौन सी फाइलें इसे रखती हैं

यह फ़ील्ड केवल video streams के लिए मौजूद होता है। आप यह फ़ील्ड MP4, MOV, MKV, WebM और AVI फ़ाइलों की वीडियो streams के लिए देख सकते हैं। reordered frames वाली किसी MOV फ़ाइल में, हर फ्रेम के decoding और display के बीच के समय के लिए एक तालिका भी स्टोर होती है।

Codec यह तय करता है कि B-frames संभव हैं या नहीं। MPEG-2 वीडियो और H.264 Main profile इन्हें उपयोग कर सकते हैं, लेकिन H.264 Baseline profile नहीं कर सकता। VP8, जो WebM फ़ाइलों में उपयोग होने वाला codec है, में B-frames नहीं होते, क्योंकि इसके फ्रेम कभी भी बाद के फ्रेमों से predict नहीं किए जाते।

यह क्यों महत्वपूर्ण है

B-frames वीडियो को छोटा रखने में मदद करते हैं, लेकिन वे delay भी बढ़ाते हैं। Encoder को फ्रेमों को स्टोर करने से पहले उनका क्रम बदलना पड़ता है, और यह delay लगातार आने वाले B-frames की संख्या पर निर्भर करती है।

Reordered वीडियो में हर फ्रेम के लिए 2 अलग समय होते हैं: एक जब फ्रेम को decode करना है और दूसरा जब उसे दिखाना है। FFmpeg दोनों को stream के time base में timestamps के रूप में देता है।

मेटा कीज़