การตั้งค่าที่แนะนำ
ส่วนนี้แสดงคำแนะนำในการเข้ารหัส VP9 สำหรับโปรไฟล์ทั่วไปต่างๆ
- วิดีโอที่ได้รับการเพิ่มประสิทธิภาพสูงสำหรับเว็บและอุปกรณ์เคลื่อนที่ (VOD)
- การเผยแพร่เนื้อหาระดับพรีเมียม (VOD)
- กีฬา แอนิเมชัน เนื้อหา 10 บิต (VOD)
- การเข้ารหัสแบบสด
- WebRTC
บทนำ
เมื่อเข้ารหัสวิดีโอ มีข้อควรพิจารณาหลายประการ ดังนี้
- คุณกำลังสร้างสื่อเวอร์ชันเดียวหรือหลายเวอร์ชันที่มีอัตราบิตและความละเอียดแตกต่างกัน
- คุณกำลังสร้างวิดีโอสตรีมแบบสดหรือไฟล์วิดีโอแบบออนดีมานด์
- คุณเข้ารหัสสื่อประเภทใด สื่อนั้นมีการเคลื่อนไหวมากไหม รายละเอียด ภาพเคลื่อนไหว
- คุณเข้ารหัสเพื่อคุณภาพสูงสุด (เช่น เนื้อหาพรีเมียม) หรือความเร็ว (เช่น การประชุมทางเว็บ)
ส่วนนี้เริ่มต้นด้วยการตั้งค่าสำหรับไฟล์วิดีโอออนดีมานด์พื้นฐาน จากนั้นจะ ให้คำแนะนำสำหรับคำถามทั้งหมดเหล่านี้
การตั้งค่าพื้นฐาน
อัตราบิตการเข้ารหัส
เราขอแนะนำให้อัตราบิตต่อไปนี้เป็นพื้นฐานสำหรับการเผยแพร่บนเว็บและอุปกรณ์เคลื่อนที่ คำแนะนำเหล่านี้จะลดบิตเรตลง ซึ่งจะทำให้วิดีโอมีคุณภาพ เหมาะสำหรับการเผยแพร่บนเว็บและอุปกรณ์เคลื่อนที่สำหรับผู้บริโภค โดยให้ถือว่าคำแนะนำเหล่านี้เป็นบิตเรต "ต่ำ" ที่ยังคงให้คุณภาพที่เหมาะสมได้
บิตเรตเป้าหมายที่แนะนำ
ขนาด/อัตราเฟรม | อัตราบิตเฉลี่ย (VOD, kbps) | อัตราบิตเฉลี่ย (สด, kbps) |
---|---|---|
320x240p @ 24,25,30 | 150 | 250 |
640x360p @ 24,25,30 | 276 | 386 |
640x480p @ 24,25,30 | 512 (LQ), 750 (MQ) | 720 (LQ), 1024 (MQ) |
1280x720p @ 24,25,30 | 1024 | 1440 |
1280x720p @ 50,60 | 1,800 | 2500 |
1920x1080p @ 24,25,30 | 1,800 | 2500 |
1920x1080p @ 50,60 | 3000 | 4,200 |
2560x1440p @ 24,25,30 | 6000 | 8400 |
2560x1440p @ 50,60 | 9000 | 12600 |
3840x2160p @ 24,25,30 | 12000 | 16800 |
3840x2160p @ 50,60 | 18000 | 25200 |
รูปที่ 2ก: อัตราบิตเป้าหมาย
การตั้งค่าการเข้ารหัส VOD
การตั้งค่าสำหรับเนื้อหาส่วนใหญ่
สำหรับเนื้อหาส่วนใหญ่ เราขอแนะนำให้ใช้โหมดคุณภาพแบบจำกัด (CQ) ที่มี ขีดจำกัดอัตราบิต วิดีโอส่วนใหญ่มีทั้งฉากที่มีการเคลื่อนไหวสูง (เช่น ฉากแอ็กชัน) และฉากที่มีรายละเอียดน้อย (เช่น การสนทนา) โหมด CQ ช่วยให้ ตัวเข้ารหัสรักษาระดับคุณภาพที่เหมาะสมในฉากที่ยาวและง่ายขึ้น (โดยไม่สูญเสียบิต) ขณะเดียวกันก็จัดสรรบิตเพิ่มเติมสำหรับลำดับที่ซับซ้อน
นอกจากนี้ เรายังขอแนะนำให้กำหนดช่วงอัตราบิตตั้งแต่ 50% ถึง 150% ของเป้าหมาย โดยใช้ค่าคุณภาพตามที่ระบุไว้ในแผนภูมิด้านล่าง โหมดนี้ต้องใช้การเข้ารหัสแบบ 2 รอบ และขอแนะนำให้ใช้การตั้งค่าที่เร็วกว่าสำหรับ HD ขึ้นไป ตามที่ระบุไว้ด้านล่าง
การตั้งค่าโปรแกรมเปลี่ยนไฟล์สำหรับการเข้ารหัส CQ
ความสูงของเฟรม | คุณภาพเป้าหมาย (CQ) | โหมดการเข้ารหัส |
---|---|---|
240 | 37 | TWO_PASS_MEDIUM |
360 | 36 | TWO_PASS_MEDIUM |
480 | 34 (คุณภาพต่ำ) หรือ 33 (คุณภาพปานกลาง) | TWO_PASS_MEDIUM |
720 | 32 | TWO_PASS_FAST |
1080 | 31 | TWO_PASS_FAST |
1440 | 24 | TWO_PASS_FAST |
2160 | 15 | TWO_PASS_FAST |
รูปที่ 2ข: การตั้งค่าที่แนะนำสำหรับ CQ
สุดท้าย เราขอแนะนำให้มีวิดีโอ 240 เฟรมระหว่างคีย์เฟรม (สำหรับเนื้อหา 30fps ซึ่งจะเท่ากับ 8 วินาที) คีย์เฟรมคือเฟรมวิดีโอที่ เพียงพอในตัว ไม่ได้อาศัยเฟรมอื่นๆ ในการแสดงผล (ดูคำอธิบายโดยละเอียดเพิ่มเติมได้ที่โครงสร้าง GOP ) สำหรับการเล่นบนเว็บและอุปกรณ์เคลื่อนที่ เราอนุญาตให้มี ระยะห่างที่เหมาะสมระหว่างคีย์เฟรม เนื่องจากจะช่วยให้ตัวเข้ารหัสเลือกตำแหน่ง "ดีที่สุด" ของคีย์เฟรมเพื่อเพิ่มคุณภาพได้สูงสุด
ตัวอย่างพารามิเตอร์บรรทัดคำสั่ง: วิดีโอ 640x360
จากข้อมูลข้างต้น วิดีโอ 360p ควรมีค่าแนะนำดังนี้
- ระดับ CQ ที่ 36 (ดูรูปที่ 2b)
- อัตราบิตเป้าหมายที่ 276 Kbps (ดูรูปที่ 2ก)
- อัตราบิตขั้นต่ำที่อนุญาตคือ 138 kbps (50% ของเป้าหมาย)
- อัตราบิตสูงสุดที่อนุญาตคือ 414 kbps (150% ของเป้าหมาย)
- ระยะห่างคีย์เฟรมสูงสุด 240 วินาที
- โปรไฟล์ "ปานกลาง" แบบ 2 รอบ
ซึ่งจะทำให้มีพารามิเตอร์บรรทัดคำสั่งต่อไปนี้สำหรับ libvpx และ FFmpeg
libvpx
--end-usage=cq --cq-level=36 --target-bitrate=276 --minsection-pct=50 \
--maxsection-pct=150 --kf-max-dist=240 --passes=2 --good --cpu-used=2
FFmpeg
-crf 36 -b:v 276k -minrate 138k -maxrate 414k -g 240 -good -speed 2
การตั้งค่าเนื้อหาพรีเมียม
ในตัวอย่างข้างต้น เราใช้การตั้งค่าการเข้ารหัสที่ค่อนข้างเร็วเพื่อสร้าง สตรีมวิดีโออย่างมีประสิทธิภาพ อย่างไรก็ตาม สำหรับเนื้อหาบางอย่าง (เช่น ภาพยนตร์พรีเมียม) การใช้เวลาในการเข้ารหัสมากขึ้นจะช่วยให้ได้เอาต์พุตที่มีคุณภาพสูงขึ้น
สำหรับเนื้อหาระดับพรีเมียม เราขอแนะนำให้ใช้การตั้งค่าเดียวกันกับด้านบน แต่มี ค่าที่กำหนดล่วงหน้าที่แตกต่างกัน โดยสั่งให้ตัวเข้ารหัสใช้เวลามากขึ้นในการเพิ่มประสิทธิภาพเพื่อ คุณภาพ
โหมดการเข้ารหัสเนื้อหาระดับพรีเมียมและพารามิเตอร์บรรทัดคำสั่ง
ความสูงของเฟรม | โหมดการเข้ารหัส | libvpx | FFmpeg |
---|---|---|---|
240 | TWO_PASS_VERY_SLOW |
--good --cpu-used 0 |
-good -speed 0 |
360 | TWO_PASS_VERY_SLOW |
--good --cpu-used 0 |
-good -speed 0 |
480 | TWO_PASS_VERY_SLOW |
--good --cpu-used 0 |
-good -speed 0 |
720 | TWO_PASS_SLOW |
--good --cpu-used 1 |
-good -speed 1 |
1080 | TWO_PASS_MEDIUM |
--good --cpu-used 2 |
-good -speed 2 |
1440 | TWO_PASS_MEDIUM |
--good --cpu-used 2 |
-good -speed 2 |
2160 | TWO_PASS_MEDIUM |
--good --cpu-used 2 |
-good -speed 2 |
รูปที่ 2ค: โหมดการเข้ารหัสเนื้อหาระดับพรีเมียม
การตั้งค่าเนื้อหาที่มีการเคลื่อนไหวสูง เช่น กีฬา
เราขอแนะนำให้ใช้การเข้ารหัส VBR สำหรับเนื้อหากีฬา กีฬาโดยทั่วไปมักมีการเคลื่อนไหวและความซับซ้อนสูงในระดับที่ค่อนข้างสม่ำเสมอ และการใช้ VBR จะช่วยให้ได้คุณภาพสูงขึ้นในช่วงที่มีการเคลื่อนไหวน้อยกว่าการเข้ารหัส QP
สำหรับบรรทัดคำสั่ง ความแตกต่างหลักระหว่างโหมด QP กับ VBR คือ คุณจะไม่ระบุระดับ CQ มิฉะนั้นการตั้งค่าที่แนะนำจะเหมือนกัน
ตัวอย่างพารามิเตอร์บรรทัดคำสั่ง VBR: วิดีโอ 640x360
libvpx
--end-usage=vbr --target-bitrate=276 --minsection-pct=50 --maxsection-pct=150 \
--kf-max-dist=240 --passes=2 --good --cpu-used=2
FFmpeg
-b:v 276k -minrate 138k -maxrate 414k -g 240 -good -speed 2
การตั้งค่าภาพเคลื่อนไหวและเกม
การตั้งค่าเนื้อหาที่มีเสียงรบกวน / คุณภาพต่ำ
สำหรับเนื้อหาที่มีสัญญาณรบกวน เราขอแนะนำให้เพิ่มจำนวนและความแรงของเฟรม alt-ref เฟรมอ้างอิงสำรองคือเฟรมที่ "มองไม่เห็น" ซึ่งไม่เคยแสดงต่อผู้ใช้ แต่ใช้เป็นข้อมูลอ้างอิงเมื่อสร้างเฟรมสุดท้าย (คุณอ่านข้อมูลเพิ่มเติมได้ที่นี่)
ขอแนะนำให้ใช้พารามิเตอร์ต่อไปนี้เพื่อสั่งให้ VP9 ใช้เฟรม alt-ref มากขึ้น
libvpx
--auto-alt-ref=1 --lag-in-frames-16 --arnr-maxframes=5 --arnr-strength=3
FFmpeg
การเข้ารหัส 10 บิต/HDR
สำหรับการเข้ารหัส 10 บิต คุณจะต้องใช้ VP9 โปรไฟล์ 2 การเข้ารหัสที่ 10 บิต ไม่จำเป็นต้องใช้บิตเพิ่มเติม ดังนั้นพารามิเตอร์ที่เหลือจึงเหมือนเดิม
libvpx
--profile=2
FFmpeg
-profile 2
การตั้งค่าการเข้ารหัสแบบเรียลไทม์
สตรีมมิงแบบสด
โดยปกติแล้ว การเข้ารหัสแบบสดจะทำเป็น CBR ซึ่งจำกัดความสามารถของตัวเข้ารหัส ในการเพิ่มคุณภาพสูงสุด ด้วยเหตุนี้ เราจึงจะใช้บิตเรตที่สูงขึ้นตามที่ระบุในรูปที่ 2ก
สำหรับการเข้ารหัสแบบสด เรายังต้องการเพิ่มการทำงานแบบหลายเธรดให้ได้สูงสุดด้วย โดยทำดังนี้
- อนุญาตให้ VP9 แยกวิดีโอออกเป็นคอลัมน์ (ซึ่งต้องมีความกว้างไม่น้อยกว่า 256 พิกเซล และต้องเป็นเลขยกกำลังของ 2)
- การระบุให้ VP9 ใช้กำลัง CPU มากขึ้น ตารางต่อไปนี้แสดง คำแนะนำสำหรับแต่ละความละเอียด
คำแนะนำในการแบ่งไทล์และการแยกเธรด
การตั้งค่าโปรแกรมเปลี่ยนไฟล์สำหรับการเข้ารหัส CQ
ขนาดเฟรม | จำนวนคอลัมน์ไทล์ | จำนวนเธรด |
---|---|---|
320x240 | 1 | 2 |
640x360 | 2 | 4 |
640x480 | 2 | 4 |
1280x720 | 4 | 8 |
1920x1080 | 4 | 8 |
2560x1440 | 8 | 16 |
3840x2160 | 8 | 16 |
รูปที่ 2ง. การแบ่งและการแยกเธรดที่แนะนำสำหรับการเข้ารหัสแบบสด
การเข้ารหัสแบบเรียลไทม์จะกำหนดกำหนดเวลาเป็น "เรียลไทม์" เพื่อให้มั่นใจในประสิทธิภาพ และจะสั่งให้เฟรม alt-ref ไม่มองไปในอนาคต (ซึ่งจะ ทำให้เกิดเวลาในการตอบสนอง)
จากข้อมูลนี้ คำแนะนำสำหรับวิดีโอสด 360p มีดังนี้
- CBR, อัตราบิตเป้าหมาย 386kbps (ดูรูปที่ 2ก)
- 2 คอลัมน์ของไทล์ (ดูรูปที่ 2 ง.)
- 4 เธรด (ดูรูปที่ 2 ง.)
- ประสิทธิภาพแบบเรียลไทม์
- ไม่มีเวลาในการตอบสนองเนื่องจากเฟรมสำรอง (ไม่มีเฟรมแล็ก)
ซึ่งจะทำให้มีพารามิเตอร์บรรทัดคำสั่งต่อไปนี้สำหรับ libvpx และ FFmpeg
libvpx
--end-usage=cbr --target-bitrate=386 --cpu-used=4 --tile-columns=2 --rt --lag-in-frames=0
FFmpeg
ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 -r 29.97 -b:v 386k \
-minrate 386k -maxrate 386k -c:v libvpx-vp9 -c:a libopus output.webm