การเข้ารหัสพื้นฐาน

ข้อมูลพื้นฐานเกี่ยวกับการบีบอัดวิดีโอ

ส่วนนี้ครอบคลุมตัวเลือกพื้นฐานของการเข้ารหัส VP9 ซึ่งรวมถึงขนาดเฟรม การควบคุมอัตราบิตพื้นฐาน และคุณภาพ

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

การเข้ารหัสที่เรียบง่าย

คําสั่ง FFmpeg ต่อไปนี้จะแปลงไฟล์อินพุตเป็นวิดีโอ VP9 ที่มีเสียง Opus นี่คือการเข้ารหัสที่ง่ายที่สุดที่เป็นไปได้ซึ่งใช้การตั้งค่าเริ่มต้น

ffmpeg -i tears_of_steel_1080p.webm -c:v libvpx-vp9 -c:a libopus output.webm

การเข้ารหัส FFmpeg นี้ใช้พารามิเตอร์บรรทัดคําสั่งต่อไปนี้

FFmpeg
-i <filename> ระบุชื่อไฟล์อินพุต
-c:v libvpx-vp9 บอกให้ FFmpeg สร้างวิดีโอ VP9
-c:a libopus บอกให้ FFmpeg สร้างเสียง Opus
output.webm ระบุชื่อไฟล์เอาต์พุต

FFmpeg อนุมานประเภทของไฟล์ที่จะสร้างจากชื่อไฟล์เอาต์พุตที่คุณใช้ ในตัวอย่างนี้ FFmpeg จะแสดงไฟล์ WebM เนื่องจากเราขอ output.webm

ความละเอียด

วิดีโอทุกรายการมีขนาดเฟรม (ระบุความกว้างและความสูงของพิกเซล) พารามิเตอร์บรรทัดคําสั่ง FFmpeg ต่อไปนี้สามารถใช้เพื่อควบคุมขนาดเฟรมของเอาต์พุตวิดีโอสําหรับการเข้ารหัส VP9

FFmpeg
-vf scale=<width>x<height> ความกว้างและความสูงของเฟรม

เช่น คําสั่ง FFmpeg ต่อไปนี้จะแสดงวิดีโอ VP9 WebM ขนาด 640x480

ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 \
  -c:v libvpx-vp9 -c:a libopus output.webm

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

อัตราบิต (อัตราบิต)

VP9 รองรับโหมดอัตราบิตต่างๆ หลายโหมด ดังนี้

โหมด
ค่าคงที่ (Q) ช่วยให้คุณระบุค่าตัวระบุเสียงคงที่ อัตราบิตจะแตกต่างกันไป
คุณภาพจํากัด (CQ) ช่วยให้คุณกําหนดระดับคุณภาพสูงสุดได้ คุณภาพอาจแตกต่างกันไปตามพารามิเตอร์อัตราบิต
อัตราบิตแปรผัน (VBR) รักษาสมดุลระหว่างคุณภาพและอัตราบิตในช่วงเวลาต่างๆ ภายในข้อจํากัดเกี่ยวกับอัตราบิต
อัตราบิตคงที่ (CBR) พยายามรักษาอัตราบิตให้ค่อนข้างคงที่ในขณะที่คุณภาพแตกต่างกันไป

เราขอแนะนําให้ใช้โหมด CQ สําหรับวิดีโอตามไฟล์ (ต่างจากสตรีมมิงแบบสด) พารามิเตอร์บรรทัดคําสั่ง FFmpeg ต่อไปนี้จะใช้สําหรับโหมด CQ

FFmpeg
-b:v <arg> ตั้งค่าอัตราบิตเป้าหมาย (เช่น 500,000)
-minrate <arg>
-maxrate <arg>
ตั้งค่าอัตราบิตต่ําสุดและสูงสุด
-crf <arg> ตั้งระดับคุณภาพสูงสุด ค่าที่ใช้ได้คือ 0-63 และตัวเลขต่ํากว่าจะมีคุณภาพสูงกว่า

เช่น คําสั่ง FFmpeg ต่อไปนี้จะสร้างไฟล์วิดีโอขนาดกลาง 640x480 โดยใช้โหมด CQ โดยมีอัตราบิตเฉลี่ย 750kbps และคุณภาพสูงสุดจํากัดอยู่ที่ 33 รายการ

ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 \
  -b:v 750k -crf 33 -c:v libvpx-vp9 -c:a libopus output.webm

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

การตั้งค่าคุณภาพและความเร็ว

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

VP9 มีการตั้งค่าหลายอย่างเพื่อสร้างความสมดุลระหว่างคุณภาพและความเร็ว ดังนี้

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

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

การตั้งค่า 2 ประเภทนี้ได้รับการควบคุมโดยพารามิเตอร์บรรทัดคําสั่งหลายชนิด ดังนี้

FFmpeg
-threads ระบุจํานวนชุดข้อความที่จะใช้ในระหว่างการเข้ารหัส
-quality อาจตั้งค่าเป็น good, best หรือ realtime
-speed พารามิเตอร์นี้มีความหมายต่างกันไปโดยขึ้นอยู่กับการตั้งค่าคุณภาพเป็น good หรือ realtime การตั้งค่าความเร็ว 0-4 จะมีผลกับ VoD ใน good และ best โดยมี 0 คุณภาพสูงสุดและ 4 ต่ําสุด ค่าที่ใช้ได้ Realtime รายการคือ 5-8 เนื่องจากตัวเลขต่ํากว่าหมายถึงคุณภาพสูงกว่า
-tile-columns การแบ่งชิ้นส่วนจะแบ่งวิดีโอออกเป็นส่วนสี่เหลี่ยมผืนผ้าซึ่งรองรับการเข้ารหัสและการเข้ารหัสแบบชุดข้อความหลายรายการ จํานวนไทล์จะเป็นเลข 2 เสมอ 0=1 การ์ด, 1=2, 2=4, 3=8, 4=16, 5=32

คําสั่ง FFmpeg ต่อไปนี้จะสร้างไฟล์ขนาด 640x480 ที่ตั้งค่าคุณภาพเป็น 'good' และตั้งค่าความเร็วเป็น 0 (คุณภาพสูง)

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

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