Đối với mã hóa dựa trên CRF, chuyển các đối số sau trong đoạn mã dưới đây cho FFmpeg:
-c:v h264_nvenc -rc:v vbr_hq -cq:v 19 -b:v 2500k -maxrate:v 5000k -profile:v high
Tất nhiên, bạn sẽ cần điều chỉnh tốc độ bit mục tiêu và cq
giá trị cố định . 19 là cài đặt được đề xuất vì nó giống hệt với 0, nhưng vẫn giữ được sự trao đổi nén tốt với kích thước tệp. Xem bài viết này để biết thêm về những gì CRF làm.
Lưu ý rằng -cq
thang đo là logarit, có nghĩa là 0 về cơ bản là không mất mát và 51 sẽ là mức tồi tệ nhất tuyệt đối.
Chất lượng có thể được cải thiện hơn nữa trên bằng cách thêm tùy chọn như B-khung (hạn chế này đến 3, tại hầu hết, và điều này đòi hỏi phải có hồ sơ cá nhân H.264 Main trở lên. Hồ sơ cơ bản không hỗ trợ B-khung. Để làm điều này, vượt qua -bf {uint}
để bộ mã hóa video, như vậy -bf:v 4
sẽ dẫn đến bộ mã hóa sử dụng 4 khung B.
Các phần chính ở đây là -cq:v 19
và các -rc:v vbr_hq
đối số, cho phép bạn điều chỉnh bộ mã hóa với cả tốc độ bit được đặt trước và tốc độ bit cho phép tối đa ( -b:v
và-maxrate:v
) trong khi tuân thủ giá trị CRF là 19.
Và bây giờ, ghi chú nhỏ về NVENC và điều chỉnh nó để mã hóa chất lượng cao:
NVENC, giống như bất kỳ bộ mã hóa dựa trên phần cứng nào khác, có một số hạn chế và đặc biệt với HEVC, đây là những hạn chế đã biết:
Trên Pascal:
Đối với mã hóa HEVC, áp dụng các giới hạn sau:
- Kích thước CTU trên 32 không được hỗ trợ.
- Khung B trong HEVC cũng không được hỗ trợ.
- Các định dạng kết cấu được hỗ trợ bởi bộ mã hóa NVENC giới hạn các không gian màu mà bộ mã hóa có thể làm việc. Hiện tại, chúng tôi có hỗ trợ cho 4: 2: 0 (8 bit) và 4: 4: 4 (cho 10 bit). Các định dạng không liên quan như 4: 2: 2 10 bit không được hỗ trợ. Điều này sẽ ảnh hưởng đến một số quy trình công việc trong đó các không gian màu như vậy được yêu cầu.
- Nhìn về phía trước kiểm soát cũng được giới hạn trong 32 khung hình. Bạn có thể muốn xem bài xã luận này để biết thêm chi tiết.
Turing có tất cả các cải tiến có sẵn cho Pascal, với việc bổ sung hỗ trợ khung B cho HEVC và khả năng sử dụng khung B làm tham chiếu. Xem câu trả lời này cho một ví dụ về khả năng này.
Và trên Maxwell Gen 2 (GPU dòng GM200x):
Mã hóa HEVC thiếu các tính năng sau:
- Các khả năng lọc vòng lặp thích ứng mẫu (SAO).
- Lượng tử hóa thích ứng
- Kiểm soát tỷ lệ nhìn về phía trước.
Tác động ở đây đối với Maxwell là các cảnh nặng chuyển động với HEVC dưới các bitrate bị ràng buộc có thể bị tạo ra (tính chặn) do các chức năng tìm kiếm bị thiếu và khả năng lọc vòng lặp thích nghi mẫu (SAO). Pascal đã phần nào cải thiện khả năng này, nhưng tùy thuộc vào phiên bản SDK mà bộ mã hóa video được xây dựng, không phải tất cả các tính năng đều có sẵn.
Chẳng hạn, chế độ dự đoán có trọng số cho mã hóa H.264 trên Pascal yêu cầu NVENC SDK 8.0x trở lên và chế độ mã hóa này cũng sẽ vô hiệu hóa hỗ trợ khung B. Tương tự, sự kết hợp của các bộ chia tỷ lệ dựa trên phần cứng chạy từ Nvidia Performance Primitive (NPP) với NVENC có thể giới thiệu các cải tiến hiệu suất với các ứng dụng chia tỷ lệ video với chi phí nhân rộng, đặc biệt là với nội dung được nâng cấp. Điều tương tự cũng tác động đến đường ống mã hóa video khi các chức năng mở rộng của NPP chạy khỏi lõi CUDA trên GPU và do đó, tác động hiệu suất được giới thiệu bởi tải thêm nên được phân tích theo từng trường hợp cụ thể để xác định xem chất lượng hiệu suất có phải không đánh đổi là chấp nhận được
Hãy ghi nhớ điều này: Bộ mã hóa dựa trên phần cứng sẽ luôn cung cấp tùy chỉnh ít hơn một chút so với triển khai dựa trên phần mềm tương đương và do đó, số dặm và chất lượng đầu ra chấp nhận được của bạn sẽ luôn khác nhau.
Và để bạn tham khảo:
Với FFmpeg, bạn luôn có thể tham khảo các cài đặt của bộ mã hóa để tùy chỉnh bằng cách:
ffmpeg -h encoder {encoder-name}
Vì vậy, đối với các bộ mã hóa dựa trên NVENC, bạn có thể chạy:
ffmpeg -h encoder=hevc_nvenc
ffmpeg -h encoder=h264_nvenc
Bạn cũng có thể thấy tất cả các bộ mã hóa dựa trên NVENC và bộ mở rộng dựa trên NPP (nếu được xây dựng như vậy) bằng cách chạy:
for i in encoders decoders filters; do
echo $i:; ffmpeg -hide_banner -${i} | egrep -i "npp|cuvid|nvenc|cuda"
done
Sản lượng mẫu trên thử nghiệm của tôi:
encoders:
V..... h264_nvenc NVIDIA NVENC H.264 encoder (codec h264)
V..... nvenc NVIDIA NVENC H.264 encoder (codec h264)
V..... nvenc_h264 NVIDIA NVENC H.264 encoder (codec h264)
V..... nvenc_hevc NVIDIA NVENC hevc encoder (codec hevc)
V..... hevc_nvenc NVIDIA NVENC hevc encoder (codec hevc)
decoders:
V..... h263_cuvid Nvidia CUVID H263 decoder (codec h263)
V..... h264_cuvid Nvidia CUVID H264 decoder (codec h264)
V..... hevc_cuvid Nvidia CUVID HEVC decoder (codec hevc)
V..... mjpeg_cuvid Nvidia CUVID MJPEG decoder (codec mjpeg)
V..... mpeg1_cuvid Nvidia CUVID MPEG1VIDEO decoder (codec mpeg1video)
V..... mpeg2_cuvid Nvidia CUVID MPEG2VIDEO decoder (codec mpeg2video)
V..... mpeg4_cuvid Nvidia CUVID MPEG4 decoder (codec mpeg4)
V..... vc1_cuvid Nvidia CUVID VC1 decoder (codec vc1)
V..... vp8_cuvid Nvidia CUVID VP8 decoder (codec vp8)
V..... vp9_cuvid Nvidia CUVID VP9 decoder (codec vp9)
filters:
... hwupload_cuda V->V Upload a system memory frame to a CUDA device.
... scale_npp V->V NVIDIA Performance Primitives video scaling and format conversion
slow
thànhfast
trong lệnh đầu tiên của bạn. CRF không được thực hiện trongnvenc
.