NB Frames মানে একটি ভিডিও বা অডিও ফাইলের এক স্ট্রিমে যতগুলো ফ্রেম আছে, সেই সংখ্যা। এখানে NB মানে "number"। FFmpeg এবং এর ffprobe প্রোগ্রাম এই ফিল্ডকে nb_frames নামে ডাকে।
একটি ফাইলে একাধিক স্ট্রিম থাকতে পারে, এবং প্রতিটি স্ট্রিমের নিজস্ব NB Frames মান থাকে। তাই একটি ভিডিও স্ট্রিম ও একটি অডিও স্ট্রিম থাকা ফাইলে আলাদা 2টি গণনা থাকবে। NB Streams একটি আলাদা মান: এটি ফাইলে থাকা স্ট্রিমের সংখ্যা গোনে, কোনো এক স্ট্রিমের ভেতরের ফ্রেম নয়।
ফ্রেম বলতে কী বোঝায়
ভিডিও স্ট্রিমে, একটি ফ্রেম হলো ভিডিওর একটি স্থির ছবি। অডিও স্ট্রিমে, ফ্রেমের অর্থ ফরম্যাটের ওপর নির্ভর করে।
AIFF-এ, একটি sample frame প্রতিটি অডিও চ্যানেলের জন্য একটি করে sample ধরে। MP3-তে, একটি ফ্রেম অনেক বড় ব্লক, এবং FFmpeg ফ্রেমের সংখ্যা ও প্রতি ফ্রেমে থাকা sample-এর সংখ্যা গুণ করে দৈর্ঘ্য বের করে। তাই আপনি একটি ফরম্যাটের অডিও গণনাকে আরেকটি ফরম্যাটের গণনার সঙ্গে সরাসরি তুলনা করতে পারবেন না।
মানগুলি দেখতে কেমন
মানটি জানা থাকলে এটি একটি পূর্ণসংখ্যা হয়। এই মানগুলো FFmpeg-এর কোড, ডকুমেন্টেশন, ও টেস্ট ফলাফলে দেখা যায়:
708: FFmpeg-এর একটি টেস্ট ফাইলে একটি ভিডিও স্ট্রিমের গণনা।1: একটি HEIC ফাইলে একক স্থির ছবির গণনা।0: সংখ্যা অজানা থাকলে FFmpeg-এর প্রোগ্রামিং ইন্টারফেস যে মান ব্যবহার করে।N/A: মান 0 হলে ffprobe-এর ডিফল্ট আউটপুট যে টেক্সটটি প্রিন্ট করে। এর JSON ও XML আউটপুট এই ফিল্ডটি একেবারে বাদ দেয়।
0 বা N/A মান, বা ফিল্ড অনুপস্থিত থাকা, এগুলোর কোনোটাই আপনাকে বলে না যে স্ট্রিমটি খালি। এগুলো শুধু জানায় যে FFmpeg এই ফিল্ডে কোনো গণনা সেট করেনি।
মানের উৎস কোথায়
NB Frames সাধারণত ফাইলের নিজস্ব গঠন থেকে আসে, তাই FFmpeg-কে ফ্রেম গুনতে হয় না। উৎসটি ফরম্যাট অনুযায়ী বদলায়:
- MP4 এবং MOV: FFmpeg time-to-sample টেবিলে থাকা sample গণনাগুলো যোগ করে, যা
sttsatom। - AVI: FFmpeg স্ট্রিম হেডার থেকে 32-বিট সংখ্যা পড়ে, যা
strhchunk। - AIFF: FFmpeg Common Chunk থেকে
numSampleFramesফিল্ডটি পড়ে। - WAV, MP3, FLAC, এবং MKV: এই ফরম্যাটগুলোর জন্য FFmpeg-এর রিডারগুলো মান সেট করে না, তাই ffprobe-এর ডিফল্ট আউটপুট
N/Aপ্রিন্ট করে।
তবুও একটি MKV ফাইলে অন্য নামে গণনা রাখা থাকতে পারে। mkvmerge প্রোগ্রাম প্রতিটি ট্র্যাকের জন্য NUMBER_OF_FRAMES নামে একটি ট্যাগ লেখে।
ফ্রেম কীভাবে গোনা হয়
NB Frames শুধু ফাইল স্ট্রাকচারে থাকা সংখ্যাটিই পুনরাবৃত্তি করে। এই সংখ্যা প্রমাণ করে না যে সব ফ্রেম সত্যিই ফাইলে আছে। FFmpeg-এর একটি MOV টেস্ট ফাইলে 708 মান রাখা আছে, কিন্তু ffprobe সেই ফাইল থেকে মাত্র 66টি প্যাকেট ও 65টি ফ্রেম পড়ে।
গণনা মাপতে, ffprobe-কে -show_streams এবং -count_frames অপশনসহ চালান। তখন ffprobe স্ট্রিম ডিকোড করে এবং ফলাফল আলাদা ফিল্ড nb_read_frames-এ দেখায়। এতে বেশি সময় লাগে, কারণ ffprobe-কে প্রতিটি ফ্রেম ডিকোড করতে হয়।
এই পরীক্ষা ভিডিও স্ট্রিমের জন্য ব্যবহার করুন। AIFF ফাইলে, ffprobe এমন ডিকোড করা ব্লক গোনে, যেগুলোর প্রতিটিতে অনেক sample frame থাকে, তাই সম্পূর্ণ ফাইল হলেও এই দুই সংখ্যা আলাদা হয়।
-count_packets অপশনটি, যা -show_streams এর সঙ্গেও ব্যবহার করা হয়, ডিকোড না করেই প্যাকেট গোনে এবং ফলাফল nb_read_packets-এ দেখায়। একটি ভিডিও প্যাকেট সাধারণত একটি কমপ্রেসড ফ্রেম ধরে, কিন্তু একটি অডিও প্যাকেটে একাধিক ফ্রেম থাকতে পারে।
এটি কেন গুরুত্বপূর্ণ
একটি ভিডিও স্ট্রিমের ক্ষেত্রে, ফ্রেম গণনা ও দৈর্ঘ্য মিলিয়ে গড় frame rate পাওয়া যায়। FFmpeg-এর MP4 ও MOV রিডার ফ্রেম গণনা ও দৈর্ঘ্য থেকে এই হার হিসাব করে। একই টেস্ট ফাইলে, 23.613333 সেকেন্ডে 708 ফ্রেম মানে প্রতি সেকেন্ডে প্রায় 29.98 ফ্রেম।
গণনা আপনাকে একটি ভিডিও ফাইল পরীক্ষা করতেও সাহায্য করে। পরিমাপ করা গণনা যদি সংরক্ষিত গণনার চেয়ে অনেক কম হয়, তাহলে ভিডিও ডেটার কিছু অংশ অনুপস্থিত থাকতে পারে।