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

ส่วนนี้จะให้คําแนะนําเกี่ยวกับการตั้งค่าการเข้ารหัส 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 3,000 1500 4350
2560x1440p @ 24,25,30 6000 3,000 8700
2560x1440p ที่ 50,60 9000 4500 13050
3840x2160p ที่ 24,25,30 12000 6000 17400
3840x2160p ที่ 50,60 18000 9000 26100

รูปที่ 2a: อัตราบิต VOD ที่แนะนํา

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

FFmpeg
-b:v <arg> ตั้งค่าอัตราบิต (เช่น 500,000)
-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

การเข้ารหัสแบบ Multi-pass และความเร็วในการเข้ารหัส

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

เมื่อเข้ารหัสไฟล์ 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) 2
640x360 2 (-tile-columns 1) 4
640x480 2 (-tile-columns 1) 4
1280x720 4 (-tile-columns 2) 8
1920x1080 4 (-tile-columns 2) 8
2560x1440 8 (-tile-columns 3) 16
3840x2160 8 (-tile-columns 3) 16

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

บรรทัดคําสั่ง FFmpeg

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

โปรดทราบว่าคําสั่งแรกและการส่งต่อครั้งที่ 2 จะเชื่อมโยงกัน อาร์กิวเมนต์ -y ในคําสั่งคําสั่งที่ 2 จะตอบ "Yes" เมื่อ 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 2 \
  -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 2 \
  -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 4 \
  -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 4 \
  -quality good -crf 36 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -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 4 \
  -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 4 \
  -quality good -crf 34 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -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 4 \
  -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 4 \
  -quality good -crf 33 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -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 8 \
  -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 8 \
  -quality good -crf 32 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -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 8 \
  -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 8 \
  -quality good -crf 32 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4-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 8 \
  -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 8 \
  -quality good -crf 31 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -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 8 \
  -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 8 \
  -quality good -crf 31 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -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 16 \
  -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 16 \
  -quality good -crf 24 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -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 16 \
  -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 16 \
  -quality good -crf 24 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -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 24 \
  -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 24 \
  -quality good -crf 15 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -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 24 \
  -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 24 \
  -quality good -speed 4 -crf 15 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -y tos-3840x2160-50-60fps.webm