Skip to content

Instantly share code, notes, and snippets.

@Brainiarc7
Forked from nico-lab/h264_nvenc.txt
Created July 22, 2019 18:41
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Brainiarc7/26f15a7f6f316e4ecae2c008b99880e1 to your computer and use it in GitHub Desktop.
Save Brainiarc7/26f15a7f6f316e4ecae2c008b99880e1 to your computer and use it in GitHub Desktop.
ffmpeg -h encoder=h264_nvenc
Encoder h264_nvenc [NVIDIA NVENC H.264 encoder]:
General capabilities: delay hardware
Threading capabilities: none
Supported pixel formats: yuv420p nv12 p010le yuv444p p016le yuv444p16le bgr0 rgb0 cuda d3d11
h264_nvenc AVOptions:
-preset <int> E..V..... Set the encoding preset (from 0 to 11) (default medium)
default E..V.....
slow E..V..... hq 2 passes
medium E..V..... hq 1 pass
fast E..V..... hp 1 pass
hp E..V.....
hq E..V.....
bd E..V.....
ll E..V..... low latency
llhq E..V..... low latency hq
llhp E..V..... low latency hp
lossless E..V.....
losslesshp E..V.....
-profile <int> E..V..... Set the encoding profile (from 0 to 3) (default main)
baseline E..V.....
main E..V.....
high E..V.....
high444p E..V.....
-level <int> E..V..... Set the encoding level restriction (from 0 to 51) (default auto)
auto E..V.....
1 E..V.....
1.0 E..V.....
1b E..V.....
1.0b E..V.....
1.1 E..V.....
1.2 E..V.....
1.3 E..V.....
2 E..V.....
2.0 E..V.....
2.1 E..V.....
2.2 E..V.....
3 E..V.....
3.0 E..V.....
3.1 E..V.....
3.2 E..V.....
4 E..V.....
4.0 E..V.....
4.1 E..V.....
4.2 E..V.....
5 E..V.....
5.0 E..V.....
5.1 E..V.....
-rc <int> E..V..... Override the preset rate-control (from -1 to INT_MAX) (default -1)
constqp E..V..... Constant QP mode
vbr E..V..... Variable bitrate mode
cbr E..V..... Constant bitrate mode
vbr_minqp E..V..... Variable bitrate mode with MinQP (deprecated)
ll_2pass_quality E..V..... Multi-pass optimized for image quality (deprecated)
ll_2pass_size E..V..... Multi-pass optimized for constant frame size (deprecated)
vbr_2pass E..V..... Multi-pass variable bitrate mode (deprecated)
cbr_ld_hq E..V..... Constant bitrate low delay high quality mode
cbr_hq E..V..... Constant bitrate high quality mode
vbr_hq E..V..... Variable bitrate high quality mode
-rc-lookahead <int> E..V..... Number of frames to look ahead for rate-control (from 0 to INT_MAX) (default 0)
-surfaces <int> E..V..... Number of concurrent surfaces (from 0 to 64) (default 0)
-cbr <boolean> E..V..... Use cbr encoding mode (default false)
-2pass <boolean> E..V..... Use 2pass encoding mode (default auto)
-gpu <int> E..V..... Selects which NVENC capable GPU to use. First GPU is 0, second is 1, and so on. (from -2 to INT_MAX) (default any)
any E..V..... Pick the first device available
list E..V..... List the available devices
-delay <int> E..V..... Delay frame output by the given amount of frames (from 0 to INT_MAX) (default INT_MAX)
-no-scenecut <boolean> E..V..... When lookahead is enabled, set this to 1 to disable adaptive I-frame insertion at scene cuts (default false)
-forced-idr <boolean> E..V..... If forcing keyframes, force them as IDR frames. (default false)
-b_adapt <boolean> E..V..... When lookahead is enabled, set this to 0 to disable adaptive B-frame decision (default true)
-spatial-aq <boolean> E..V..... set to 1 to enable Spatial AQ (default false)
-temporal-aq <boolean> E..V..... set to 1 to enable Temporal AQ (default false)
-zerolatency <boolean> E..V..... Set 1 to indicate zero latency operation (no reordering delay) (default false)
-nonref_p <boolean> E..V..... Set this to 1 to enable automatic insertion of non-reference P-frames (default false)
-strict_gop <boolean> E..V..... Set 1 to minimize GOP-to-GOP rate fluctuations (default false)
-aq-strength <int> E..V..... When Spatial AQ is enabled, this field is used to specify AQ strength. AQ strength scale is from 1 (low) - 15 (aggressive) (from 1 to 15) (default 8)
-cq <float> E..V..... Set target quality level (0 to 51, 0 means automatic) for constant quality mode in VBR rate control (from 0 to 51) (default 0)
-aud <boolean> E..V..... Use access unit delimiters (default false)
-bluray-compat <boolean> E..V..... Bluray compatibility workarounds (default false)
-init_qpP <int> E..V..... Initial QP value for P frame (from -1 to 51) (default -1)
-init_qpB <int> E..V..... Initial QP value for B frame (from -1 to 51) (default -1)
-init_qpI <int> E..V..... Initial QP value for I frame (from -1 to 51) (default -1)
-qp <int> E..V..... Constant quantization parameter rate control method (from -1 to 51) (default -1)
-weighted_pred <int> E..V..... Set 1 to enable weighted prediction (from 0 to 1) (default 0)
-coder <int> E..V..... Coder type (from -1 to 2) (default default)
default E..V.....
auto E..V.....
cabac E..V.....
cavlc E..V.....
ac E..V.....
vlc E..V.....
-b_ref_mode <int> E..V..... Use B frames as references (from 0 to 2) (default disabled)
disabled E..V..... B frames will not be used for reference
each E..V..... Each B frame will be used for reference
middle E..V..... Only (number of B frames)/2 will be used for reference
-a53cc <boolean> E..V..... Use A53 Closed Captions (if available) (default true)
@Zachxz0
Copy link

Zachxz0 commented Dec 12, 2019

Hi, I just set the low latency parameters for the nvidia encoder on ffmpeg, but it always delay with 2 frames, the parameters i set is :av_opt_set(sys->codecEncoderContext, "preset", "llhq", 0);
av_opt_set(sys->codecEncoderContext, "rc", "cbr_ld_hq", 0);
av_opt_set(sys->codecEncoderContext, "tune", "zerolatency", 1);
is there any thing wrong ,
thanks a lot :)

@Brainiarc7
Copy link
Author

Brainiarc7 commented Dec 12, 2019 via email

@Zachxz0
Copy link

Zachxz0 commented Dec 12, 2019

@Brainiarc7 Thanks for your response ! Should I set a constant bitrate, and how to set GOP to be infinite?

@Zachxz0
Copy link

Zachxz0 commented Dec 12, 2019

@Brainiarc7 It didn't work when I had set ""codecEncoderContext->gop_size = -1"" ""codecEncoderContext->rc_buffer_size = 40k/30"" I set the bitrate 40k, and framerate 30

@Zachxz0
Copy link

Zachxz0 commented Dec 12, 2019

@Brainiarc7 I try to set the rc_buffer_size 0, but after calling the avcodec_open2(), the rc_buffer_size was reset to 80k, the bitrate is 40k

@Zachxz0
Copy link

Zachxz0 commented Dec 12, 2019

@Brainiarc7 Maybe I should read source code of ffmpeg to figure out what is going on

@Brainiarc7
Copy link
Author

On this: codecEncoderContext->rc_buffer_size = 40k/30
That should be a numeric, in float. The value should be 1333.33, not a fraction.

@Zachxz0
Copy link

Zachxz0 commented Dec 12, 2019

@Brainiarc7 , yeah, actual value is a numeric

@Brainiarc7
Copy link
Author

@Jack-256 for zero latency, try:

:av_opt_set(sys->codecEncoderContext->delay = 0);

Then retest and report back.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment