อัตราบิตแตกต่างกันอย่างไรสำหรับความละเอียดและอัตราเฟรมเดียวกัน


15

การอ่านเกี่ยวกับคุณภาพของวิดีโอฉันพบว่ามันขึ้นอยู่กับความละเอียดเฟรมต่อวินาทีและบิตเรตซึ่งเป็นตัวกำหนดขนาดของวิดีโอ

คำถามของฉันคือวิธีคำนวณบิตเรตและความแตกต่าง

สมมติว่าวิดีโอมีความละเอียด 360x240 ใช้เวลา 86400 พิกเซลต่อเฟรม อัตราเฟรมคือ 30 Hz ดังนั้นวิดีโอจึงใช้เวลา 86400 × 30 = 2592000 พิกเซลต่อวินาที

สมมุติว่า 1 พิกเซลมีข้อมูล 3 ไบต์ (24 บิต): เรามี 2592000 × 24 บิตต่อวินาทีวิดีโอ (62208000 บิต) นั่นคือ 62208 kBits (นี่ไม่ได้ฟังดูอาจจะมีปัญหาในการคำนวณของฉัน)

แต่มันจะแตกต่างกันอย่างไรและมันสร้างความแตกต่างในด้านคุณภาพได้อย่างไร?


หากวิดีโอเป็นลำดับของภาพบิตแมป คณิตศาสตร์ของคุณปิดอยู่แล้วสำหรับไฟล์รูปภาพ png / jpg
Daniel Beck

คำตอบที่มีอยู่ทั้งสองไม่เน้นคุณลักษณะสำคัญเกี่ยวกับการบีบอัดวิดีโอ: ส่วนใหญ่ (ถ้าไม่ทั้งหมด) ตัวแปลงสัญญาณวิดีโอทั้งหมดใช้การบีบอัดแบบ lossy นั่นคือข้อมูลภาพบางส่วนจะถูกยกเลิกเมื่อวิดีโอดิบถูกบีบอัดและเข้ารหัส จำนวนเงินหรือระดับของข้อมูลภาพและทิ้งหายไป / รายละเอียดจะถูกกำหนดโดยปัจจัยคุณภาพ สำหรับการบีบอัดสัญญาณเสียงนั้นมีทั้งเทคนิคการบีบอัดแบบ lossy และ lossless
ขี้เลื่อย

@sawdust: พวกเขาไม่ได้? ฉันคิดว่าย่อหน้าที่สามของฉันทำให้ชัดเจน อย่างไรก็ตามการให้ข้อมูลมากเกินไปบางครั้งก็ไม่ค่อยดีนัก ฉันเชื่อในการให้เพียงพอที่จะอนุญาตให้ผู้ถามเรียนรู้เพิ่มเติมหากต้องการ มิฉะนั้นฉันอาจบอกว่าโพสต์ของคุณไม่ได้เน้นว่าทำไมใครบางคนถึงเลือกคอมเพรสเซอร์หนึ่งอันหรือทำไมมีวิธีการที่แตกต่างกันมากมาย ฯลฯ
Marty Fried

@sawdust คุณถูกต้องมันถูกฝังอยู่ในส่วนของ JPEG ฉันเพิ่มรายละเอียดเพิ่มเติมเล็กน้อย
slhck

คำตอบ:


21

สิ่งที่คุณคำนวณคือบิตเรตสำหรับวิดีโอที่ไม่มีการบีบอัด โดยทั่วไปคุณจะไม่พบสิ่งเหล่านี้ยกเว้นในการวิจัยหรือแอปพลิเคชันพิเศษอื่น ๆ แม้ผู้แพร่ภาพจะใช้วิดีโอที่บีบอัดถึงแม้ว่าบิตเรตจะสูงกว่าวิดีโอ YouTube ทั่วไปก็ตาม

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

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

ความซ้ำซ้อนเชิงพื้นที่

ความซ้ำซ้อนเชิงพื้นที่มีอยู่ในภาพที่แสดงเนื้อหาตามธรรมชาติ นี่คือเหตุผลที่JPEG ใช้งานได้ดี - มันบีบอัดข้อมูลภาพเพราะบล็อกของพิกเซลสามารถถูกเขียนร่วมกันได้ ตัวอย่างเช่น 8 × 8 พิกเซลเช่น สิ่งเหล่านี้เรียกว่า "macroblocks"

ตัวแปลงสัญญาณวิดีโอที่ทันสมัยทำเช่นเดียวกัน: โดยทั่วไปพวกเขาใช้อัลกอริทึมที่คล้ายกันกับ JPEG เพื่อบีบอัดเฟรมบล็อกโดยบล็อก ดังนั้นคุณจะไม่เก็บบิตต่อพิกเซลอีกต่อไป แต่บิตต่อ macroblock เพราะคุณ "สรุป" พิกเซลเป็นกลุ่มขนาดใหญ่ อัลกอริธึมจะยกเลิกข้อมูลที่ไม่สามารถมองเห็นได้ด้วยตาเปล่าซึ่งนี่เป็นที่ที่คุณสามารถลดบิตเรตส่วนใหญ่ได้ มันทำงานโดยการหาปริมาณข้อมูล สิ่งนี้จะรักษาความถี่ที่สามารถรับรู้ได้มากขึ้นและ "ทิ้ง" สิ่งที่เรามองไม่เห็น ปัจจัยเชิงปริมาณแสดงเป็น "QP" ในตัวแปลงสัญญาณส่วนใหญ่และเป็นปุ่มควบคุมหลักสำหรับคุณภาพ

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

เหตุใดอัตราบิตจึงเปลี่ยนสำหรับขนาดภาพเดียวกัน ภาพบางภาพนั้นง่ายต่อการเข้ารหัสมากกว่าภาพอื่น ๆ กิจกรรมอวกาศยิ่งสูงขึ้นเท่าไหร่คุณต้องเข้ารหัสมากเท่านั้น พื้นผิวที่เรียบนั้นใช้บิตน้อยกว่ารายละเอียด เช่นเดียวกันสำหรับการคาดการณ์ภายใน: กรอบของผนังสีเทาจะช่วยให้คุณใช้ macroblock หนึ่งตัวเพื่อคาดการณ์อื่น ๆ ทั้งหมดในขณะที่เฟรมของน้ำไหลอาจไม่ทำงาน

ความซ้ำซ้อนชั่วคราว

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

ยกตัวอย่างจากบทความของ Wikipedia เกี่ยวกับการชดเชยการเคลื่อนไหวสมมติว่านี่เป็นเฟรมดั้งเดิมของคุณ:

จากนั้นความแตกต่างในเฟรมถัดไปคือ:

ตัวเข้ารหัสจะเก็บเฉพาะความแตกต่างจริงเท่านั้นไม่ใช่ค่าพิกเซลต่อพิกเซล นี่คือเหตุผลที่บิตที่ใช้สำหรับแต่ละเฟรมไม่เหมือนกันทุกครั้ง เฟรม "แตกต่าง" เหล่านี้ขึ้นอยู่กับเฟรมที่เข้ารหัสอย่างสมบูรณ์และนี่คือสาเหตุที่มีเฟรมอย่างน้อยสองประเภทสำหรับตัวแปลงสัญญาณรุ่นใหม่:

  • I-frames (aka keyframes) - นี่คือเฟรมที่เข้ารหัสอย่างสมบูรณ์
  • เฟรม P - เหล่านี้คือเฟรมที่เก็บความแตกต่าง

บางครั้งคุณจำเป็นต้องแทรก I-frames ลงในวิดีโอ บิตเรตที่แท้จริงขึ้นอยู่กับจำนวนของเฟรม I ที่ใช้ ยิ่งไปกว่านั้นยิ่งมีการเคลื่อนไหวที่แตกต่างกันระหว่างเฟรมต่อไปสองเฟรมยิ่งมีการเข้ารหัสมากขึ้น วิดีโอที่มีการเคลื่อนไหว "ไม่มีอะไร" จะเข้ารหัสได้ง่ายกว่าวิดีโอกีฬาและใช้บิตต่อเฟรมน้อยลง


+1 - นั่นคือสิ่งที่ฉันหมายถึง แต่อัลกอริทึมการบีบอัดของฉันออกไปเล็กน้อย :)
มาร์ตี้ผัด

+1 นี่คือทั้งหมดที่ฉันต้องการ โดยเฉพาะการชดเชยการเคลื่อนไหว ขอบคุณ
วินเซนต์ mathew

6

ฉันเชื่อว่าคณิตศาสตร์ของคุณถูกต้องจริง ๆ แต่ก็มีมากกว่านั้น การบีบอัดเป็นลิงค์ที่ขาดหายไปที่นี่

คุณคำนวณอัตราบิตที่ไม่บีบอัดและเกิดขึ้นกับเหตุผลที่มีการบีบอัด อัตราบิตมีขนาดใหญ่มากจนไม่มีการบีบอัดวิดีโอ ดังนั้นพวกเขาบีบอัดวิดีโอที่แหล่งที่มาและคลายการบีบอัดที่ตัวรับแล้วอัตราบิตจะจัดการได้ คุณเพียงต้องการตัวขยายการบีบอัดที่เร็วพอซึ่งอาจเป็นฮาร์ดแวร์หรือซอฟต์แวร์

ดังนั้นปัญหาจะกลายเป็นว่าการบีบอัดข้อมูลสามารถทนได้มากเท่าไร - โดยปกติแล้วคุณจะไม่สูญเสียข้อมูล แต่พวกเขาพยายามทำให้ฉลาดพอที่จะสูญเสียข้อมูลที่สำคัญน้อยกว่าซึ่งจะไม่สังเกตเห็นได้ มันมักจะค่อนข้างง่ายจนกระทั่งมีการเคลื่อนไหวมากจากนั้นจะมีความซับซ้อนมากขึ้น

แก้ไข: ลืมที่จะเพิ่ม แต่ส่วนที่ใช้วิธีการบีบอัดคือตัวแปลงสัญญาณ; ฉันสังเกตเห็นว่าคุณใช้สิ่งนี้เป็นแท็กในโพสต์ของคุณ


3
บวกกับความจริงที่ว่าการบีบอัดวิดีโอมักจะไม่ได้ตามพิกเซล แต่ทำงานบนบล็อกของพิกเซลเรียกว่าmacroblocks
slhck
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.