NB Frames का मतलब एक वीडियो या ऑडियो फ़ाइल की किसी एक stream में frames की संख्या होता है। NB का अर्थ "number" होता है। FFmpeg और इसका ffprobe प्रोग्राम इस field को nb_frames कहता है।
एक फ़ाइल में कई streams हो सकती हैं, और हर stream का अपना NB Frames मान होता है। उदाहरण के लिए, एक वीडियो stream और एक ऑडियो stream वाली फ़ाइल में 2 अलग-अलग गिनतियाँ होंगी। NB Streams अलग मान है: यह फ़ाइल में streams की गिनती करता है, न कि किसी एक stream के अंदर के frames की।
फ़्रेम क्या होता है
किसी वीडियो stream में, एक frame वीडियो की एक स्थिर image होता है। किसी ऑडियो stream में, इसका अर्थ format पर निर्भर करता है।
AIFF में, एक sample frame हर ऑडियो channel के लिए एक sample रखता है। MP3 में, एक frame एक बड़ा block होता है, और FFmpeg लंबाई निकालने के लिए frame गिनती को samples-per-frame से गुणा करता है। इसलिए आप एक format की ऑडियो गिनती को सीधे किसी दूसरे format की गिनती से नहीं तुलना कर सकते।
मूल्य कैसे दिखते हैं
जब मान ज्ञात होता है, तो यह एक पूर्ण संख्या होती है। ये मान FFmpeg के code, documentation, और test परिणामों में दिखते हैं:
708: FFmpeg की एक test फ़ाइल में वीडियो stream के लिए गिनती।1: HEIC फ़ाइल में एक single स्थिर image के लिए गिनती।0: वह मान जो FFmpeg का programming interface तब उपयोग करता है जब संख्या ज्ञात न हो।N/A: वह text जो ffprobe के default output में तब छपता है जब मान 0 हो। इसके JSON और XML output में यह field छोड़ दी जाती है।
0 या N/A का मान, या field के अनुपस्थित होने से यह नहीं पता चलता कि stream खाली है। यह मान केवल यह बताता है कि FFmpeg ने इस field में कोई गिनती सेट नहीं की।
मूल्य कहाँ से आता है
NB Frames आमतौर पर फ़ाइल की अपनी संरचना से आता है, इसलिए FFmpeg को frames गिनने की ज़रूरत नहीं पड़ती। स्रोत format पर निर्भर करता है:
- MP4 और MOV: FFmpeg time-to-sample तालिका में sample गिनतियाँ जोड़ता है, जो
sttsatom होता है। - AVI: FFmpeg stream header से 32-bit संख्या पढ़ता है, जो
strhchunk होता है। - AIFF: FFmpeg Common Chunk से
numSampleFramesfield पढ़ता है। - WAV, MP3, FLAC और MKV: इन formats के लिए FFmpeg के reader यह मान सेट नहीं करते, इसलिए ffprobe के default output में
N/Aछपता है।
किसी MKV फ़ाइल में फिर भी गिनती किसी और नाम से रखी जा सकती है। mkvmerge प्रोग्राम हर track के लिए NUMBER_OF_FRAMES नाम का tag लिखता है।
फ़्रेम कैसे गिनें
NB Frames केवल फ़ाइल संरचना में मौजूद संख्या को दोहराता है। यह संख्या यह साबित नहीं करती कि सारे frames वास्तव में फ़ाइल में मौजूद हैं। FFmpeg की एक MOV test फ़ाइल में 708 की गिनती रखी है, लेकिन ffprobe उस फ़ाइल से केवल 66 packets और 65 frames पढ़ता है।
वास्तविक गिनती मापने के लिए, ffprobe को -show_streams और -count_frames विकल्पों के साथ चलाएँ। ffprobe प्रोग्राम तब stream को decode करता है और परिणाम को अलग field nb_read_frames में रिपोर्ट करता है। इसमें अधिक समय लगता है, क्योंकि ffprobe को हर frame decode करना पड़ता है।
यह जाँच वीडियो streams के लिए उपयोग करें। किसी AIFF फ़ाइल में, ffprobe decode किए गए ऐसे blocks गिनता है जिनमें कई sample frames होते हैं, इसलिए पूर्ण फ़ाइल में भी ये दोनों संख्याएँ अलग हो सकती हैं।
-count_packets विकल्प, जिसे -show_streams के साथ ही उपयोग किया जाता है, packets को decode किए बिना गिनता है और परिणाम nb_read_packets में रिपोर्ट करता है। किसी वीडियो packet में आम तौर पर एक compressed frame होता है, लेकिन किसी ऑडियो packet में कई frames हो सकते हैं।
यह क्यों महत्वपूर्ण है
किसी वीडियो stream के लिए, frame गिनती और duration मिलकर औसत frame rate देती हैं। FFmpeg का MP4 और MOV reader frame गिनती और duration से rate निकालता है। उसी test फ़ाइल में, 23.613333 सेकंड में 708 frames लगभग 29.98 frames प्रति सेकंड के बराबर होते हैं।
यह गिनती किसी वीडियो फ़ाइल की जाँच में भी मदद करती है। यदि मापी गई गिनती संग्रहीत गिनती से बहुत कम है, तो वीडियो data का कोई भाग गायब हो सकता है।