วัตถุประสงค์

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

คำแนะนำเหล่านี้ออกแบบมาเพื่อเป้าหมายต่อไปนี้

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

คำแนะนำเหล่านี้จะไม่ทำสิ่งต่อไปนี้

  • การเข้ารหัสไลฟ์สด
  • เพิ่มประสิทธิภาพสำหรับเนื้อหาบางประเภท (เช่น ฟุตเทจกีฬาที่มีการเคลื่อนไหวสูง)
  • กำหนดการตั้งค่าสำหรับข้อกำหนดของอุปกรณ์หรือเครือข่ายที่เฉพาะเจาะจง

การเข้ารหัสความละเอียดเดียว

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

หากคุณกำลังสร้างความละเอียดเดียว 640x480 เป็นตัวเลือกที่ปลอดภัยสำหรับอุปกรณ์เว็บและอุปกรณ์เคลื่อนที่หลากหลาย พารามิเตอร์บรรทัดคำสั่ง FFmpeg ต่อไปนี้ ช่วยให้คุณสร้างไฟล์ความละเอียดเดียวที่ 750kbps ได้

-vf scale=640x480 -b:v 750k -quality good -speed 0 -crf 33 \
  -c:v libvpx-vp9 -c:a libopus output.webm

การเข้ารหัสหลายความละเอียด

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

การเข้ารหัสวิดีโอแบบหลายความละเอียดมักใช้ในการสตรีมแบบปรับอัตราบิต ซึ่งโปรแกรมเล่นวิดีโอจะสลับความละเอียดแบบเรียลไทม์ตาม แบนด์วิดท์ของผู้ใช้ ตัวอย่างเช่น Shaka Player ช่วยให้คุณเล่น การเข้ารหัสหลายความละเอียดได้ โดยการเข้ารหัส VP9 แต่ละรายการจะอยู่ในไฟล์แยกต่างหาก และ ไฟล์ Manifest ของ DASH จะให้ข้อมูลเกี่ยวกับการเข้ารหัสแต่ละรายการ

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

การตั้งค่าทั้งหมดด้านล่างนี้ใช้กับไฟล์แต่ละไฟล์ได้ที่ความละเอียดต่างๆ เมื่อรวมกันแล้วจะให้ชุดการตั้งค่าที่ครอบคลุมซึ่งเหมาะสำหรับการสตรีมแบบปรับอัตราการส่งข้อมูล โปรดทราบ ว่าเวอร์ชัน 640x480 มี 2 เวอร์ชัน ได้แก่ เวอร์ชันคุณภาพต่ำ (LQ) และเวอร์ชันคุณภาพปานกลาง (MQ)

อัตราบิต

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

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

สำหรับตัวอย่างข้างต้น เราขอแนะนำให้ตั้งค่าอัตราบิตขั้นต่ำที่ 50% ของอัตราบิตเป้าหมาย และตั้งค่าสูงสุดที่ 145% ของเป้าหมาย

ขนาดเฟรม/อัตราเฟรม อัตราบิตเป้าหมาย (VOD, kbps) อัตราบิตขั้นต่ำ (50%) อัตราบิตสูงสุด (145%)
320x240p @ 24,25,30 150 75 218
640x360p @ 24,25,30 276 138 400
640x480p @ 24,25,30 512 (LQ), 750 (MQ) 256 (LQ) 375 (MQ) 742 (LQ) 1088 (MQ)
1280x720p @ 24,25,30 1024 512 1485
1280x720p @ 50,60 1,800 900 2610
1920x1080p @ 24,25,30 1,800 900 2610
1920x1080p @ 50,60 3000 1,500 4350
2560x1440p @ 24,25,30 6000 3000 8700
2560x1440p @ 50,60 9000 4500 13050
3840x2160p @ 24,25,30 12000 6000 17400
3840x2160p @ 50,60 18000 9000 26100

รูปที่ 2ก: อัตราบิตของ VOD ที่แนะนำ

ใน FFmpeg คุณจะควบคุมบิตเรตได้ด้วยคำสั่งต่อไปนี้

FFmpeg
-b:v <arg> ตั้งค่าอัตราบิต (เช่น 500k)
-minrate <arg>
-maxrate <arg>
ตั้งค่าอัตราบิตต่ำสุดและสูงสุด

เช่น เมื่อเข้ารหัสเนื้อหาขนาด 640x480 คุณอาจใช้บรรทัดคำสั่ง -b:v 750k -minrate 375 -maxrate 1088

คุณภาพ

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

ความสูงของเฟรม คุณภาพเป้าหมาย (CQ)
240 37
360 36
480 34 (LQ) หรือ 33 (MQ)
720 32
1080 31
1440 24
2160 15

ใน FFmpeg คุณภาพจะได้รับการตั้งค่าด้วยคำสั่ง -crf เช่น หากต้องการตั้งค่า คุณภาพเป็น 33 คุณจะต้องใช้คำสั่ง -crf 33

การเข้ารหัสแบบหลายรอบและความเร็วในการเข้ารหัส

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

เมื่อเข้ารหัสไฟล์ VP9 ใน FFmpeg เราขอแนะนำให้ตั้งค่าพารามิเตอร์ -quality เป็น good จากนั้นตั้งค่าความเร็วของการส่งผ่านรอบแรกและรอบที่ 2 ตามตารางด้านล่างด้วยพารามิเตอร์ -speed ซึ่งจะช่วยให้ เวลาในการเข้ารหัสและคุณภาพของเอาต์พุตมีความสมดุลที่ดี

ความสูงของเฟรม ความเร็ว (การส่งผ่านครั้งแรก) ความเร็ว (รอบที่ 2)
240 4 1
360 4 1
480 4 1
720 4 2
1080 4 2
1440 4 2
2160 4 2

เช่น สตริงการเข้ารหัสรอบแรกใน FFmpeg อาจมี -quality good -speed 4

ระยะห่างคีย์เฟรม

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

ใน FFmpeg การเว้นระยะคีย์เฟรมจะควบคุมด้วยคำสั่ง -g ซึ่งระบุ จำนวนเฟรม สำหรับเฟรม 240 เฟรม ค่านี้จะเป็น -g 240

คำแนะนำในการแบ่งไทล์และการแยกเธรด

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

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

เราขอแนะนำให้ใช้การตั้งค่าต่อไปนี้สำหรับการแบ่งไทล์และการแยกเธรดที่ความละเอียดต่างๆ

ขนาดเฟรม จำนวนคอลัมน์ไทล์ จำนวนเธรด
320x240 1 (-tile-columns 0) 1
640x360 2 (-tile-columns 1) 2
640x480 2 (-tile-columns 1) 2
1280x720 4 (-tile-columns 2) 4
1920x1080 4 (-tile-columns 2) 4
2560x1440 8 (-tile-columns 3) 8
3840x2160 8 (-tile-columns 3) 8

ใน FFmpeg คุณสามารถควบคุมจำนวนไทล์ได้ด้วยพารามิเตอร์ -tile-columns และจำนวนเธรดด้วย -threads ตัวอย่างเช่น การเข้ารหัส 640x480 จะใช้บรรทัดคำสั่ง -tile-columns 1 -threads 2

บรรทัดคำสั่ง FFmpeg

เมื่อรวมคำแนะนำข้างต้นเข้าด้วยกัน คุณอาจใช้คำสั่ง FFmpeg ต่อไปนี้เพื่อเข้ารหัสเนื้อหา VP9 ได้

โปรดทราบว่าคำสั่งการเข้ารหัสแบบ 2 รอบและแบบ 1 รอบจะเชื่อมโยงกัน อาร์กิวเมนต์ -y ในคำสั่งการส่งผ่านครั้งที่ 2 จะตอบว่า "ใช่" เมื่อ FFmpeg ขอ เขียนทับไฟล์สถิติการส่งผ่านครั้งแรกด้วยวิดีโอเอาต์พุต

นอกจากนี้ โปรดทราบว่าระบบจะใช้แหล่งที่มาระดับ 1080p สำหรับการเข้ารหัสที่กำหนดเป้าหมายเอาต์พุตสูงสุด 1280x720 ใช้แหล่งที่มา 4K สำหรับเอาต์พุตที่ใหญ่ขึ้น

320x240 (24, 25 หรือ 30 เฟรมต่อวินาที)

ffmpeg -i tears_of_steel_1080p.webm -vf scale=320x240 -b:v 150k \
  -minrate 75k -maxrate 218k -tile-columns 0 -g 240 -threads 1 \
  -quality good -crf 37 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-320x240.webm && \
ffmpeg -i tears_of_steel_1080p.webm -vf scale=320x240 -b:v 150k \
  -minrate 75k -maxrate 218k -tile-columns 0 -g 240 -threads 1 \
  -quality good -crf 37 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 1 -y tos-320x240.webm

640x360 (24, 25 หรือ 30 เฟรมต่อวินาที)

ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x360 -b:v 276k \
  -minrate 138k -maxrate 400k -tile-columns 1 -g 240 -threads 2 \
  -quality good -crf 36 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-640x360.webm && \
ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x360 -b:v 276k \
  -minrate 138k -maxrate 400k -tile-columns 1 -g 240 -threads 2 \
  -quality good -crf 36 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 1 -y tos-640x360.webm

640x480 (คุณภาพต่ำ 24, 25 หรือ 30 เฟรมต่อวินาที)

ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 -b:v 512k \
  -minrate 256k -maxrate 742k -tile-columns 1 -g 240 -threads 2 \
  -quality good -crf 34 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-640x360-low.webm && \
ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 -b:v 512k \
  -minrate 256k -maxrate 742k -tile-columns 1 -g 240 -threads 2 \
  -quality good -crf 34 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 1 -y tos-640x480-low.webm

640x480 (คุณภาพปานกลาง, 24, 25 หรือ 30 เฟรมต่อวินาที)

ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 -b:v 750k \
  -minrate 375k -maxrate 1088k -tile-columns 1 -g 240 -threads 2 \
  -quality good -crf 33 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-640x360-medium.webm && \
ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 -b:v 750k \
  -minrate 375k -maxrate 1088k -tile-columns 1 -g 240 -threads 2 \
  -quality good -crf 33 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 1 -y tos-640x480-medium.webm

1280x720 (24, 25 หรือ 30 เฟรมต่อวินาที)

ffmpeg -i tears_of_steel_1080p.webm -vf scale=1280x720 -b:v 1024k \
  -minrate 512k -maxrate 1485k -tile-columns 2 -g 240 -threads 4 \
  -quality good -crf 32 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-1280x720-24-30fps.webm && \
ffmpeg -i tears_of_steel_1080p.webm -vf scale=1280x720 -b:v 1024k \
  -minrate 512k -maxrate 1485k -tile-columns 2 -g 240 -threads 4 \
  -quality good -crf 32 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 2 -y tos-1280x720-24-30fps.webm

1280x720 (50 หรือ 60 เฟรมต่อวินาที)

ffmpeg -i tears_of_steel_1080p.webm -vf scale=1280x720 -b:v 1800k \
  -minrate 900k -maxrate 2610k -tile-columns 2 -g 240 -threads 4 \
  -quality good -crf 32 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-1280x720-50-60fps.webm && \
ffmpeg -i tears_of_steel_1080p.webm -vf scale=1280x720 -b:v 1800k \
  -minrate 900k -maxrate 2610k -tile-columns 2 -g 240 -threads 4 \
  -quality good -crf 32 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 2-y tos-1280x720-50-60fps.webm

1920x1080 (24, 25 หรือ 30 เฟรมต่อวินาที)

ffmpeg -i tearsofsteel_4k.mov -vf scale=1920x1080 -b:v 1800k \
  -minrate 900k -maxrate 2610k -tile-columns 2 -g 240 -threads 4 \
  -quality good -crf 31 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-1920x1080-24-30fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=1920x1080 -b:v 1800k \
  -minrate 900k -maxrate 2610k -tile-columns 3 -g 240 -threads 4 \
  -quality good -crf 31 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 2 -y tos-1920x1080-24-30fps.webm

1920x1080 (50 หรือ 60 เฟรมต่อวินาที)

ffmpeg -i tearsofsteel_4k.mov -vf scale=1920x1080 -b:v 3000k \
  -minrate 1500k -maxrate 4350k -tile-columns 2 -g 240 -threads 4 \
  -quality good -crf 31 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-1920x1080-50-60fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=1920x1080 -b:v 3000k \
  -minrate 1500k -maxrate 4350k -tile-columns 3 -g 240 -threads 4 \
  -quality good -crf 31 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 2 -y tos-1920x1080-50-60fps.webm

2560x1440 (24, 25 หรือ 30 เฟรมต่อวินาที)

ffmpeg -i tearsofsteel_4k.mov -vf scale=2560x1440 -b:v 6000k \
  -minrate 3000k -maxrate 8700k -tile-columns 3 -g 240 -threads 8 \
  -quality good -crf 24 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-2560x1440-24-30fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=2560x1440 -b:v 6000k \
  -minrate 3000k -maxrate 8700k -tile-columns 3 -g 240 -threads 8 \
  -quality good -crf 24 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 2 -y tos-2560x1440-24-30fps.webm

2560x1440 (50 หรือ 60 เฟรมต่อวินาที)

ffmpeg -i tearsofsteel_4k.mov -vf scale=2560x1440 -b:v 9000k \
  -minrate 4500k -maxrate 13050k -tile-columns 3 -g 240 -threads 8 \
  -quality good -crf 24 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-2560x1440-50-60fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=2560x1440 -b:v 9000k \
  -minrate 4500k -maxrate 13050k -tile-columns 3 -g 240 -threads 8 \
  -quality good -crf 24 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 2 -y tos-2560x1440-50-60fps.webm

3840x2160 (24, 25 หรือ 30 เฟรมต่อวินาที)

ffmpeg -i tearsofsteel_4k.mov -vf scale=3840x2160 -b:v 12000k \
  -minrate 6000k -maxrate 17400k -tile-columns 3 -g 240 -threads 8 \
  -quality good -crf 15 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-3840x2160-24-30fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=3840x2160 -b:v 12000k \
  -minrate 6000k -maxrate 17400k -tile-columns 3 -g 240 -threads 8 \
  -quality good -crf 15 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 2 -y tos-3840x2160-24-30fps.webm

3840x2160 (50 หรือ 60 เฟรมต่อวินาที)

ffmpeg -i tearsofsteel_4k.mov -vf scale=3840x2160 -b:v 18000k \
  -minrate 9000k -maxrate 26100k -tile-columns 3 -g 240 -threads 8 \
  -quality good -crf 15 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-3840x2160-50-60fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=3840x2160 -b:v 18000k \
  -minrate 9000k -maxrate 26100k -tile-columns 3 -g 240 -threads 8 \
  -quality good -speed 2 -crf 15 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -y tos-3840x2160-50-60fps.webm