โหมดอัตราบิต VP9 โดยละเอียด

บทนำ

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

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

การบีบอัด

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

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

การหาปริมาณ (หรือ "Q") มีการอธิบายไว้เป็นอย่างดีในบทความใน Wikipedia

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

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

การเพิ่มประสิทธิภาพกรณีการใช้งาน

หากต้องการอนุญาตให้ผู้ใช้ "ปรับ" การบีบอัด VP9 ให้ตรงกับความต้องการเฉพาะของตน คุณสามารถปรับสมดุลของคุณภาพและบิตเรตในขณะที่บีบอัดครั้งแรกผ่านอินเทอร์เฟซการเขียนโปรแกรมต่างๆ ได้

ตัวเข้ารหัสมีการเลือกระหว่างความเร็ว คุณภาพ และบิตเรต

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

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

  • หากผู้ใช้มุ่งเน้นที่ความเร็วในการนำส่งอย่างเดียว (เช่น ในการถ่ายทอดสด ทางเว็บหรือการประชุมทางวิดีโอแบบ 2 ทาง) การหาปริมาณอาจขึ้นอยู่กับข้อจำกัดของอัตราที่สามารถส่งไบต์ของข้อมูลที่ใช้ได้ผ่านเครือข่าย (นั่นคือ "บิตเรต")

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

โหมดอัตราบิตของ VP9

มาเริ่มกันด้วยการดูโหมดบิตเรตหลักที่ VP9 รองรับ

โหมด
ตัวหาปริมาณคงที่ (Q) ช่วยให้คุณระบุค่าตัวหาปริมาณคงที่ได้ บิตเรตจะแตกต่างกันไป
คุณภาพแบบจำกัด (CQ) ช่วยให้คุณกำหนดระดับคุณภาพสูงสุดได้ คุณภาพอาจแตกต่างกันไปภายในพารามิเตอร์บิตเรต
อัตราบิตแปรผัน (VBR) ปรับสมดุลคุณภาพและอัตราบิตในช่วงระยะเวลาหนึ่งภายในข้อจำกัดด้านอัตราบิต
อัตราบิตคงที่ (CBR) พยายามรักษาบิตเรตให้ค่อนข้างคงที่ในขณะที่คุณภาพแตกต่างกันไป

Q

แผนภูมิโหมด Q

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

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

การเพิ่มประสิทธิภาพอัตราบิตโหมด Q ของ VP9

โหมดตัวหาปริมาณคงที่ต้องมีการกำหนดค่าขั้นต่ำ ตามชื่อของโหมด Q โหมดนี้มุ่งเน้นที่การรักษาตัวหาปริมาณที่ระดับ "คุณภาพ" เป้าหมาย และอนุญาตให้ตัวหาปริมาณกำหนดโฟลว์ของข้อมูลที่ต้องการ ประมวลผล ผู้ใช้เพียงแค่ต้องกำหนดคุณภาพเป้าหมาย

ดูข้อมูลเพิ่มเติมเกี่ยวกับรายละเอียดคุณภาพเป้าหมายจากการมุ่งเน้นการประมวลผลรูปภาพ (ไม่ใช่การมุ่งเน้นบิตเรต) ได้ในบทความการเข้ารหัสพื้นฐาน

ใช้พารามิเตอร์บรรทัดคำสั่ง FFmpeg ต่อไปนี้สำหรับการเพิ่มประสิทธิภาพบิตเรตในโหมด Q

ffmpeg
-b:v 0 การทำเครื่องหมายอัตราบิตของวิดีโอเป็น 0 จะเป็นการตั้งค่าโหมด "Q" อย่างชัดเจน
-g <arg> ตั้งค่าช่วงคีย์เฟรมเป็นเฟรม (ค่าเริ่มต้นคือ 240)
-crf <arg> ตั้งค่าระดับคุณภาพสูงสุด ค่าที่ใช้ได้คือ 0-63 ยิ่งตัวเลขต่ำ คุณภาพก็ยิ่งสูง
-quality good -speed 0 ค่าเริ่มต้นและแนะนำสำหรับแอปพลิเคชันส่วนใหญ่ best เป็นเครื่องมือค้นคว้ามากกว่า โดยมีการปรับปรุงเล็กน้อยจาก -quality good -speed 0
-lossless โหมดไม่สูญเสีย

อัตราบิตโหมด Q : ตัวอย่าง FFmpeg

ตัวอย่างแรกเป็นการตั้งค่าโหมด Q ที่สุดขั้วและมีไว้เพื่อ การอธิบายเท่านั้น (แม้แต่การประมวลผลคลิป 120 วินาทีในตัวอย่างเหล่านี้ก็ ใช้เวลาหลายชั่วโมง และโดยปกติแล้วไฟล์เอาต์พุตที่สร้างขึ้นจะมีขนาดใหญ่กว่า แหล่งที่มาต้นฉบับมาก)

ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -g 1 -b:v 0 -crf 0 -quality good \
  -speed 0 -lossless 1 -c:a libvorbis Q_g_1_crf_0_120s_tears_of_steel_1080p.webm.webm

หากต้องการเปรียบเทียบผลของ -crf ตัวอย่างต่อไปนี้จะแตกต่างกันเฉพาะ -crf โปรดทราบว่าไม่ได้กำหนด -g ไว้ จึงจะใช้ค่าเริ่มต้นเป็น 240 และในทางปฏิบัติ -crf จะใช้ค่าเริ่มต้นเป็น 10 ดังนั้นเราจึงได้ผลลัพธ์เดียวกันโดยไม่ต้องรวมพารามิเตอร์ใดพารามิเตอร์หนึ่งในตัวอย่างที่ 2 จาก 3 ตัวอย่าง

ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 0 -crf 0 -quality good \
  -speed 0 -c:a libvorbis Q_crf_0_120s_tears_of_steel_1080p.webm
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 0 -crf 10 -quality good \
  -speed 0 -c:a libvorbis Q_crf_10_120s_tears_of_steel_1080p.webm
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 0 -crf 63 -quality good \
  -speed 0 -c:a libvorbis Q_crf_63_120s_tears_of_steel_1080p.webm

เอาต์พุตของตัวอย่างเหล่านี้มีขนาดแตกต่างกันบนดิสก์ เมื่อตั้งค่า -crf เป็น 0 ไฟล์มีขนาด 711.8 MB เมื่อตั้งค่า -crf เป็น 10 ไฟล์มีขนาด 125.3 MB และเมื่อตั้งค่า -crf เป็น 63 ไฟล์มีขนาด 4.5 MB กล่าวอย่างง่ายๆ คือ การดำเนินการนี้จะเน้นว่าเราได้ลดคุณภาพของไฟล์ที่เข้ารหัส VP9 ที่ได้โดยการเพิ่มค่าอาร์กิวเมนต์ -crf สรุปแบบเต็มของไฟล์เอาต์พุตทั้งหมดอยู่ใน ตารางผลลัพธ์ด้านล่าง

ตอนนี้เรามาเปรียบเทียบผลของการเปลี่ยนแปลงการตั้งค่า -g กัน

ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -g 1 -b:v 0 -quality good \
  -speed 0  -c:a libvorbis Q_g_1_120s_tears_of_steel_1080p.webm
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -g 240 -b:v 0 -quality good \
  -speed 0 -c:a libvorbis Q_g_240_120s_tears_of_steel_1080p.webm
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -g 480 -b:v 0 -quality good \
  -speed 0 -c:a libvorbis Q_g_480_120s_tears_of_steel_1080p.webm

เราสังเกตเห็นว่าการตั้งค่า -g 1 ทำให้เกิดไฟล์ขนาดใหญ่มาก ซึ่งมีขนาด 25.9 MB เปรียบเทียบกับ -g 240 (ตั้งค่าให้เหมือนกับค่าเริ่มต้นอย่างชัดเจน) ซึ่งทำให้ได้ไฟล์ขนาด 4.5 MB และ -g 480 ซึ่งทำให้ได้ไฟล์ขนาด 4.4 MB

CQ

CQ เป็นโหมดที่แนะนำสำหรับวิดีโอแบบไฟล์

แผนภูมิโหมด CQ

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

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

นอกจากนี้ เรายังต้องตั้งค่าเกณฑ์ตัวหาปริมาณด้วย ใน VP9 คุณสามารถเปลี่ยนเกณฑ์ ตัวหาปริมาณได้ตั้งแต่ 0 ลงไปจนถึง 63

พารามิเตอร์บรรทัดคำสั่ง FFmpeg ต่อไปนี้ใช้สำหรับโหมด CQ
ffmpeg
-b:v <arg> ตั้งค่าอัตราบิตเป้าหมาย (เช่น 500k)
-minrate <arg>
-maxrate <arg>
ตั้งค่าอัตราบิตต่ำสุดและสูงสุด
-crf <arg> ตั้งค่าระดับคุณภาพสูงสุด ค่าที่ใช้ได้คือ 0 ถึง 63 โดยตัวเลขที่ต่ำกว่าจะมีคุณภาพสูงกว่า
โหมดอัตราบิต CQ: ตัวอย่าง FFmpeg

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

ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 2000k \
  -minrate 1000k -maxrate 4000k -crf 10  -c:a libvorbis \
  CQ_4000_1000_crf_10_120s_tears_of_steel_1080p.webm

ในกรณีนี้ ไฟล์เอาต์พุตมีขนาด 20.2 MB บนดิสก์ ซึ่งเล็กกว่าการเข้ารหัสโหมด Q ในตัวอย่างด้านบนอย่างเห็นได้ชัด

ในทางตรงกันข้าม ตัวอย่างถัดไปเราได้จำกัดบิตเรตให้อยู่ในช่วงที่กำหนดไว้ใกล้เคียงกันมากขึ้น

ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 2000k \
  -minrate 1500k -maxrate 2500k -crf 10  -c:a libvorbis \
  CQ_2500_1500_crf_10_120s_tears_of_steel_1080p.webm

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

ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 1000k \
  -minrate 750k -maxrate 1400k -crf 10  -c:a libvorbis \
  CQ_1400_750_crf_10_120s_tears_of_steel_1080p.webm

ในตัวอย่างสุดท้ายนี้ เอาต์พุตมีขนาดลดลงอย่างมาก โดยลดลงเหลือ 13.2 MB ในดิสก์

VBR

ขอแนะนำให้ใช้โหมดอัตราบิตแบบแปรผัน (VBR) สำหรับการสตรีมไฟล์วิดีโอออนดีมานด์ ของเนื้อหาที่มีการเคลื่อนไหวสูง (เช่น กีฬา) เหมาะสำหรับการนำส่งที่อิงตาม HTTP

แผนภูมิโหมด VBR

ในโมเดล VBR ฉากแอ็กชันอาจได้รับการเข้ารหัสด้วยบิตเรตที่สูงกว่าฉากที่ "ง่ายกว่า" ซึ่งสอดคล้องกับคีย์เฟรม

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

นอกจากนี้ เรายังแนะนำให้ใช้ VP9 VBR ในการเข้ารหัสกีฬาและเนื้อหาอื่นๆ ที่มีการเคลื่อนไหวสูง ด้วย สำหรับเนื้อหาที่มีความซับซ้อนสูงเช่นนี้ VBR จะให้คุณภาพสูงขึ้นในช่วงที่มีการเคลื่อนไหวน้อย

พารามิเตอร์บรรทัดคำสั่ง FFmpeg ต่อไปนี้ใช้สำหรับโหมด VBR
ffmpeg
-quality good good คุณภาพเหมาะสำหรับวิดีโอออนดีมานด์
-speed <arg> สำหรับวิดีโอออนดีมานด์ ค่าที่ใช้ได้คือ 0-5 โดย 0 คือคุณภาพสูงสุด และ 5 คือคุณภาพต่ำสุด (สำหรับการไลฟ์สด ช่วงคือ 5-9 - ดู CBR ด้านล่าง)
โหมดอัตราบิต VBR: ตัวอย่าง FFmpeg
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 2000k \
  -minrate 1500k -maxrate 2500k -quality good -speed 0  -c:a libvorbis \
  VBR_good_0_120s_tears_of_steel_1080p.webm
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 2000k \
  -minrate 1500k -maxrate 2500k -quality good -speed 5  -c:a libvorbis \
  VBR_good_5_120s_tears_of_steel_1080p.webm

CBR

เราขอแนะนำให้ใช้โหมดอัตราบิตคงที่ (CBR) สำหรับการไลฟ์สดด้วย VP9

แผนภูมิโหมด CBR

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

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

พารามิเตอร์บรรทัดคำสั่ง FFmpeg ต่อไปนี้ใช้สำหรับโหมด CBR
ffmpeg
-quality realtime คุณภาพ realtime เหมาะสำหรับการไลฟ์สด
-speed <arg> สำหรับการสตรีมแบบสด ค่าที่ถูกต้องคือ 5-9 โดย 5 คือคุณภาพสูงสุด และ 9 คือคุณภาพต่ำสุด (สำหรับวิดีโอออนดีมานด์ ค่าเหล่านี้คือ 0 ถึง 5 ดู VBR ด้านบน)
-minrate <arg>
-maxrate <arg>
ตั้งค่าอัตราบิตขั้นต่ำและสูงสุด ** ต้องตั้งค่าเป็น-b:vค่าอัตราบิตเดียวกันสำหรับโหมด CBR**

กล่าวอย่างง่ายที่สุดคือ เรากำหนดบิตเรตเป้าหมาย บิตเรตขั้นต่ำ และบิตเรตสูงสุดให้มีค่าเท่ากัน และบอกตัวหาปริมาณว่าการดำเนินการนั้นต้องคำนึงถึงเวลา

โหมดอัตราบิต CBR: ตัวอย่าง FFmpeg

ตัวอย่างด้านล่างจะแสดงการตั้งค่าอัตราบิตเป็น 2 Mbps และ 500 kbps

ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 2000k \
  -minrate 2000k -maxrate 2000k -quality realtime -speed 5 -c:a libvorbis \
  CBR_2000_realtime_speed_5_120s_tears_of_steel_1080p.webm
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 2000k \
  -minrate 2000k -maxrate 2000k -quality realtime -speed 8 -c:a libvorbis \
  CBR_2000_realtime__8_120s_tears_of_steel_1080p.webm
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 500k \
  -minrate 500k -maxrate 500k -quality realtime -speed 5 -c:a libvorbis \
  CBR_500_realtime_speed_5_120s_tears_of_steel_1080p.webm
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 500k \
  -minrate 500k -maxrate 500k -quality realtime -speed 8 -c:a libvorbis \
  CBR_500_realtime_speed_8_120s_tears_of_steel_1080p.webm

ผลลัพธ์

การเข้ารหัสแต่ละรายการข้างต้นดำเนินการในระบบ Ubuntu Linux โดยมี ข้อกำหนดต่อไปนี้

  • โปรเซสเซอร์: 4x Intel(R) Core(TM) i5-6500 CPU @ 3.20GHz
  • หน่วยความจำ (RAM): 8060MB (ใช้ไป 1492MB)
  • กราฟิก: Intel HD Graphics 530 (Skylake GT2)
  • ระบบปฏิบัติการ: Ubuntu 16.04 LTS

ในทุกกรณี ไฟล์ต้นฉบับคือคลิปยาว 1 นาที 20 วินาที (1:20) ที่คัดมาจากTears Of Steel

ไฟล์ นาทีที่เข้ารหัส ขนาดไฟล์บนดิสก์
Q_g_1_crf_0_120s_tears_of_steel_1080p.webm 81 1.06GB
Q_crf_0_120s_tears_of_steel_1080p.webm 131 711.8MB
Q_crf_10_120s_tears_of_steel_1080p.webm 118 125.3MB
Q_crf_63_120s_tears_of_steel_1080p.webm 27 4.5MB
Q_g_1_120s_tears_of_steel_1080p.webm 51 25.9MB
Q_g_240_120s_tears_of_steel_1080p.webm 28 4.5MB
Q_g_480_120s_tears_of_steel_1080p.webm 10 4.4MB
CQ_4000_1000_crf_10_120s_tears_of_steel_1080p.webm 11 20.2MB
CQ_2500_1500_crf_10_120s_tears_of_steel_1080p.webm 9 24.1MB
CQ_1400_750_crf_10_120s_tears_of_steel_1080p.webm 50 13.2MB
VBR_good_0_120s_tears_of_steel_1080p.webm 3 23.4MB
VBR_good_5_120s_tears_of_steel_1080p.webm 4 23.9MB
CBR_2000_realtime_speed_5_120s_tears_of_steel_1080p.webm 2 24.8MB
CBR_2000_realtime_speed_8_120s_tears_of_steel_1080p.webm 1 21MB
CBR_500_realtime_speed_5_120s_tears_of_steel_1080p.webm 1 8.5MB
CBR_500_realtime_speed_8_120s_tears_of_steel_1080p.webm 1 7.1MB

เราสังเกตเห็นว่าการตั้งค่า -speed ที่สูงกว่า 5 จะเปลี่ยนความเร็วในการประมวลผล VP9 แม้ว่าการเพิ่มการหาปริมาณนี้จะมากพอสมควร (สังเกตได้จากเอฟเฟกต์ "การสั่น" ที่รุนแรงในอัตราบิตที่รวดเร็วและมีคุณภาพต่ำมาก) แต่ VP9 ก็ยังคงสร้างเอาต์พุต 1080p ที่อัตราบิตต่ำได้ดีมาก แม้ว่าจะเหมาะกับอุปกรณ์เคลื่อนที่ขนาดเล็กมากกว่าจอแสดงผลขนาดใหญ่ก็ตาม

ข้อควรพิจารณาสำหรับกรณีการใช้งานที่มีการปรับขนาด (เปลี่ยนขนาด)

โหมดบิตเรตของ VP9 ไม่ได้แยกกันอย่างชัดเจน และอาจใช้ร่วมกับอาร์กิวเมนต์และพารามิเตอร์อื่นๆ อีกมากมาย เพื่อกำหนดเป้าหมาย Use Case โดยเฉพาะ กรณีการใช้งานทั่วไปอย่างหนึ่งอาจเป็นการปรับขนาดมิติข้อมูลของวิดีโอเอาต์พุตเพื่อกำหนดเป้าหมายอุปกรณ์ที่เฉพาะเจาะจง

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

เพื่อเป็นตัวอย่าง เราได้ใช้ตัวอย่างจุดกึ่งกลางจากโหมดบิตเรตแต่ละโหมด และเพิ่มพารามิเตอร์การปรับขนาดใหม่

โหมด Q
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 0 -crf 10 -quality good \
  -speed 0 -vf scale=640x480 -c:a libvorbis 640x480_Q_crf_10_120s_tears_of_steel_1080p.webm
โหมด CQ
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 2000k \
  -minrate 1500k -maxrate 2500k -crf 10 -vf scale=640x480 -c:a libvorbis \
  640x480_CQ_crf_0_120s_tears_of_steel_1080p.webm
โหมด VBR
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 2000k \
  -minrate 1500k -maxrate 2500k -quality good -speed 5 -vf  scale=640x480 \
  -c:a libvorbis 640x480_VBR_good_5_120s_tears_of_steel_1080p.webm
โหมด CBR
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 2000k \
  -minrate 2000k -maxrate 2000k -quality realtime -speed 5 -vf  scale=640x480 \
  -c:a libvorbis 640x480_CBR_2000_realtime_5_120s_tears_of_steel_1080p.webm

ตารางผลลัพธ์สำหรับการปรับขนาด

ไฟล์ นาทีที่เข้ารหัส ขนาดไฟล์บนดิสก์
640x480_Q_crf_10_120s_tears_of_steel_1080p.webm 5 3.4MB
640x480_CQ_crf_0_120s_tears_of_steel_1080p.webm 2 22.4MB
640x480_VBR_good_5_120s_tears_of_steel_1080p.webm 1 22.6MB
640x480_CBR_2000_realtime_5_120s_tears_of_steel_1080p.webm 4 23MB

เพื่อให้เปรียบเทียบได้ง่าย คำสั่ง FFmpeg เหล่านี้จึงเป็นคำสั่งเดียวกันกับตัวอย่างก่อนหน้า แต่ไม่มีการปรับขนาด

ไฟล์ นาทีที่เข้ารหัส ขนาดไฟล์บนดิสก์
Q_crf_10_120s_tears_of_steel_1080p.webm 56 126MB
CQ_2500_1500_crf_10_120s_tears_of_steel_1080p.webm 9 24.1MB
VBR_good_5_120s_tears_of_steel_1080p.webm 4 23.9MB
CBR_2000_realtime_speed_5_120s_tears_of_steel_1080p.webm 1 24.8MB

ดังที่คุณจะเห็นว่าขนาดไฟล์เอาต์พุตของแต่ละรายการลดลงอย่างเห็นได้ชัด และ แม้ว่าตัวอย่างส่วนใหญ่จะใช้เวลาในการเข้ารหัสน้อยลง แต่ในโหมด Q เวลาในการเข้ารหัสกลับเพิ่มขึ้น การบีบอัดวิดีโอ "มากขึ้น" ต้องใช้ความพยายามมากขึ้น ดังนั้นแม้ว่าไฟล์เอาต์พุตควรจะมีขนาดเล็กลงหากไม่มีข้อจำกัดด้านคุณภาพ (เช่น ในโหมด Q) แต่การดำเนินการนี้อาจทำให้ใช้เวลาในการสร้างไฟล์เอาต์พุตนานขึ้น อย่าคิดว่าไฟล์ขนาดเล็กจะส่งได้เร็วกว่าเสมอ ในกระบวนการเข้ารหัส

การปรับขนาดและการลดอัตราบิตร่วมกัน

การเปรียบเทียบสุดท้ายคือตัวอย่างต่อไปนี้จะเรียกใช้ตัวอย่าง CQ, VBR และ CBR ของการปรับขนาดอีกครั้ง แต่ครั้งนี้เราจะจำกัดบิตเรตเป้าหมายไว้ที่ระดับ 500 kbps ซึ่งประมาณ 1 ใน 4 (สอดคล้องกับการลดขนาดรูปภาพ)

โหมด CQ
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 500k \
  -minrate 350k -maxrate 550k -crf 10 -vf scale=640x480 -c:a libvorbis \
  640x480_CQ_crf_0_120s_tears_of_steel_1080p.webm
โหมด VBR
ffmpeg -i "120s_tears_of_steel_1080p.webm" -c:v libvpx-vp9 -b:v 500k \
  -minrate 350k -maxrate 500k -quality good -speed 5 -vf scale=640x480 -c:a libvorbis \
  640x480_VBR_good_5_120s_tears_of_steel_1080p.webm
โหมด CBR
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 500k \
  -minrate 500k -maxrate 500k -quality realtime -speed 5 -vf scale=640x480 -c:a libvorbis \
  640x480_CBR_2000_realtime_5_120s_tears_of_steel_1080p.webm

ตารางผลลัพธ์สำหรับการปรับขนาดและลดบิตเรตเป้าหมาย

ไฟล์ นาทีที่เข้ารหัส ขนาดไฟล์บนดิสก์
640x480_CQ_500_crf_0_120s_tears_of_steel_1080p.webm 1 7MB
640x480_VBR_500_good_5_120s_tears_of_steel_1080p.webm 1 7MB
640x480_CBR_500_realtime_5_120s_tears_of_steel_1080p.webm 1 7.6MB

ดังที่เห็นได้ว่าเราได้ลดเวลาในการเข้ารหัสให้สั้นลงไปอีก