โหมดอัตราบิต VP9 โดยละเอียด
บทนำ
แม้ว่าเราจะให้รายละเอียดระดับสูงเกี่ยวกับโหมดบิตเรตในหน้าการเข้ารหัสพื้นฐาน แต่โหมดเหล่านั้นจะใช้ได้กับโหมด CQ (คุณภาพแบบจำกัด) เท่านั้น
เอกสารนี้จะอธิบายวิธีอื่นๆ ที่คุณสามารถปรับอัตราบิตของ VP9 เพื่อ เพิ่มประสิทธิภาพสำหรับสถานการณ์ต่างๆ ตัวอย่างด้านล่างใช้ FFmpeg
การบีบอัด
เทคโนโลยีการบีบอัดวิดีโอ เช่น VP9 มีเป้าหมายเพื่อลดปริมาณข้อมูล ที่จำเป็นในการสื่อภาพและภาพเคลื่อนไหวที่เข้าใจได้ไปยังผู้ใช้ปลายทาง
เทคนิคสำคัญอย่างหนึ่งที่ใช้เพื่อให้บรรลุเป้าหมายนี้คือการหาปริมาณ Quantizer จะลดความซับซ้อนทางคณิตศาสตร์ขององค์ประกอบต่างๆ ที่แปลงเป็นดิจิทัลของรูปภาพ เช่น อาจลดช่วงสีที่ใช้ และอาจใช้ฟังก์ชันทางคณิตศาสตร์ กับข้อมูลเพื่อ "ปรับ" ความละเอียดที่ขาดหายไป ภายในช่วงสีที่ลดลง ฟังก์ชันดังกล่าวมีอยู่มากมาย
การหาปริมาณ (หรือ "Q") มีการอธิบายไว้เป็นอย่างดีในบทความใน Wikipedia
ใน VP9 การหาปริมาณจะดำเนินการกับค่าสัมประสิทธิ์การแปลง ซึ่งจะช่วยลดบิตเรตที่จำเป็นเพื่อรักษาคุณภาพที่รับรู้ได้ด้วยการเพิ่มลงในการเข้ารหัส
ท้ายที่สุดแล้ว เมื่อมีการหาปริมาณมากขึ้น (ค่า Q สูงขึ้น) รายละเอียดจะหายไปและคุณภาพจะต่ำลง แต่ระบบจะใช้ข้อมูลน้อยลงในการจัดเก็บเฟรม ในกรณีส่วนใหญ่ ตัวเข้ารหัส VP9 จะบรรลุเป้าหมายบิตเรตโดยการเปลี่ยน Q เมื่อเวลาผ่านไป ขึ้นอยู่กับความซับซ้อนของแต่ละเฟรม
การเพิ่มประสิทธิภาพกรณีการใช้งาน
หากต้องการอนุญาตให้ผู้ใช้ "ปรับ" การบีบอัด VP9 ให้ตรงกับความต้องการเฉพาะของตน คุณสามารถปรับสมดุลของคุณภาพและบิตเรตในขณะที่บีบอัดครั้งแรกผ่านอินเทอร์เฟซการเขียนโปรแกรมต่างๆ ได้
ตัวเข้ารหัสมีการเลือกระหว่างความเร็ว คุณภาพ และบิตเรต
หากผู้ใช้เน้นคุณภาพ ก็ต้องเตรียมพร้อมสำหรับเวลาในการเข้ารหัสที่นานขึ้น หรือจัดหาทรัพยากรการประมวลผลที่เร็วขึ้นและมากขึ้น
หากผู้ใช้มุ่งเน้นที่การทำให้ไฟล์เอาต์พุตที่เข้ารหัส VP9 มีขนาดเล็กและ ส่งได้อย่างรวดเร็ว ผู้ใช้จะต้องเตรียมพร้อมที่จะลดระยะเวลา ที่ตัวหาปริมาณสามารถประมวลผลรูปภาพได้ ซึ่งจะส่งผลให้ รายละเอียดที่ตัวหาปริมาณสามารถทำงานได้ลดลง
หากผู้ใช้มุ่งเน้นที่ความเร็วในการนำส่งอย่างเดียว (เช่น ในการถ่ายทอดสด ทางเว็บหรือการประชุมทางวิดีโอแบบ 2 ทาง) การหาปริมาณอาจขึ้นอยู่กับข้อจำกัดของอัตราที่สามารถส่งไบต์ของข้อมูลที่ใช้ได้ผ่านเครือข่าย (นั่นคือ "บิตเรต")
ตัวเลือกที่ถูกต้องจะขึ้นอยู่กับกรณีการใช้งานแต่ละกรณี VP9 รองรับการกำหนดค่าที่ตรงไปตรงมาใน "โหมดบิตเรต" 4 โหมด เพื่อให้ปรับสมดุลนี้ให้เหมาะกับกรณีการใช้งานได้ง่ายขึ้น
โหมดอัตราบิตของ VP9
มาเริ่มกันด้วยการดูโหมดบิตเรตหลักที่ VP9 รองรับ
โหมด | |
---|---|
ตัวหาปริมาณคงที่ (Q) | ช่วยให้คุณระบุค่าตัวหาปริมาณคงที่ได้ บิตเรตจะแตกต่างกันไป |
คุณภาพแบบจำกัด (CQ) | ช่วยให้คุณกำหนดระดับคุณภาพสูงสุดได้ คุณภาพอาจแตกต่างกันไปภายในพารามิเตอร์บิตเรต |
อัตราบิตแปรผัน (VBR) | ปรับสมดุลคุณภาพและอัตราบิตในช่วงระยะเวลาหนึ่งภายในข้อจำกัดด้านอัตราบิต |
อัตราบิตคงที่ (CBR) | พยายามรักษาบิตเรตให้ค่อนข้างคงที่ในขณะที่คุณภาพแตกต่างกันไป |
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 ช่วยให้ตัวเข้ารหัสรักษาคุณภาพในระดับที่เหมาะสมในฉากที่ยาวและง่ายขึ้น (โดยไม่สูญเสียบิต) ขณะเดียวกันก็จัดสรรบิตเพิ่มเติมสำหรับลำดับที่ซับซ้อน
อย่างไรก็ตาม เรายังคงต้องจำกัดกระบวนการนี้ด้วยการระบุช่วงบน มิฉะนั้นก็อาจไม่มีการบีบอัดเลย นอกจากนี้ เรายังตั้งค่าช่วงที่ต่ำกว่าได้ด้วย ซึ่งแม้ว่าภาพจะเป็นสีดำและกระบวนการเข้ารหัสแทบจะ ไม่มีส่วนเกี่ยวข้องใดๆ เราก็จะยังคงส่งข้อมูลนั้นต่อไป แต่อาจมีประสิทธิภาพน้อยกว่า ที่เราทำได้ แต่ผลลัพธ์สุดท้ายคือแม้แต่สีดำก็จะไม่ถูกบีบอัดอย่างมากและดู "ดำมาก"
นอกจากนี้ เรายังต้องตั้งค่าเกณฑ์ตัวหาปริมาณด้วย ใน 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 จำนวนมาก ผู้ชมทุกคนที่ใช้ระบบจะได้รับประโยชน์
นอกจากนี้ เรายังแนะนำให้ใช้ 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 จะกำหนดบิตเรตสูงสุดเป็น "ขีดจำกัดสูงสุด" ซึ่งหมายความว่า กระบวนการเข้ารหัสไม่สามารถสร้างข้อมูลในอัตราที่เครือข่ายรับไม่ได้
ตัวอย่างเช่น สำหรับสตรีมการสื่อสารแบบเรียลไทม์ (การประชุมทางวิดีโอ) สิ่งสำคัญคือแอปพลิเคชันการเข้ารหัสต้องไม่ส่งข้อมูลไปยังเครือข่ายมากเกินกว่าที่เครือข่ายจะรองรับได้ หากเป็นเช่นนั้น ปัญหาการซิงค์เสียง/วิดีโอหรือเฟรมค้างจะส่งผลต่อประสบการณ์ของผู้ใช้มากกว่าประสิทธิภาพการบีบอัดที่ลดลง การกำหนดเพดานสูงสุดจะช่วยให้ 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 |
ดังที่เห็นได้ว่าเราได้ลดเวลาในการเข้ารหัสให้สั้นลงไปอีก