পিক্সেল ফরম্যাট হল কোনো ছবি বা ভিডিওর কাঁচা পিকচার ডেটায় প্রতিটি পিক্সেলের বিন্যাস। এটি কোনো প্রোগ্রামকে জানায় ছবিটিতে কোন কোন রঙ উপাদান আছে এবং সেগুলো কত বিট ব্যবহার করে।
ভিডিও রিপোর্টে প্রায়ই এই ফিল্ডটি pix_fmt নামে দেখানো হয়, যার মান হতে পারে yuv420p এর মতো। এমন একটি মান রঙ মডেল, ক্রোমা সাবস্যাম্পলিং, এবং বিট ডেপ্থ বোঝায়। কালার স্পেস আলাদা একটি ফিল্ড।
কোন ফাইলগুলো এটিকে বহন করে
FFmpeg-এর ffprobe প্রোগ্রাম প্রতিটি ভিডিও স্ট্রিমের জন্য pix_fmt দেখায়। এর মধ্যে MP4, MOV, MKV এবং WebM ফাইল পড়ে।
ছবিও একটি মান জানায়। FFmpeg 4:2:0 স্যাম্পলিং থাকা JPEG-এর জন্য yuvj420p এবং 8-বিট RGB PNG-এর জন্য rgb24 ব্যবহার করে।
কভার আর্ট থাকা কোনো অডিও ফাইলও একটি পিক্সেল ফরম্যাট দেখাতে পারে। FFmpeg সেই ছবিটিকে ভিডিও স্ট্রিম হিসেবে গণ্য করে।
ExifTool Windows HD Photo ফাইল (HDP এবং WDP) থেকে PixelFormat নামে একটি ট্যাগ পড়ে। এটি 24-bit RGB এবং 8-bit Gray এর মতো মান দেখায়।
মানগুলি দেখতে কেমন
FFmpeg ছোট ছোট অংশ থেকে এর নাম বানায়। yuv420p10le মানটির ৫টি অংশ আছে:
yuv: রঙ মডেল। Y হল উজ্জ্বলতা, আর U ও V বহন করে রঙ। U ও V-কে YCbCr-এর মতো করে Cb ও Crও বলা হয়।420: স্যাম্পলিং। রঙের প্রস্থ ও উচ্চতা উজ্জ্বলতার অর্ধেক।p: প্ল্যানার। প্রতিটি উপাদানের জন্য আলাদা প্লেন থাকে। প্যাকড ফরম্যাটে সব উপাদান একসাথে একটি অ্যারেতে থাকে।10: প্রতিটি উপাদানের জন্য বিট সংখ্যা।yuv420pমানটির এখানে কোনো সংখ্যা নেই এবং এটি 8 বিট ব্যবহার করে।le: বাইট অর্ডার, লিটল-এন্ডিয়ান। শেষেbeথাকলে তা বিগ-এন্ডিয়ান বোঝায়।
প্রচলিত মান
নিচের প্রতিটি সংখ্যাই কাঁচা পিকচার ডেটায় প্রতি পিক্সেলে গড়ে কত বিট লাগে তা দেখায়:
yuv420p: 12 বিট, রঙের প্রস্থ ও উচ্চতা উজ্জ্বলতার অর্ধেকyuv422p: 16 বিট, রঙের প্রস্থ উজ্জ্বলতার অর্ধেকyuv444p: 24 বিট, প্রতিটি পিক্সেলের জন্য রঙyuvj420p: 12 বিট,yuv420pবিন্যাস, তবে JPEG যে পূর্ণ রেঞ্জ ব্যবহার করে তা সহrgb24: 24 বিট, প্যাকড লাল, সবুজ ও নীলrgba: 32 বিট, স্বচ্ছতার জন্য অতিরিক্ত আলফা মানসহgray: 8 বিট, শুধু উজ্জ্বলতাpal8: 8 বিট, প্রতিটি মান একটি প্যালেট রঙের দিকে নির্দেশ করে
ফুল রেঞ্জে 8-বিট উজ্জ্বলতার মান 0 থেকে 255 পর্যন্ত যায়। লিমিটেড রেঞ্জে এটি 16 থেকে 235 পর্যন্ত থাকে। FFmpeg yuvj নামগুলোর বদলে আলাদা রেঞ্জ ফিল্ড ব্যবহার করার পরামর্শ দেয়।
মানের উৎস কোথায়
যে প্রোগ্রাম স্ট্রিমটি এনকোড করে, সেটিই পিক্সেল ফরম্যাট নির্ধারণ করে। FFmpeg-এ আপনি -pix_fmt অপশন দিয়ে এটি বাছাই করেন।
নামটি নিজে সাধারণত ফাইলের ভেতর সংরক্ষিত থাকে না। যে প্রোগ্রাম ফাইল পড়ে, সেটি সংরক্ষিত তথ্য থেকে এই নাম তৈরি করে।
H.264-এর জন্য FFmpeg স্ট্রিম হেডারে থাকা বিট ডেপ্থ এবং ক্রোমা ফরম্যাট ব্যবহার করে। PNG-এর জন্য FFmpeg ছবি হেডারে থাকা বিট ডেপ্থ এবং রঙ টাইপ ব্যবহার করে।
আপনার ফাইলের জন্য এটি কেন গুরুত্বপূর্ণ
পিক্সেল ফরম্যাট কাঁচা পিকচার ডেটার আকার নির্ধারণ করে। একটি rgb24 ফ্রেমে প্রতি পিক্সেলে 24 বিট থাকে, আর yuv420p ফ্রেমে থাকে 12 বিট। পরে কোডেক এগুলো কমপ্রেস করে, তাই এই মানগুলো থেকে চূড়ান্ত ফাইল সাইজ বোঝা যায় না।
পিক্সেল ফরম্যাট ফাইলটি কতটা রঙের বিস্তারিত রাখবে সেটাও ঠিক করে। মানুষের চোখ উজ্জ্বলতায় রঙের তুলনায় অনেক বেশি বিস্তারিত দেখে, তাই 4:2:0 সাধারণত খুব কম দৃশ্যমান ক্ষতি করে।
আপনি যদি 4:2:0-কে 4:4:4-এ রূপান্তর করেন, কোনো প্রোগ্রাম আশেপাশের মান থেকে অনুপস্থিত স্যাম্পলগুলো হিসাব করে। 4:2:0 আগে যেই রঙের বিস্তারিত বাদ দিয়েছে, সেটি আর ফেরত আসে না।
H.264 প্রোফাইলও মানটি পরীক্ষা করার আরেকটি কারণ। Main ও High প্রোফাইল 4:2:0 স্যাম্পলিংসহ 8-বিট রঙ সমর্থন করে।
yuv444p বা yuv420p10le থাকা কোনো H.264 স্ট্রিমের জন্য আরও উচ্চ প্রোফাইল লাগে। Apple's HLS নিয়মে H.264-এর প্রোফাইল High বা তার নিচে হতে হবে। YouTube আপলোডের জন্য 4:2:0 সহ High প্রোফাইল ব্যবহারের পরামর্শ দেয়।