Details about NVENC in Turing?

The verified way is using FFMPEG or LIBAV from command line (ffmpeg or avconv) or over library API (or direct API NVIDIA video codec SDK). Please check documentation https://developer.nvidia.com/designworks/dl/Using_FFmpeg_with_NVIDIA_GPU_Hardware_Acceleration-pdf, examples https://developer.nvidia.com/ffmpeg, blogs … “Plex Media Server” should use FFMPEG with this features.

Yes, same issue with latest Windows ffmpeg from March 11, 2020 (ffmpeg-20200311-36aaee2-win64-static), under Windows 7 x64, GeForce Game Ready Driver 442.59 from March 10, 2020, GIGABYTE GeForce RTX 2080 SUPER WINDFORCE OC 8G, model # GV-N208SWF3OC-8GD.

I see that “b_ref_mode each” is not supported by the GPU, and that “b_ref_mode middle” produces tons of warnings in the output about invalid DTS and PTS.

My command line is:

ffmpeg -v verbose -threads auto -probesize 9000000000 -analyzeduration 9000000000 -hwaccel cuda -hwaccel_output_format cuda -f concat -safe 0 -i ffmpeginputs.txt -filter_complex “concat=n=1:v=1:a=1 [vout] [aout]” -map “[vout]” -map “[aout]” -vcodec hevc_nvenc -bf 4 -temporal_aq 1 -rc-lookahead 20 -g 250 -vsync 0 -b_ref_mode 2 -dpb_size 3 “%FOLDERNAME%.mp4”

Not sure if the “-hwaccel_output_format cuda” is needed, but same DTS/PTS errors whether I have that or not. I haven’t found a combination of -bf and -dpb_size that works. Anyone have any suggestions? I do see that it’s an open bug at #7303 (h264_nvenc (and hevc_nvenc) with b_ref_mode middle creates invalid video while streaming) – FFmpeg

The SDK include nvEncodeAPI.h in v9.2 seems to indicate that B-frame each is only not supported on H264. Now I guess it’ll depend on the card as well, but it’s not quite true to say Turing supports B-Frames if you can’t use it all. It’s like half an implementation. Is that something they can enhance?

/**

  • B-frame used as reference modes
    */
    typedef enum _NV_ENC_BFRAME_REF_MODE
    {
    NV_ENC_BFRAME_REF_MODE_DISABLED = 0x0, /< B frame is not used for reference */
    NV_ENC_BFRAME_REF_MODE_EACH = 0x1, /
    < Each B-frame will be used for reference. currently not supported for H.264 */
    NV_ENC_BFRAME_REF_MODE_MIDDLE = 0x2, /**< Only(Number of B-frame)/2 th B-frame will be used for reference */
    } NV_ENC_BFRAME_REF_MODE;

Invalid DTS issue with b_ref_mode middle was fixed in git.videolan.org Git - ffmpeg.git/commitdiff

Everybody please go here and spam )))) You will say thank you to ffmpeg devs (me and others) by that. https://github.com/obsproject/obs-studio/issues/2374

So using latest Zeranoe Windows ffmpeg build I see the following:

b_ref_mode each not supported for HEVC

I see that “b_ref_mode each” is not supported by the GPU

#8809 (hevc_nvenc / b_ref_mode each is not working) – FFmpeg
https://trac.ffmpeg.org/ticket/8809

Can a Nvidia dev clarify whether HEVC is undeed supported “each” (it looks like it with ragaya nice code NVEnc/rtx2070.txt at master · rigaya/NVEnc · GitHub and my 2080 Ti). Also we need to know whether ffmpeg even has all done for “each”. Well, at least middle is fixed.

#8809 is IMHO fixed in #8809 (hevc_nvenc / b_ref_mode each is not working) – FFmpeg

P.S. tested it, it is fixed.

b_ref_mode each is now supported for H264: FFmpeg/nv-codec-headers@7947f29#diff-7e89fa6759c697c70618e5debd0af1d85b415ec339f16850993dc23c39ae68c3L671

1 Like