Mã hóa cơ bản

Khái niệm cơ bản về nén video

Phần này bao gồm các tùy chọn cơ bản để mã hóa VP9, bao gồm kích thước khung, kiểm soát tốc độ bit và chất lượng cơ bản.

Nếu bạn là người mới sử dụng tính năng nén video, hãy xem video này để tìm hiểu thêm về nhu cầu nén video và cách hoạt động của tính năng này.

Một mã hóa đơn giản

Lệnh FFmpeg sau đây sẽ chuyển đổi tệp đầu vào thành video VP9 có âm thanh Opus. Đây là chế độ mã hóa đơn giản nhất có thể, sử dụng chế độ cài đặt mặc định.

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

Bộ mã hóa FFmpeg này sử dụng các tham số dòng lệnh sau:

FFmpeg
-i <filename> Chỉ định tên tệp nhập
-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 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ó một kích thước khung hình (cho biết chiều rộng và chiều cao của pixel). Bạn có thể sử dụng thông số dòng lệnh FFmpeg sau đây để kiểm soát kích thước khung video đầu ra cho mã hóa VP9:

FFmpeg
-vf scale=<width>x<height> Chiều rộng và chiều cao khung hình

Ví dụ: lệnh FFmpeg sau đây sẽ xuất ra một video 640x480 VP9 WebM.

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 yêu cầu nhiều băng thông hơn, khả năng giải mã cao hơn 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 loại thiết bị di động và web.

Tốc độ bit (tốc độ bit)

VP9 hỗ trợ một số chế độ tốc độ bit khác nhau:

chế độ
Bộ định lượng không đổi (Q) Cho phép bạn chỉ định giá trị định lượng cố định; tốc độ bit sẽ thay đổi
Chất lượng ràng buộc (CQ) Cho phép bạn đặt một mức chất lượng tối đa. Chất lượng video có thể thay đổi trong tham 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 giới hạn về tốc độ bit
Tốc độ bit không đổi (CBR) Cố gắng giữ tốc độ bit không thay đổi trong khi chất lượng thay đổi

Bạn nên dùng chế độ CQ cho video dựa trên tệp (thay vì phát trực tiếp). Các thông số dòng lệnh FFmpeg sau đây được sử dụng cho chế độ CQ:

FFmpeg
-b:v <arg> Đặt tốc độ bit mục tiêu (ví dụ: 500 nghìn)
-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. Giá trị hợp lệ là 0-63, giá trị thấp hơn có chất lượng cao hơn.

Ví dụ: lệnh FFmpeg sau đây sẽ tạo tệp video 640x480 chất lượng trung bình bằng cách sử dụng chế độ CQ, với tốc độ bit trung bình là 750kb/giây và chất lượng tối đa bị hạn chế ở 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 tùy thuộc vào chất lượng mà bạn muốn đạt được và độ phân giải của video. Bạn có thể tìm thấy toàn bộ đề xuất 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 kết quả và thời lượng cần thiết để tạo video. Nói chung, bạn luôn có thể có được chất lượng cao hơn bằng cách cho phép nhiều thời gian hơn để mã hóa, nhưng thời gian cần thiết để có được chất lượng cao nhất có thể là 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 độ:

  • Tùy chọn cài đặt chất lượng sẽ hướng dẫn bộ mã hóa tiếp cận video. Các chế độ có sẵn là tốt nhất, tốt nhất và thời gian thực.

  • Các tùy chọn cài đặt tạo chuỗi cho phép bộ mã hóa sử dụng nhiều luồng CPU để mã hóa video. Các chế độ cài đặt này có thể giảm bớt chất lượng, nhưng có thể cải thiện đáng kể tốc độ mã hóa và giải mã.

Hai loại tùy chọn cài đặt này được kiểm soát bởi một vài thông số dòng lệnh:

FFmpeg
-threads Cho biết số lượng chuỗi cần sử dụng trong quá trình mã hóa.
-quality Có thể được đặt thành good, best hoặc realtime
-speed Thông số này có ý nghĩa khác nhau tùy 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 VoD ở goodbest, trong đó 0 là chất lượng cao nhất và 4 là chất lượng thấp nhất. Realtime giá trị hợp lệ là 5-8; số thấp hơn có nghĩa là chất lượng cao hơn
-tile-columns Tiling chia video thành các vùng hình chữ nhật, cho phép nhiều luồng mã hoá và giải mã. Số ô luôn bằng 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 có chất lượng được đặt thành $39;good\39; 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ể thay đổi tùy theo độ phân giải và khả năng xử lý có sẵn. Bạn có thể tìm thấy tập hợp đầy đủ các đề xuất trong phần tiếp theo.