Jump to content
Paweł K.

NVIDIA GPU acceleration for transcoding

Recommended Posts

Paweł K.

I'm trying to figure out how to configure ffmpegprefs.ini to use GPU of nvidia card to transcode stream

I've modify ffmpegprefs.ini according to wiki HWAccelIntro,  unfortunately streaming not working

 

As a client I'm using Kodi 17,3

 

[TS HD 3600 kbit]
Cmd=-analyzeduration {analyzeduration} {offset} {realtime} -i "{infile}" -f mpegts -pat_period 0.2 -hwaccel cuvid -c:v h264_cuvid -bufsize 6400k -maxrate 3200k -crf 20 -g 50 {framerate} -map 0:v:0 -map 0:a:0 -vf "yadif=0:-1:1, scale={scalex}:{scaley}" -preset {vpreset} -tune film -vprofile main -level 30 -acodec libmp3lame -ab 128k -ar 44100 -ac 2 -async 1 -y "{outfile}"
maxWidth=1280
maxHeight=720
MimeType=video/mpeg
Ext=.ts
Delay=2000

Anyone have idea how to modify ffmpegprefs.ini to use GPU to transcoding ?

Share this post


Link to post
feedzapper

Don't use the -hwaccel option !

Use the -c:v h264_nvenc codec for NVIDIA GPU encoding ...

The command line syntax for the codec are as follows :

Encoder h264_nvenc [NVIDIA NVENC H.264 encoder]:
    General capabilities: delay 
    Threading capabilities: none
    Supported pixel formats: yuv420p nv12 p010le yuv444p 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.... 

well, don't ask me for details.

Here is no NVIDA GPU on my systems ...

 

Share this post


Link to post
feedzapper

you may have to test this commandline :

(if does not work, use the software decoding -> remove "-hwaccel cuvid -c:v h264_cuvid" from the command line

 

 

[TS HD 3600 kbit]
Cmd=-analyzeduration {analyzeduration} {offset} {realtime} -hwaccel cuvid -c:v h264_cuvid -i "{infile}" -f mpegts -pat_period 0.2 -c:v h264_nvenc -bufsize 6400k -maxrate 3200k -crf 20 -g 50 {framerate} -map 0:v:0 -map 0:a:0 -vf "yadif=0:-1:1, scale={scalex}:{scaley}" -preset {vpreset} -tune film -vprofile main -level 30 -acodec libmp3lame -ab 128k -ar 44100 -ac 2 -async 1 -y "{outfile}"
maxWidth=1280
maxHeight=720
MimeType=video/mpeg
Ext=.ts
Delay=2000

Share this post


Link to post
yakov2905

Hi.

1. If it possible to add {IF} {End If} statement in "Cmd=" line of  ffmpegprefs.ini file? as it done in Tasks (to generate mkv).

To get full HW transcode on NVIDIA GPU, I use two separate lines, one is for H264 sourse dvb TS stream, second is for MPEG2 source dvb TS stream:

[TS H264 HD 3600 kbit]
Cmd=-analyzeduration {analyzeduration} {offset} {realtime} -hwaccel cuvid -c:v h264_cuvid -dent 2 -drop_second_field 1 -i "{infile}" -f mpegts -pat_period 0.2 -c:v h264_nvenc -bufsize 6400k -maxrate 3200k -rc vbr_hq -cq 1 -g 50 {framerate} -map 0:v:0 -map 0:a:0 -preset slow -vprofile high -level 30 -acodec libmp3lame -ab 128k -ar 44100 -ac 2 -async 1 -y "{outfile}"
maxWidth=1280
maxHeight=720
MimeType=video/mpeg
Ext=.ts

 

[TS MPEG2 HD 3600 kbit]
Cmd=-analyzeduration {analyzeduration} {offset} {realtime} -hwaccel cuvid -c:v mpeg2_cuvid -dent 2 -drop_second_field 1 -i "{infile}" -f mpegts -pat_period 0.2 -c:v h264_nvenc -bufsize 6400k -maxrate 3200k -rc vbr_hq -cq 1 -g 50 {framerate} -map 0:v:0 -map 0:a:0 -preset slow -vprofile high -level 30 -acodec libmp3lame -ab 128k -ar 44100 -ac 2 -async 1 -y "{outfile}"
maxWidth=1280
maxHeight=720
MimeType=video/mpeg
Ext=.ts

2. Where I can change -preset {vpreset} list? veryfast, ultrafast, placebo ...etc, are not available for h264_nvenc, but this API encoder has their own preset list: slow, medium, hq, llhq ...etc.

Share this post


Link to post
Griga
4 hours ago, yakov2905 said:

If it possible to add {IF} {End If} statement in "Cmd=" line of  ffmpegprefs.ini file?

 

No. Only conditions supported by FFmpeg are available in the commandline.

 

4 hours ago, yakov2905 said:

Where I can change -preset {vpreset} list?

 

It is not configurable.

 

Share this post


Link to post
laola

Does this mean that it isn't possible to use NVIDIA HW acceleration ? I am also using Kodi as front end and I am looking for the right transcoding parameters to use HW accelaration...

Share this post


Link to post
feedzapper

I started some research about minimum hardware requirements for the "h264_nvenc" nvidia hardware GPU encoding with FFMPEG.

 

Note : the most popular cheap Nvidia GT1030 is not be able to support any hardware GPU "encoding" !

 

For more Information look at these GPU Matrix list :

https://developer.nvidia.com/video-encode-decode-gpu-support-matrix

 

 

  

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×