ส่วนนี้แสดงคำแนะนำในการเข้ารหัส 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 ควรมีค่าแนะนำดังนี้

  1. ระดับ CQ ที่ 36 (ดูรูปที่ 2b)
  2. อัตราบิตเป้าหมายที่ 276 Kbps (ดูรูปที่ 2ก)
  3. อัตราบิตขั้นต่ำที่อนุญาตคือ 138 kbps (50% ของเป้าหมาย)
  4. อัตราบิตสูงสุดที่อนุญาตคือ 414 kbps (150% ของเป้าหมาย)
  5. ระยะห่างคีย์เฟรมสูงสุด 240 วินาที
  6. โปรไฟล์ "ปานกลาง" แบบ 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ก

สำหรับการเข้ารหัสแบบสด เรายังต้องการเพิ่มการทำงานแบบหลายเธรดให้ได้สูงสุดด้วย โดยทำดังนี้

  1. อนุญาตให้ VP9 แยกวิดีโอออกเป็นคอลัมน์ (ซึ่งต้องมีความกว้างไม่น้อยกว่า 256 พิกเซล และต้องเป็นเลขยกกำลังของ 2)
  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 มีดังนี้

  1. CBR, อัตราบิตเป้าหมาย 386kbps (ดูรูปที่ 2ก)
  2. 2 คอลัมน์ของไทล์ (ดูรูปที่ 2 ง.)
  3. 4 เธรด (ดูรูปที่ 2 ง.)
  4. ประสิทธิภาพแบบเรียลไทม์
  5. ไม่มีเวลาในการตอบสนองเนื่องจากเฟรมสำรอง (ไม่มีเฟรมแล็ก)

ซึ่งจะทำให้มีพารามิเตอร์บรรทัดคำสั่งต่อไปนี้สำหรับ 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

การเข้ารหัส VP9 แบบสดสำหรับ DASH/YouTube

การเข้ารหัส WebRTC