Mục đích

Phần này cung cấp các đề xuất cho chế độ cài đặt mã hóa VP9 khi mã hóa dựa trên tệp (tức là không hoạt động).

Những mục đề xuất này được thiết kế cho các mục tiêu sau:

  • Sự cân bằng giữa chất lượng và tốc độ mã hóa
  • Tốc độ bit tối thiểu để đạt được chất lượng hợp lý
  • Các chế độ cài đặt phù hợp với nhiều loại nội dung

Những mục đề xuất này không:

  • Mã hóa địa chỉ trực tiếp
  • Tối ưu hóa cho các loại nội dung cụ thể (ví dụ như cảnh quay thể thao chuyển động cao)
  • Định cấu hình các tùy chọn cài đặt cho các yêu cầu mạng hoặc thiết bị cụ thể

Mã hóa độ phân giải đơn

VP9 hỗ trợ nhiều kích thước khung hình, từ độ phân giải nhỏ đến 4K. Kích thước khung hình lớn hơn cho phép phân phối chất lượng cao hơn nhưng yêu cầu nhiều băng thông hơn và công suất xử lý lớn hơn để giải mã.

Nếu bạn đang tạo một độ phân giải duy nhất, thì 640x480 là lựa chọn an toàn để đặt quảng cáo cho một loạt thiết bị di động và web. Các thông số dòng lệnh FFmpeg sau đây cho phép bạn tạo tệp có độ phân giải duy nhất ở tốc độ 750kb/giây.

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

Mã hóa nhiều độ phân giải

Nếu bạn có kế hoạch nhắm mục tiêu nhiều độ phân giải, hoặc nếu mạng phân phối của bạn có thay đổi băng thông, bạn nên tạo nhiều độ phân giải. Sau đó, trình phát của bạn có thể kiểm soát độ phân giải đang được gửi đến người xem.

Bộ mã hóa video nhiều độ phân giải thường được dùng trong quy trình phát trực tuyến tốc độ bit thích ứng, trong đó trình phát video chuyển đổi giữa các độ phân giải theo thời gian thực dựa trên băng thông của người dùng. Ví dụ: Shaka Player cho phép bạn phát lại bộ mã hóa đa độ phân giải, trong đó mỗi bộ mã hóa VP9 nằm trong một tệp riêng biệt và một tệp kê khai DASH cung cấp thông tin về từng bộ mã hóa.

Để biết thêm thông tin về việc đóng gói video ở định dạng phát trực tuyến thích ứng, vui lòng xem Shaka Packager. Hướng dẫn này sẽ tập trung vào các chế độ cài đặt mã hóa cho VP9 trên nhiều độ phân giải.

Tất cả chế độ cài đặt dưới đây có thể dùng cho các tệp riêng lẻ ở nhiều độ phân giải, khi kết hợp với nhau, cung cấp một bộ toàn diện phù hợp với tính năng phát trực tiếp thích ứng. Xin lưu ý rằng phiên bản 640x480 có hai phiên bản, một phiên bản có chất lượng thấp (LQ) và phiên bản còn lại (chất lượng trung bình).

Tốc độ bit

Bạn nên dùng chế độ Chất lượng ràng buộc (CQ) khi mã hóa các tệp VP9 để xem theo yêu cầu. Chế độ mã hóa này cho phép bạn chỉ định tốc độ bit trung bình mục tiêu, trong khi vẫn kiểm soát cả chất lượng tối đa của video cũng như tốc độ bit tối thiểu và tối đa.

Các tốc độ bit sau đây được đề xuất làm đường cơ sở để phân phối trên web và trên thiết bị di động. Những đề xuất này giảm thiểu tốc độ bit để đạt được chất lượng video phù hợp với phân phối trên web dành cho thiết bị di động và web dành cho người dùng thông thường; hãy xem các đề xuất này là đề xuất có tốc độ bit \33;thấp\39; có thể vẫn đạt được chất lượng hợp lý.

Trong các ví dụ ở trên, bạn nên đặt tốc độ bit tối thiểu ở 50% tốc độ bit mục tiêu và tối đa là 145% mục tiêu.

Kích thước khung hình/Tốc độ khung hình Tốc độ bit mục tiêu (VOD, kb/giây) Tốc độ bit tối thiểu (50%) Tốc độ bit tối đa (145%)
320x240p tại 24,25,30 150 75 218
640x360p tại 24,25,30 276 138 400
640x480p tại 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 1800 900 2610
1920x1080p tại 24,25,30 1800 900 2610
1920x1080p tại 50,60 3000 1500 4350
2560x1440p tại 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

Hình 2a: Tốc độ bit theo yêu cầu đề xuất

Trong FFmpeg, tốc độ bit được kiểm soát bằng các lệnh sau:

FFmpeg
-b:v <arg> Đặt tốc độ bit (ví dụ: 500k)
-minrate <arg>
-maxrate <arg>
Đặt tốc độ bit tối thiểu và tối đa.

Ví dụ: khi mã hóa nội dung 640x480, bạn có thể sử dụng dòng lệnh -b:v 750k -minrate 375 -maxrate 1088.

Chất lượng

Ở chế độ CQ, bạn cũng sẽ đặt mức chất lượng tối đa. Bạn nên sử dụng các mức chất lượng sau đây cho quá trình mã hóa VP9 dựa trên tệp:

Chiều cao khung hình Chất lượng mục tiêu (CQ)
240 37
360 36
480 34 (LQ) hoặc 33 (MQ)
720 32
1080 31
1440 24
2160 15

Trong FFmpeg, chất lượng được đặt bằng lệnh -crf. Ví dụ: để đặt chất lượng thành 33, bạn sẽ sử dụng lệnh -crf 33

Mã hóa nhiều thẻ và tốc độ mã hóa

Tính năng mã hóa dựa trên tệp cho phép bạn linh hoạt về tốc độ. Bạn cũng có thể thực hiện nhiều lần chuyển trên cùng một tài liệu để tăng chất lượng và chọn tốc độ cho từng lần.

Khi mã hóa tệp VP9 trong FFmpeg, bạn nên đặt thông số -quality thành good, sau đó đặt tốc độ của lần chuyển đầu tiên và thứ hai theo bảng bên dưới bằng thông số -speed. Điều này mang lại sự cân bằng tốt giữa thời gian mã hóa và chất lượng của kết quả.

Chiều cao khung hình Tốc độ (vé đầu tiên) Tốc độ (Vé thứ hai)
240 4 1
360 4 1
480 4 1
720 4 2
1080 4 2
1440 4 2
2160 4 2

Ví dụ: chuỗi mã hóa lần chuyển đầu tiên trong FFmpeg có thể bao gồm -quality good -speed 4.

Giãn cách khung hình chính

Bạn nên cho phép tối đa 240 khung hình video giữa các khung hình chính (8 giây đối với nội dung 30 khung hình/giây). Khung hình chính là các khung hình video tự đủ; chúng không dựa vào bất kỳ khung nào khác để kết xuất nhưng có xu hướng lớn hơn các loại khung hình khác. Đối với việc phát lại web và thiết bị di động, khoảng cách rộng rãi giữa các khung hình chính cho phép bộ mã hóa chọn vị trí tốt nhất của khung hình chính để tối đa hóa chất lượng.

Trong khoảng cách khung hình FFmpeg, điều khiển bằng lệnh -g, cho biết số khung. Đối với 240 khung hình, giá trị này sẽ là -g 240.

Đề xuất gạch và chuỗi

Gạch sẽ chia khung video thành nhiều cột, giúp giảm bớt chất lượng nhưng làm tăng hiệu suất mã hóa. Các ô phải có chiều rộng tối thiểu là 256 pixel nên sẽ có giới hạn về số lượng ô có thể sử dụng.

Tùy thuộc vào số lượng ô và độ phân giải của khung đầu ra, nhiều luồng CPU có thể hữu ích. Nói chung, có giới hạn giá trị cho nhiều luồng khi kích thước khung đầu ra rất nhỏ.

Các chế độ cài đặt sau được khuyên dùng để cuộn và tạo chuỗi ở nhiều độ phân giải.

Kích thước khung Số cột Số chuỗi
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

Trong FFmpeg, số ô được kiểm soát bằng thông số -tile-columns và số lượng chuỗi theo -threads. Ví dụ: bộ mã hóa 640x480 sẽ sử dụng dòng lệnh -tile-columns 2 -threads 4.

Dòng lệnh FFmpeg

Sau khi kết hợp các đề xuất ở trên, chúng tôi có thể dùng các lệnh FFmpeg sau đây để mã hóa nội dung VP9.

Xin lưu ý rằng các lệnh chuyển qua và thứ hai sẽ được chuỗi cùng nhau. Đối số -y trong lệnh trả lời lệnh thứ hai "Yes" khi FFmpeg yêu cầu ghi đè tệp thống kê bỏ qua đầu tiên với video đầu ra.

Ngoài ra, xin lưu ý rằng nguồn 1080p được dùng để mã hóa tiêu chí nhắm mục tiêu lên tới 1280x720. Nguồn 4k được dùng để có dữ liệu đầu ra lớn hơn.

320x240 (24, 25 hoặc 30 khung hình/giây)

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 hoặc 30 khung hình mỗi giây)

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 (Chất lượng thấp, 24, 25 hoặc 30 khung hình mỗi giây)

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 (Chất lượng trung bình, 24, 25 hoặc 30 khung hình mỗi giây)

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 hoặc 30 khung hình mỗi giây)

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 hoặc 60 khung hình mỗi giây)

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 hoặc 30 khung hình mỗi giây)

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 hoặc 60 khung hình/giây)

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 hoặc 30 khung hình/giây)

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 hoặc 60 khung hình/giây)

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 hoặc 30 khung hình/giây)

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 hoặc 60 khung hình/giây)

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