What is the difference between libx264 and h264_nvenc?

Jonathan Morrall picture Jonathan Morrall · Aug 16, 2019 · Viewed 10.9k times · Source

I am trying to encode some videos but when I use the libx264 they don't work but change the codec to h264_nvenc and they play.

If I change the profile to baseline when using the libx264 the videos play.

what is the difference? I could use the h264_nvenc but I want to use the libx264 for the better quality for storage.

My code

bin\ffmpeg -i "Input-File" -c:v h264_nvenc -bf 3 -b_strategy 2 -temporal-aq 1 -rc-lookahead 20 -profile:v high -preset slow -rc vbr_hq -rc:v vbr_hq -qmin 0 -cq:v 19 -b:v 900k -maxrate:v 5000k -bufsize 2000K -c:a aac -ar 48000 -b:a 128k "Output-File.mp4"

Answer

Markus Schumann picture Markus Schumann · Aug 16, 2019

h264_nvenc uses the NVidia hardware assisted H.264 video encoder. libx264 is a software (CPU) based H.264 encoder.

I would guess that libx264 delivers better quality than h264_nvenc for the same bitrate.

h264_nvenc is probably faster and uses less power. h264_nvenc is only available on NVIDIA hardware.