พจนานุกรม

Pixel Format คืออะไร?

รูปแบบพิกเซลคือวิธีที่วิดีโอหรือรูปภาพจัดเก็บข้อมูลสีของพิกเซลแต่ละจุด หาความหมายของค่าอย่างเช่น yuv420p สำหรับไฟล์ของคุณ

pixel-format

รูปแบบพิกเซลคือการจัดวางของแต่ละพิกเซลในข้อมูลภาพดิบของรูปภาพหรือวิดีโอ ใช้บอกโปรแกรมว่าภาพมีองค์ประกอบสีใดบ้างและแต่ละส่วนใช้กี่บิต

รายงานวิดีโอมักแสดงฟิลด์นี้เป็น pix_fmt โดยมีค่าเช่น yuv420p ค่าแบบนี้บอกแบบจำลองสี chroma subsampling และ ความลึกบิต ส่วน สีสเปซ จะเป็นฟิลด์แยกต่างหาก

ไฟล์ใดที่มีรายการนี้อยู่

โปรแกรม ffprobe ของ FFmpeg แสดง pix_fmt สำหรับแต่ละสตรีมวิดีโอ ครอบคลุมไฟล์ MP4, MOV, MKV และ WebM

รูปภาพก็มีการรายงานค่าด้วยเช่นกัน FFmpeg ให้ค่า yuvj420p กับไฟล์ JPEG ที่ใช้การสุ่มตัวอย่าง 4:2:0 และให้ค่า rgb24 กับไฟล์ PNG แบบ RGB 8 บิต

ไฟล์เสียงที่มีภาพหน้าปกก็สามารถรายงานรูปแบบพิกเซลได้เช่นกัน FFmpeg จะมองภาพนั้นเป็นสตรีมวิดีโอ

ExifTool อ่านแท็กชื่อ PixelFormat จากไฟล์ Windows HD Photo (HDP และ WDP) โดยแสดงค่าเช่น 24-bit RGB และ 8-bit Gray

ลักษณะของค่าเป็นอย่างไร

FFmpeg สร้างชื่อค่าจากส่วนสั้น ๆ ค่า yuv420p10le มีทั้งหมด 5 ส่วน:

  • yuv: แบบจำลองสี Y คือความสว่าง ส่วน U และ V ใช้เก็บสี U และ V เรียกอีกอย่างว่า Cb และ Cr เช่นใน YCbCr
  • 420: การสุ่มตัวอย่าง สีมีความละเอียดกว้างและสูงเป็นครึ่งหนึ่งของข้อมูลความสว่าง
  • p: แบบ planar แต่ละองค์ประกอบอยู่บนระนาบแยกกัน รูปแบบแบบ packed จะเก็บองค์ประกอบทั้งหมดไว้รวมกันในอาร์เรย์เดียว
  • 10: จำนวนบิตต่อองค์ประกอบ ค่า yuv420p จะไม่มีตัวเลขตรงนี้และใช้ 8 บิต
  • le: ลำดับไบต์ แบบ little-endian ส่วนท้าย be หมายถึงแบบ big-endian

ค่าทั่วไป

ตัวเลขด้านล่างคือค่าเฉลี่ยจำนวนบิตต่อพิกเซลในข้อมูลภาพดิบ:

  • 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 รองรับสี 8 บิตพร้อมการสุ่มตัวอย่างแบบ 4:2:0

สตรีม H.264 ที่ใช้ yuv444p หรือ yuv420p10le ต้องใช้โปรไฟล์ที่สูงกว่า กฎของ HLS จาก Apple กำหนดให้ใช้ H.264 ที่โปรไฟล์ High หรือต่ำกว่า YouTube แนะนำให้ใช้โปรไฟล์ High ร่วมกับ 4:2:0 สำหรับไฟล์อัปโหลด

คีย์เมตา