พจนานุกรม

B-Frames ในวิดีโอคืออะไร

B-frame คือเฟรมวิดีโอที่สามารถใช้งานได้ทั้งเฟรมก่อนหน้าและเฟรมถัดไป เรียนรู้ว่า B-frame ทำงานอย่างไร และค่าของ Has B Frames ในไฟล์ของคุณหมายความว่าอย่างไร

b-frames

B-frame คือเฟรมวิดีโอที่สามารถใช้ทั้งเฟรมก่อนหน้าและเฟรมถัดไปเพื่อสร้างภาพของตัวเอง ตัวอักษร B มาจากคำว่า bidirectional B-frame ให้การบีบอัดข้อมูลได้มากกว่าเฟรมประเภทอื่น ซึ่งช่วยให้ไฟล์วิดีโอมีขนาดเล็กลง

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

ความแตกต่างระหว่าง B-frame กับ I-frame และ P-frame

การบีบอัดวิดีโอมักทำงานโดยการเปรียบเทียบเฟรมและบันทึกเฉพาะส่วนที่ต่างกัน วิดีโอ MPEG-2 กำหนดเฟรมไว้ 3 ประเภทดังนี้:

  • I-frame: เข้ารหัสโดยไม่อ้างอิงจากเฟรมอื่น จึงสามารถเริ่มถอดรหัสจากเฟรมนี้ได้
  • P-frame: สามารถอ้างอิงจาก I-frame หรือ P-frame ก่อนหน้าได้
  • B-frame: สามารถอ้างอิงจาก I-frame หรือ P-frame ทั้งก่อนหน้าและถัดไปได้

B-frame อาจขึ้นอยู่กับเฟรมที่อยู่ถัดไปในเวลา ดังนั้นเฟรมถัดไปนั้นต้องถูกเก็บไว้ก่อน ทำให้ลำดับที่เก็บในไฟล์ต่างจากลำดับที่คุณเห็นบนหน้าจอ ลำดับ MPEG-2 แบบหนึ่งอาจมีลักษณะดังนี้:

  • ลำดับการแสดงผล: B1 B2 I3 B4 B5 P6 B7 B8 P9 B10 B11 P12
  • ลำดับที่เก็บในไฟล์: I3 B1 B2 P6 B4 B5 P9 B7 B8 P12 B10 B11

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

Has B Frames เป็นจำนวนเต็ม FFmpeg อธิบายค่านี้ว่าเป็นขนาดของบัฟเฟอร์จัดลำดับเฟรมใหม่ในตัวถอดรหัส สำหรับวิดีโอ MPEG-2 FFmpeg ระบุค่าไว้ 2 ค่า:

  • 0: วิดีโอหน่วงต่ำที่มีเฉพาะ I-frame และ P-frame
  • 1: วิดีโอที่มี I-frame, P-frame และ B-frame

ตัวเข้ารหัส H.264 และ HEVC สามารถเก็บ B-frame บางส่วนไว้เป็นเฟรมอ้างอิงสำหรับเฟรมอื่นได้ ไฟล์ทดสอบของ FFmpeg สำหรับ H.264 แสดงให้เห็นว่าการตั้งค่าแบบนี้เปลี่ยนค่าอย่างไร ชื่อไฟล์บอกการตั้งค่าของตัวเข้ารหัสไว้แล้ว:

  • มี B-frame ต่อเนื่องกันได้สูงสุด 3 เฟรม โดยไม่มีเฟรมใดถูกเก็บไว้เป็นเฟรมอ้างอิง: 1
  • มี B-frame ต่อเนื่องกันได้สูงสุด 3 เฟรม โดยมีบางเฟรมถูกเก็บไว้เป็นเฟรมอ้างอิง: 2
  • มี B-frame ต่อเนื่องกันได้สูงสุด 4 เฟรม โดยมีบางเฟรมถูกเก็บไว้เป็นเฟรมอ้างอิง: 2

ดังนั้นค่านี้จึงไม่ใช่จำนวนของ B-frame โปรแกรม ffprobe แสดงประเภทของแต่ละเฟรมเป็นค่าของ pict_type ได้แก่ I, P หรือ B ฟิลด์ NB Frames ให้จำนวนเฟรมทั้งหมด แต่ไม่บอกประเภทของเฟรม

แหล่งที่มาของค่า

ชื่อนี้มาจาก FFmpeg ซึ่งโปรแกรม ffprobe จะพิมพ์ has_b_frames สำหรับสตรีมวิดีโอ สตรีม H.264 สามารถระบุจำนวนนี้ไว้ในส่วนหัวของตัวเองได้ หากส่วนหัวไม่ระบุตัวเลข FFmpeg จะคำนวณจากเฟรมและเวลาแสดงผล

การตั้งค่าตัวเข้ารหัสเป็นตัวกำหนดว่าวิดีโอจะใช้ B-frame หรือไม่ ใน FFmpeg และในตัวเข้ารหัส Microsoft H.264 หากตั้งค่าเป็น 0 จะเป็นการปิดการใช้ B-frame

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

ฟิลด์นี้มีเฉพาะในสตรีมวิดีโอเท่านั้น คุณสามารถดูฟิลด์นี้ได้สำหรับวิดีโอในไฟล์ MP4, MOV, MKV, WebM และ AVI ไฟล์ MOV ที่มีการจัดลำดับเฟรมใหม่จะเก็บตารางเวลาระหว่างการถอดรหัสและการแสดงผลของแต่ละเฟรมไว้ด้วย

ตัวแปลงรหัส (codec) เป็นตัวตัดสินว่าสามารถใช้ B-frame ได้หรือไม่ วิดีโอ MPEG-2 และ H.264 โปรไฟล์ Main สามารถใช้ B-frame ได้ แต่ H.264 โปรไฟล์ Baseline ไม่รองรับ VP8 ซึ่งเป็น codec ที่ใช้ในไฟล์ WebM ไม่มี B-frame เพราะเฟรมของมันจะไม่ถูกทำนายจากเฟรมถัดไป

ทำไมมันจึงสำคัญ

B-frame ช่วยให้ไฟล์วิดีโอมีขนาดเล็กลง แต่ทำให้เกิดความหน่วงเพิ่มขึ้น ตัวเข้ารหัสต้องจัดลำดับเฟรมใหม่ก่อนบันทึกลงไฟล์ และความหน่วงนี้ขึ้นอยู่กับจำนวน B-frame ที่ต่อเนื่องกัน

วิดีโอที่มีการจัดลำดับเฟรมใหม่จะมีเวลา 2 แบบสำหรับแต่ละเฟรม คือเวลาที่ต้องถอดรหัสเฟรมและเวลาที่ต้องแสดงผลเฟรมนั้น FFmpeg ให้เวลาทั้งสองแบบเป็น timestamp ในtime base ของสตรีม

คีย์เมตา