สำหรับการเข้ารหัสตาม CRF ให้ส่งอาร์กิวเมนต์ต่อไปนี้ในตัวอย่างด้านล่างเพื่อ FFmpeg:
-c:v h264_nvenc -rc:v vbr_hq -cq:v 19 -b:v 2500k -maxrate:v 5000k -profile:v high
แน่นอนคุณจะต้องปรับอัตราบิตเป้าหมายและcq
ค่าคงที่ 19 คือการตั้งค่าที่แนะนำว่าเป็น 'เหมือนกับภาพที่เห็น 0 แต่ยังคงการบีบอัดข้อมูลที่ดีให้เป็นขนาดไฟล์ ดูบทความนี้สำหรับข้อมูลเพิ่มเติมเกี่ยวกับสิ่งที่ CRF ทำ
โปรดทราบว่า-cq
สเกลเป็นลอการิทึมซึ่งหมายความว่า 0 นั้นไม่มีความสูญเสียเป็นหลักและ 51 นั้นจะแย่ที่สุดแน่นอน
สามารถปรับปรุงคุณภาพเพิ่มเติมได้โดยการเพิ่มตัวเลือกเช่นB-frames (จำกัด สิ่งนี้ไว้ที่ 3 มากที่สุดและต้องใช้โปรไฟล์ H.264 หลักขึ้นไปส่วนกำหนดค่าพื้นฐานไม่รองรับ B-frames เมื่อต้องการทำสิ่งนี้ให้ส่งผ่าน-bf {uint}
ไปที่ ตัวเข้ารหัสวิดีโอซึ่ง-bf:v 4
จะส่งผลให้ตัวเข้ารหัสใช้ 4 B-frames
ส่วนสำคัญของที่นี่คือ-cq:v 19
และ-rc:v vbr_hq
อาร์กิวเมนต์ที่ให้คุณปรับแต่งตัวเข้ารหัสด้วยบิตเรตตัวแปรที่ตั้งไว้และบิตเรตที่อนุญาตสูงสุด ( -b:v
และ-maxrate:v
) ในขณะที่ปฏิบัติตามค่า CRF ที่ 19
และในตอนนี้โน้ตเล็ก ๆ เกี่ยวกับ NVENC และทำการปรับแต่งเพื่อเข้ารหัสคุณภาพสูง:
NVENC เช่นตัวเข้ารหัสฮาร์ดแวร์อื่น ๆ มีข้อ จำกัด หลายประการและโดยเฉพาะอย่างยิ่งกับ HEVC นี่คือข้อ จำกัด ที่ทราบ:
บน Pascal:
สำหรับการเข้ารหัส HEVC จะมีข้อ จำกัด ดังต่อไปนี้:
- ไม่รองรับขนาด CTU ที่สูงกว่า 32
- ไม่รองรับ B-frames ใน HEVC
- รูปแบบพื้นผิวที่สนับสนุนโดยตัวเข้ารหัส NVENC จำกัด ช่องว่างสีที่ตัวเข้ารหัสสามารถทำงาน สำหรับตอนนี้เรามีการสนับสนุน 4: 2: 0 (8 บิต) และ 4: 4: 4 (สำหรับ 10 บิต) ไม่รองรับรูปแบบที่ไม่เกี่ยวข้องเช่น 4: 2: 2 10 บิต สิ่งนี้จะส่งผลกระทบต่อเวิร์กโฟลว์ที่จำเป็นต้องใช้ colorpaces ดังกล่าว
- การควบคุมการดูล่วงหน้ายัง จำกัด อยู่ที่ 32 เฟรม คุณอาจต้องการดูรายละเอียดเพิ่มเติมจากบรรณาธิการนี้
ทัวริงมีการปรับปรุงทั้งหมดที่มีให้สำหรับ Pascal ด้วยการเพิ่มการสนับสนุนเฟรม B สำหรับ HEVC และความสามารถในการใช้เฟรม B เป็นข้อมูลอ้างอิง ดูคำตอบนี้สำหรับตัวอย่างเกี่ยวกับความสามารถนี้
และบน Maxwell Gen 2 (GPU ชุด GM200x):
การเข้ารหัส HEVC ขาดคุณสมบัติต่อไปนี้:
ผลกระทบที่นี่สำหรับ Maxwell คือฉากการเคลื่อนไหวที่หนักด้วย HEVC ภายใต้บิตเรตที่ จำกัด อาจได้รับผลกระทบจากการประดิษฐ์ (blockiness) เนื่องจากฟังก์ชั่น lookahead ที่ขาดหายไปและความสามารถในการกรองลูปตัวอย่าง Pascal มีการปรับปรุงความสามารถนี้ค่อนข้างมาก แต่ขึ้นอยู่กับรุ่นของ SDK ที่ตัวเข้ารหัสวิดีโอสร้างขึ้นด้วยคุณสมบัติบางอย่างอาจไม่สามารถใช้ได้
ตัวอย่างเช่นโหมดการทำนายแบบถ่วงน้ำหนักสำหรับการเข้ารหัส H.264 บน Pascal ต้องใช้ NVENC SDK 8.0x และสูงกว่าและโหมดการเข้ารหัสนี้จะปิดใช้งานการสนับสนุน B-frame ด้วย ในทำนองเดียวกันการรวมกันของผู้ค้าส่งฮาร์ดแวร์ที่ใช้งาน Nvidia Performance Primitives (NPP) กับ NVENC อาจแนะนำการปรับปรุงประสิทธิภาพด้วยแอปพลิเคชันการปรับขนาดวิดีโอที่ค่าใช้จ่ายของการปรับขนาดการประดิษฐ์โดยเฉพาะอย่างยิ่งเนื้อหาที่อัปสเกล เช่นเดียวกันก็ส่งผลต่อไพพ์ไลน์การเข้ารหัสวิดีโอเนื่องจากฟังก์ชันการปรับขนาดของ NPP วิ่งออกจากแกน CUDA บน GPU และดังนั้นผลกระทบด้านประสิทธิภาพที่แนะนำโดยการโหลดเพิ่มเติมควรได้รับการวิเคราะห์เป็นกรณี ๆ ไปเพื่อพิจารณาว่าคุณภาพการทำงานหรือไม่ การแลกเปลี่ยนเป็นที่ยอมรับ
โปรดจำไว้ว่า: ตัวเข้ารหัสที่ใช้ฮาร์ดแวร์จะให้การปรับแต่งที่ค่อนข้างน้อยกว่าการปรับใช้ซอฟต์แวร์ที่เทียบเท่าและด้วยเหตุนี้ระยะทางและคุณภาพผลผลิตที่ยอมรับได้ของคุณจะแตกต่างกันเสมอ
และสำหรับการอ้างอิงของคุณ:
ด้วย FFmpeg คุณสามารถอ้างถึงการตั้งค่าเครื่องเข้ารหัสของการปรับแต่งโดย:
ffmpeg -h encoder {encoder-name}
ดังนั้นสำหรับตัวเข้ารหัสที่ใช้ NVENC คุณสามารถเรียกใช้:
ffmpeg -h encoder=hevc_nvenc
ffmpeg -h encoder=h264_nvenc
นอกจากนี้คุณยังสามารถดูเอ็นโคเดอเรเตอร์ที่ใช้ NVENC และสแครเลอร์ที่ใช้ NPP (ถ้าสร้างเช่นนี้) โดยการเรียกใช้:
for i in encoders decoders filters; do
echo $i:; ffmpeg -hide_banner -${i} | egrep -i "npp|cuvid|nvenc|cuda"
done
ตัวอย่างผลลัพธ์ใน testbed ของฉัน:
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
ไปfast
อยู่ในคำสั่งแรกของคุณ CRFnvenc
ไม่ได้ดำเนินการใน