Untuk penyandian berbasis CRF, berikan argumen berikut dalam cuplikan di bawah ini ke FFmpeg:
-c:v h264_nvenc -rc:v vbr_hq -cq:v 19 -b:v 2500k -maxrate:v 5000k -profile:v high
Tentu saja, Anda harus menyesuaikan laju bit target dan cq
nilai tetap . 19 adalah pengaturan yang direkomendasikan karena 'identik secara visual dengan 0, namun mempertahankan kompresi kompresi yang baik ke ukuran file. Lihat artikel ini untuk informasi lebih lanjut tentang apa yang dilakukan CRF.
Catat bahwa -cq
skalanya adalah logaritmik, artinya 0 pada dasarnya adalah lossless dan 51 akan menjadi yang terburuk absolut.
Kualitas dapat ditingkatkan lebih lanjut dengan menambahkan opsi seperti B-frame (batasi hingga 3, paling banyak, dan ini membutuhkan profil utama H.264 dan di atasnya. Profil dasar tidak mendukung B-frame. Untuk melakukan ini, teruskan -bf {uint}
ke encoder video, sehingga -bf:v 4
akan menghasilkan encoder menggunakan 4 B-frame.
Bagian-bagian penting di sini adalah argumen -cq:v 19
dan -rc:v vbr_hq
argumennya, yang memungkinkan Anda untuk menyetel encoder dengan bitrate variabel preset dan bitrate maksimum yang diijinkan ( -b:v
dan -maxrate:v
) sambil mematuhi nilai CRF 19.
Dan sekarang, catatan kecil tentang NVENC, dan menyetelnya untuk penyandian berkualitas tinggi:
NVENC, seperti encoder berbasis perangkat keras lainnya, memiliki beberapa keterbatasan, dan khususnya dengan HEVC, berikut adalah batasan yang diketahui:
Di Pascal:
Untuk encode HEVC, batasan berikut ini berlaku:
- Ukuran CTU di atas 32 tidak didukung.
- B-frame di HEVC juga tidak didukung.
- Format tekstur yang didukung oleh NVENC encoder membatasi ruang warna yang dapat digunakan oleh encoder. Untuk saat ini, kami memiliki dukungan untuk 4: 2: 0 (8-bit) dan 4: 4: 4 (untuk 10-bit). Format asing seperti 4: 2: 2 10-bit tidak didukung. Ini akan memengaruhi beberapa alur kerja di mana ruang warna semacam itu diperlukan.
- Kontrol ke depan juga dibatasi hingga 32 frame. Anda mungkin ingin melihat editorial ini untuk lebih jelasnya.
Turing memiliki semua perangkat tambahan yang tersedia untuk Pascal, dengan tambahan dukungan B-frame untuk HEVC dan kemampuan untuk menggunakan B-frame sebagai referensi. Lihat jawaban ini untuk contoh tentang kemampuan ini.
Dan di Maxwell Gen 2 (GPU seri GM200x):
Pengkodean HEVC tidak memiliki fitur berikut:
- Kemampuan filter loop Adaptive Offset (SAO).
- Kuantisasi adaptif
- Kontrol tingkat lihat-depan.
Dampak di sini untuk Maxwell adalah bahwa adegan berat gerak dengan HEVC di bawah bitrate terbatas dapat menderita artifacting (blockiness) karena fungsi lookahead yang hilang dan kemampuan penyaringan loop adaptif sampel offset (SAO) adaptif. Pascal agak meningkatkan kemampuan ini, tetapi tergantung pada versi SDK yang membuat video encoder, tidak semua fitur mungkin tersedia.
Misalnya, mode prediksi berbobot untuk enkode H.264 pada Pascal memerlukan NVENC SDK 8.0x dan di atasnya, dan mode enkode ini juga akan menonaktifkan dukungan bingkai-B. Demikian juga, kombinasi scaler berbasis perangkat keras yang menjalankan Nvidia Performance Primitives (NPP) dengan NVENC dapat memperkenalkan peningkatan kinerja dengan aplikasi penskalaan video dengan biaya penskalaan artefak, terutama dengan konten yang ditingkatkan. Hal yang sama juga berdampak pada pipa penyandian video karena fungsi penskalaan NPP menjalankan inti CUDA pada GPU, dan dengan demikian, dampak kinerja yang diperkenalkan oleh beban tambahan harus dianalisis berdasarkan kasus per kasus untuk menentukan apakah kualitas-kinerja trade-off dapat diterima.
Ingatlah ini: Encoder berbasis perangkat keras akan selalu menawarkan penyesuaian yang sedikit lebih rendah daripada implementasi berbasis perangkat lunak yang setara, dan karenanya, jarak tempuh Anda dan kualitas output yang dapat diterima akan selalu berbeda.
Dan untuk referensi Anda:
Dengan FFmpeg, Anda selalu dapat merujuk ke pengaturan penyandi untuk penyesuaian dengan:
ffmpeg -h encoder {encoder-name}
Jadi, untuk enkode berbasis NVENC, Anda dapat menjalankan:
ffmpeg -h encoder=hevc_nvenc
ffmpeg -h encoder=h264_nvenc
Anda juga dapat melihat semua encoders berbasis NVENC dan scaler berbasis NPP (jika dibangun seperti itu) dengan menjalankan:
for i in encoders decoders filters; do
echo $i:; ffmpeg -hide_banner -${i} | egrep -i "npp|cuvid|nvenc|cuda"
done
Contoh hasil pada testbed saya:
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
kefast
dalam perintah pertama Anda. CRF tidak diterapkan dinvenc
.