Chế độ cài đặt nên dùng cho VOD
Mục đích
Phần này đưa ra các đề xuất về chế độ cài đặt mã hoá VP9 khi thực hiện mã hoá dựa trên tệp (tức là không phát trực tiếp).
Những đề 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ã hoá
- 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 đề xuất này không:
- Địa chỉ mã hoá trực tiếp
- Tối ưu hoá cho các loại nội dung cụ thể (ví dụ: cảnh quay thể thao có nhiều chuyển động)
- Định cấu hình các chế độ cài đặt cho thiết bị hoặc yêu cầu cụ thể về mạng
Mã hoá một độ phân giải
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 mang lại chất lượng cao hơn nhưng cần nhiều băng thông hơn để phân phối và nhiều sức mạnh xử lý 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 cho nhiều loại thiết bị di động và web. Các tham số dòng lệnh FFmpeg sau đây cho phép bạn tạo một tệp có độ phân giải duy nhất ở tốc độ 750 kbps.
-vf scale=640x480 -b:v 750k -quality good -speed 0 -crf 33 \
-c:v libvpx-vp9 -c:a libopus output.webm
Mã hoá nhiều độ phân giải
Nếu bạn dự định nhắm đến nhiều độ phân giải hoặc nếu mạng phân phối của bạn có băng thông khác nhau, thì 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 được gửi đến người xem.
Mã hoá video ở nhiều độ phân giải thường được dùng trong tính năng phát trực tuyến có 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 các bản mã hoá có nhiều độ phân giải, trong đó mỗi bản mã hoá VP9 nằm trong một tệp riêng biệt và tệp kê khai DASH cung cấp thông tin về từng bản mã hoá.
Để biết thêm thông tin về cách đóng gói video ở định dạng truyền 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 chế độ cài đặt mã hoá cho VP9 ở nhiều độ phân giải.
Chế độ cài đặt nên dùng
Bạn có thể sử dụng tất cả các chế độ cài đặt bên dưới cho từng tệp ở nhiều độ phân giải. Khi kết hợp, các chế độ cài đặt này sẽ cung cấp một bộ chế độ cài đặt toàn diện phù hợp với tính năng phát trực tuyến thích ứng. Xin lưu ý rằng phiên bản 640x480 có 2 phiên bản, một phiên bản chất lượng thấp (LQ) và một phiên bản chất lượng trung bình (MQ).
Tốc độ bit
Bạn nên sử dụng chế độ Chất lượng bị hạn chế (CQ) khi mã hoá tệp VP9 để xem theo yêu cầu. Chế độ mã hoá này cho phép bạn chỉ định tốc độ bit trung bình mục tiêu, đồng thời 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.
Sau đây là tốc độ bit được đề xuất làm cơ sở để phân phối trên web và 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 việc phân phối cho người tiêu dùng trên web và thiết bị di động; hãy coi những đề xuất này là đề xuất về tốc độ bit "thấp" mà vẫn có thể đạt được chất lượng hợp lý.
Đối với các ví dụ nêu trên, bạn nên đặt tốc độ bit tối thiểu ở mức 50% tốc độ bit mục tiêu và tối đa ở mức 145% tốc độ bit 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ốc độ 24,25,30 | 150 | 75 | 218 |
640x360p ở tốc độ 24,25,30 khung hình/giây | 276 | 138 | 400 |
640x480p ở tốc độ 24,25,30 khung hình/giây | 512 (LQ), 750 (MQ) | 256 (LQ) 375 (MQ) | 742 (LQ) 1088 (MQ) |
1280x720p ở tốc độ 24,25,30 hình/giây | 1024 | 512 | 1485 |
1280x720p ở tốc độ 50,60 khung hình/giây | 1800 | 900 | 2610 |
1920x1080p ở tốc độ 24,25,30 khung hình/giây | 1800 | 900 | 2610 |
1920x1080p @ 50,60 | 3000 | 1500 | 4350 |
2560x1440p ở tốc độ 24,25,30 khung hình/giây | 6000 | 3000 | 8700 |
2560x1440p ở tốc độ 50,60 khung hình/giây | 9000 | 4500 | 13050 |
3840x2160p ở tốc độ 24,25,30 khung hình/giây | 12000 | 6000 | 17400 |
3840x2160p ở tốc độ 50,60 khung hình/giây | 18000 | 9000 | 26100 |
Hình 2a: Tốc độ bit nên dùng cho nội dung VOD
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ã hoá 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 dùng các mức chất lượng sau đây để mã hoá VP9 dựa trên tệp:
Chiều cao khung | 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ã hoá nhiều lượt và Tốc độ mã hoá
Mã hoá dựa trên tệp giúp bạn linh hoạt về tốc độ. Bạn cũng có thể thực hiện nhiều lượt trên cùng một vật liệu để tăng chất lượng và chọn tốc độ cho từng lượt.
Khi mã hoá tệp VP9 trong FFmpeg, bạn nên đặt tham số -quality
thành good
, sau đó đặt tốc độ của lượt truyền thứ nhất và thứ hai theo bảng bên dưới bằng tham số -speed
. Điều này giúp cân bằng giữa thời gian mã hoá và chất lượng đầu ra.
Chiều cao khung | Tốc độ (Lượt truy cập đầu tiên) | Tốc độ (Lượt truyền 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ã hoá lượt truyền đầu tiên trong FFmpeg có thể bao gồm -quality good -speed 4
.
Khoảng cách giữa các 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à những khung hình video tự đủ; chúng không dựa vào bất kỳ khung hình 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 chế độ phát trên web và thiết bị di động, khoảng cách rộng giữa các khung hình chính cho phép bộ mã hoá chọn vị trí tốt nhất cho các khung hình chính để tối đa hoá chất lượng.
Trong FFmpeg, khoảng cách giữa các khung hình chính được kiểm soát bằng lệnh -g
, cho biết số lượng khung hình. Đối với 240 khung hình, giá trị này sẽ là -g 240
.
Đề xuất về việc phân chia thành phần và tạo luồng
Tính năng chia ô chia khung hình video thành nhiều cột, giúp giảm nhẹ chất lượng nhưng tăng tốc hiệu suất mã hoá. Các ô phải có chiều rộng tối thiểu là 256 pixel, vì vậy, có giới hạn về số lượng ô có thể sử dụng.
Tuỳ thuộc vào số lượng ô và độ phân giải của khung hình đầu ra, bạn có thể cần nhiều luồng CPU hơn. Nhìn chung, có rất ít giá trị đối với nhiều luồng khi kích thước khung hình đầu ra rất nhỏ.
Bạn nên sử dụng các chế độ cài đặt sau đây để xếp thành ô và phân luồng ở nhiều độ phân giải.
Kích thước khung | Số lượng cột ô | Số lượng luồng |
---|---|---|
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 |
Trong FFmpeg, số lượng ô được kiểm soát bằng tham số -tile-columns
và số lượng luồng bằng -threads
. Ví dụ: một bản mã hoá 640x480 sẽ sử dụng dòng lệnh -tile-columns 1 -threads 2
.
Dòng lệnh FFmpeg
Kết hợp các đề xuất trên, bạn có thể sử dụng các lệnh FFmpeg sau đây để mã hoá nội dung VP9.
Xin lưu ý rằng các lệnh truyền lần thứ nhất và lần thứ hai được xâu chuỗi với nhau. Đối số -y
trong lệnh truyền lần thứ hai trả lời "Yes" ("Có") khi FFmpeg yêu cầu ghi đè tệp số liệu thống kê truyền lần thứ nhất bằng video đầu ra.
Ngoài ra, xin lưu ý rằng nguồn 1080p được dùng để mã hoá nhằm nhắm đến đầu ra tối đa 1280x720. Nguồn 4K được dùng cho đầ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 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
- Tệp đầu vào: tears_of_steel_1080p.webm (1920x800, 544,88 MB)
- Tệp đầu ra: tos-320x240.webm (320x240, 21,73 MB)
640x360 (24, 25 hoặc 30 khung hình/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 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
- Tệp đầu vào: tears_of_steel_1080p.webm (1920x800, 544,88 MB)
- Tệp đầu ra: tos-640x360.webm (640x360, 31,53 MB)
640x480 (Chất lượng thấp, 24, 25 hoặc 30 khung hình/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 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
- Tệp đầu vào: tears_of_steel_1080p.webm (1920x800, 544,88 MB)
- Tệp đầu ra: tos-640x480-low.webm (640x480, 51,18 MB)
640x480 (Chất lượng trung bình, 24, 25 hoặc 30 khung hình/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 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
- Tệp đầu vào: tears_of_steel_1080p.webm (1920x800, 544,88 MB)
- Tệp đầu ra: tos-640x480-medium.webm (640x480, 69,27 MB)
1280x720 (24, 25 hoặc 30 khung hình/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 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
- Tệp đầu vào: tears_of_steel_1080p.webm (1920x800, 544,88 MB)
- Tệp đầu ra: tos-1280x720-24-30fps.webm (1280x720, 98,2 MB)
1280x720 (50 hoặc 60 khung hình/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 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
- Tệp đầu vào: tears_of_steel_1080p.webm (1920x800, 544,88 MB)
- Tệp đầu ra: tos-1280x720-50-60fps.webm (1280x720, 157,1 MB)
1920x1080 (24, 25 hoặc 30 khung hình/giây)
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
- Tệp đầu vào: tearsofsteel_4k.mov (3840x1714, 6,76 GB)
- Tệp đầu ra: tos-1920x1080-24-30fps.webm (1920x1080, 151,51 MB)
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 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
- Tệp đầu vào: tearsofsteel_4k.mov (3840x1714, 6,76 GB)
- Tệp đầu ra: tos-1920x1080-50-60fps.webm (1920x1080, 238,18 MB)
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 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
- Tệp đầu vào: tearsofsteel_4k.mov (3840x1714, 6,76 GB)
- Tệp đầu ra: tos-2560x1440-24-30fps.webm 2560x1440, 533,54 MB)
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 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
- Tệp đầu vào: tearsofsteel_4k.mov (3840x1714, 6,76 GB)
- Tệp đầu ra: tos-2560x1440-50-60fps.webm 2560x1440, 664,04 MB)
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 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
- Tệp đầu vào: tearsofsteel_4k.mov (3840x1714, 6,76 GB)
- Tệp đầu ra: tos-3840x2160-24-30fps.webm 3840x2160, 1,03 GB)
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 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
- Tệp đầu vào: tearsofsteel_4k.mov (3840x1714, 6,76 GB)
- Tệp đầu ra: tos-3840x2160-50-60fps.webm 3840x2160, 1,56 GB)