Mã hoá cơ bản
Kiến thức cơ bản về nén video
Phần này trình bày các lựa chọn cơ bản để mã hoá VP9, bao gồm kích thước khung hình, chế độ kiểm soát tốc độ bit cơ bản và chất lượng.
Nếu mới làm quen với việc nén video, bạn có thể xem video này để tìm hiểu thêm về nhu cầu nén video và cách thức hoạt động của việc nén video.
Mã hoá đơn giản
Lệnh FFmpeg sau đây chuyển đổi một tệp đầu vào thành video VP9 có âm thanh Opus. Đây là phương thức mã hoá đơn giản nhất có thể, sử dụng các chế độ cài đặt mặc định.
ffmpeg -i tears_of_steel_1080p.webm -c:v libvpx-vp9 -c:a libopus output.webm
Lệnh mã hoá FFmpeg này sử dụng các tham số dòng lệnh sau:
FFmpeg | |
---|---|
-i <filename> |
Chỉ định tên tệp đầu vào |
-c:v libvpx-vp9 |
Yêu cầu FFmpeg tạo video VP9 |
-c:a libopus |
Yêu cầu FFmpeg tạo âm thanh Opus |
output.webm |
Chỉ định tên tệp đầu ra |
FFmpeg suy luận loại tệp cần tạo từ tên tệp đầu ra mà bạn sử dụng. Trong ví dụ này, FFmpeg sẽ xuất một tệp WebM vì chúng ta đã yêu cầu output.webm
.
Độ phân giải
Mỗi video đều có kích thước khung hình (cho biết chiều rộng và chiều cao tính bằng pixel). Bạn có thể dùng tham số dòng lệnh FFmpeg sau đây để kiểm soát kích thước khung hình video đầu ra cho quá trình mã hoá VP9:
FFmpeg | |
---|---|
-vf scale=<width>x<height> |
Chiều rộng và chiều cao khung |
Ví dụ: lệnh FFmpeg sau đây sẽ xuất video WebM VP9 640x480.
ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 \
-c:v libvpx-vp9 -c:a libopus output.webm
Độ phân giải nhỏ hơn có chất lượng thấp hơn, nhưng độ phân giải lớn hơn đòi hỏi nhiều băng thông hơn, nhiều sức mạnh xử lý hơn để giải mã và có thể không được hỗ trợ trên các thiết bị cũ. Đối với VP9, 640x480 được coi là độ phân giải an toàn cho nhiều thiết bị di động và web.
Tốc độ bit
VP9 hỗ trợ nhiều chế độ tốc độ bit:
chế độ | |
---|---|
Bộ lượng tử hoá hằng số (Q) | Cho phép bạn chỉ định một giá trị cố định cho bộ lượng tử hoá; tốc độ bit sẽ thay đổi |
Chất lượng bị hạn chế (CQ) | Cho phép bạn đặt mức chất lượng tối đa. Chất lượng có thể thay đổi trong các thông số tốc độ bit |
Tốc độ bit biến thiên (VBR) | Cân bằng chất lượng và tốc độ bit theo thời gian trong phạm vi hạn chế về tốc độ bit |
Tốc độ bit không đổi (CBR) | Cố gắng giữ tốc độ bit tương đối ổn định trong khi chất lượng thay đổi |
Bạn nên sử dụng chế độ CQ cho video dựa trên tệp (thay vì phát trực tiếp). Các tham số dòng lệnh FFmpeg sau đây được dùng cho chế độ CQ:
FFmpeg | |
---|---|
-b:v <arg> |
Đặt tốc độ bit mục tiêu (ví dụ: 500k) |
-minrate <arg> -maxrate <arg> |
Đặt tốc độ bit tối thiểu và tối đa. |
-crf <arg> |
Đặt mức chất lượng tối đa. Các giá trị hợp lệ là 0 – 63, số càng thấp thì chất lượng càng cao. |
Ví dụ: lệnh FFmpeg sau đây sẽ tạo một tệp video 640x480 có chất lượng trung bình bằng chế độ CQ, với tốc độ bit trung bình là 750 kbps và chất lượng tối đa bị giới hạn ở mức 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
Tốc độ bit sẽ thay đổi tuỳ thuộc vào chất lượng bạn muốn đạt được và độ phân giải của video. Bạn có thể xem bộ đề xuất đầy đủ về tốc độ bit ở nhiều độ phân giải tại đây.
Chế độ cài đặt chất lượng và tốc độ
Nén video là sự đánh đổi giữa chất lượng của đầu ra và thời gian cần thiết để tạo ra video đó. Nói chung, bạn luôn có thể đạt được chất lượng cao hơn bằng cách cho phép mã hoá trong thời gian dài hơn, nhưng thời gian cần thiết để đạt được chất lượng cao nhất có thể có thể không thực tế.
VP9 cung cấp một số chế độ cài đặt để cân bằng chất lượng và tốc độ:
Chế độ cài đặt chất lượng hướng dẫn bộ mã hoá về phương pháp nén video. Các chế độ hiện có là tốt nhất, tốt và theo thời gian thực.
Chế độ cài đặt phân luồng cho phép bộ mã hoá sử dụng nhiều luồng CPU để mã hoá video. Các chế độ cài đặt này có thể làm giảm nhẹ chất lượng, nhưng có thể cải thiện đáng kể tốc độ mã hoá và giải mã.
Hai loại chế độ cài đặt này được kiểm soát bằng một số tham số dòng lệnh:
FFmpeg | |
---|---|
-threads |
Cho biết số lượng luồng cần sử dụng trong quá trình mã hoá. |
-quality |
Có thể được đặt thành good , best hoặc realtime |
-speed |
Tham số này có nhiều ý nghĩa tuỳ thuộc vào việc chất lượng được đặt thành good hay realtime . Chế độ cài đặt tốc độ 0-4 áp dụng cho nội dung theo yêu cầu ở chế độ good và best , trong đó 0 là chất lượng cao nhất và 4 là chất lượng thấp nhất. Realtime có các giá trị hợp lệ là 5-8 ; số càng thấp thì chất lượng càng cao |
-tile-columns |
Phân chia thành ô sẽ chia video thành các vùng hình chữ nhật, cho phép xử lý đa luồng để mã hoá và giải mã. Số lượng ô luôn là luỹ thừa của 2. 0 =1 ô, 1 =2, 2 =4, 3 =8, 4 =16, 5 =32. |
Lệnh FFmpeg sau đây sẽ tạo một tệp 640x480 với chất lượng được đặt thành "good" (tốt) và tốc độ được đặt thành 0 (chất lượng cao):
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
Các lựa chọn về chế độ cài đặt chất lượng và tốc độ có thể khác nhau tuỳ thuộc vào độ phân giải và khả năng xử lý hiện có. Bạn có thể xem toàn bộ các đề xuất trong phần tiếp theo.