Selur's Little Message Board

Full Version: NVENC x265 Features
You're currently viewing a stripped down version of our content. View the full version with proper formatting.

404fox

I am wondering if there could be more options added to NVEnc HEVC settings.
Specifically, disable SAO, psy-RDO, AQ, and I/B-frame controls.
'NVEnc HEVC' uses NVEncC which uses the NVIDIA SDK (https://developer.nvidia.com/nvidia-video-codec-sdk) to access the onboard encoder chip of your NVIDIA card.
Calling 'NVEncC' shows the options NVEncC offers, anything that made sense to me (and is gpu based) of those options is exposed by Hybrid.
So unless both the SDK offer an option to support those things (ask NVIDIA) and rigaya supports them through NVEncC (https://github.com/rigaya/NVEnc/tree/master/NVEncC) I can't offer those options inside Hybrid.
-> Nothing I can do about it. Smile

Cu Selur

404fox

Thanks for the response.
I cannot figure out the conditions for using AQ strength and temporal AQ are, they are disabled for me.
Weighted P frame is not in Hybrid. I noticed the issues in the github, but I think it should be included even without compatibility detection, since there are some who will be able to use it.
Hybrid disables options when they are not supported by the graphic card and driver combination (check 'NVEncC --check-features') or when another option is in conflict with them. For me GeForce GTX 980ti for example, I too can't use those options when encoding to H.265, but I can when encoding to H.264.
Here's the output I get from check-features:
Code:
List of available features.
Codec: H.264/AVC
Max Bframes               4
RC Modes                  63
Field Encoding            1
MonoChrome                0
FMO                       0
Quater-Pel MV             1
B Direct Mode             1
CABAC                     1
Adaptive Transform        1
Max Temporal Layers       0
Hierarchial P Frames      0
Hierarchial B Frames      0
Max Level                 51
Min Level                 1
4:4:4                     1
Max Width                 4096
Max Height                4096
Dynamic Resolution Change 1
Dynamic Bitrate Change    1
Forced constant QP        1
Dynamic RC Mode Change    0
Subframe Readback         1
Constrained Encoding      1
Intra Refresh             1
Custom VBV Bufsize        1
Dynamic Slice Mode        1
Ref Pic Invalidiation     1
PreProcess                0
Async Encoding            1
Max MBs                   65536
MAX MB per sec            983040
Lossless                  1
SAO                       0
Me Only Mode              1
Lookahead                 1
AQ (temporal)             1
10bit depth               0

Codec: H.265/HEVC
Max Bframes               0
RC Modes                  63
Field Encoding            0
MonoChrome                0
Quater-Pel MV             1
B Direct Mode             0
Max Temporal Layers       0
Hierarchial P Frames      0
Hierarchial B Frames      0
Max Level                 62
Min Level                 1
4:4:4                     0
Max Width                 4096
Max Height                4096
Dynamic Resolution Change 1
Dynamic Bitrate Change    1
Forced constant QP        1
Dynamic RC Mode Change    0
Subframe Readback         1
Constrained Encoding      0
Intra Refresh             1
Custom VBV Bufsize        1
Dynamic Slice Mode        1
Ref Pic Invalidiation     1
PreProcess                0
Async Encoding            1
Max MBs                   65536
MAX MB per sec            983040
Lossless                  0
SAO                       0
Me Only Mode              0
Lookahead                 1
AQ (temporal)             0
10bit depth               0
+ calling just 'NVEncC' gives me:
Code:
NVEncC (x64) 3.06 by rigaya [NVENC API v7.1, CUDA 8.0], Feb  5 2017 21:10:22
reader: raw, avs, vpy, avcuvid [H.264/AVC, H.265/HEVC, MPEG1, MPEG2, VP8, VP9]
Usage: NVEncC.exe [Options] -i <input file> -o <output file>

Input can be avs, raw YUV, YUV4MPEG2(y4m).
When Input is in raw format, fps, input-res is required.

Ouput format will be in raw H.264/AVC or H.265/HEVC ES.

Example:
  NVEncC -i "<avsfilename>" -o "<outfilename>"
  avs2pipemod -y4mp "<avsfile>" | NVEncC --y4m -i - -o "<outfilename>"

Information Options:
-h,-? --help                    print help
-v,--version                    print version info
   --check-device               show DeviceId for GPUs available on system   --check-hw [<int>]           check NVEnc codecs for specefied DeviceId
                                  if unset, will check DeviceId #0
   --check-features [<int>]     check for NVEnc Features for specefied DeviceId
                                  if unset, will check DeviceId #0
   --check-environment          check for Environment Info
   --check-avversion            show dll version
   --check-codecs               show codecs available
   --check-encoders             show audio encoders available
   --check-decoders             show audio decoders available
   --check-formats              show in/out formats available
   --check-protocols            show in/out protocols available
   --check-filters              show filters available


Basic Encoding Options:
-d,--device <int>               set DeviceId used in NVEnc (default:0)

-i,--input <filename>           set input filename
-o,--output <filename>          set output filename

Input formats (auto detected from extension of not set)
   --raw                        set input as raw format
   --y4m                        set input as y4m format
   --avs                        set input as avs format
   --vpy                        set input as vpy format
   --vpy-mt                     set input as vpy(mt) format
   --avcuvid [<string>]         use libavformat + cuvid for input
                                 this enables full hw transcode and resize.
                                 avcuvid mode could be set as a  option
                                  - native (default)
                                  - cuda
   --avsw                       set input to use avcodec + sw deocder
   --input-analyze <int>       set time (sec) which reader analyze input file.
                                 default: 5 (seconds).
                                 could be only used with avcuvid/avsw reader.
                                 use if reader fails to detect audio stream.
   --video-track <int>          set video track to encode in track id
                                 1 (default)  highest resolution video track
                                 2            next high resolution video track
                                   ...
                                 -1           lowest resolution video track
                                 -2           next low resolution video track
                                   ...
   --video-streamid <int>       set video track to encode in stream id
   --audio-source <string>      input extra audio file
   --audio-file [<int>?][<string>:]<string>
                                extract audio into file.
                                 could be only used with avcuvid/avsw reader.
                                 below are optional,
                                  in [<int>?], specify track number to extract.
                                  in [<string>?], specify output format.
   --trim <int>:<int>[,<int>:<int>]...
                                trim video for the frame range specified.
                                 frame range should not overwrap each other.
   --seek [<int>:][<int>:]<int>[.<int>] (hh:mm:ss.ms)
                                skip video for the time specified,
                                 seek will be inaccurate but fast.
   --input-format <string>      set input format of input file.
                                 this requires use of avcuvid/avsw reader.
-f,--output-format <string>     set output format of output file.
                                 if format is not specified, output format will
                                 be guessed from output file extension.
                                 set "raw" for H.264/ES output.
   --audio-copy [<int>[,...]]   mux audio with video during output.
                                 could be only used with
                                 avcuvid/avsw reader and avcodec muxer.
                                 by default copies all audio tracks.
                                 "--audio-copy 1,2" will extract
                                 audio track #1 and #2.
   --audio-codec [<int>?]<string>
                                encode audio to specified format.
                                  in [<int>?], specify track number to encode.
   --audio-bitrate [<int>?]<int>
                                set encode bitrate for audio (kbps).
                                  in [<int>?], specify track number of audio.
   --audio-ignore-decode-error <int>  (default: 10)
                                set numbers of continuous packets of audio decode
                                 error to ignore, replaced by silence.
   --audio-ignore-notrack-error ignore error when audio track is unfound.
   --audio-samplerate [<int>?]<int>
                                set sampling rate for audio (Hz).
                                  in [<int>?], specify track number of audio.
   --audio-resampler <string>   set audio resampler.
                                  swr (swresampler: default), soxr (libsoxr)
   --audio-stream [<int>?][<string1>][:<string2>][,[<string1>][:<string2>]][..
       set audio streams in channels.
         in [<int>?], specify track number to split.
         in <string1>, set input channels to use from source stream.
           if unset, all input channels will be used.
         in <string2>, set output channels to mix.
           if unset, all input channels will be copied without mixing.
       example1: --audio-stream FL,FR
         splitting dual mono audio to each stream.
       example2: --audio-stream :stereo
         mixing input channels to stereo.
       example3: --audio-stream 5.1,5.1:stereo
         keeping 5.1ch audio and also adding downmixed stereo stream.
       usable simbols
         mono       = FC
         stereo     = FL + FR
         2.1        = FL + FR + LFE
         3.0        = FL + FR + FC
         3.0(back)  = FL + FR + BC
         3.1        = FL + FR + FC + LFE
         4.0        = FL + FR + FC + BC
         quad       = FL + FR + BL + BR
         quad(side) = FL + FR + SL + SR
         5.0        = FL + FR + FC + SL + SR
         5.1        = FL + FR + FC + LFE + SL + SR
         6.0        = FL + FR + FC + BC + SL + SR
         6.0(front) = FL + FR + FLC + FRC + SL + SR
         hexagonal  = FL + FR + FC + BL + BR + BC
         6.1        = FL + FR + FC + LFE + BC + SL + SR
         6.1(front) = FL + FR + LFE + FLC + FRC + SL + SR
         7.0        = FL + FR + FC + BL + BR + SL + SR
         7.0(front) = FL + FR + FC + FLC + FRC + SL + SR
         7.1        = FL + FR + FC + LFE + BL + BR + SL + SR
         7.1(wide)  = FL + FR + FC + LFE + FLC + FRC + SL + SR
   --audio-filter [<int>?]<string>
                                set audio filter.
                                  in [<int>?], specify track number of audio.
   --chapter-copy               copy chapter to output file.
   --chapter <string>           set chapter from file specified.
   --sub-copy [<int>[,...]]     copy subtitle to output file.
                                 these could be only used with
                                 avcuvid/avsw reader and avcodec muxer.
                                 below are optional,
                                  in [<int>?], specify track number to copy.

   --avsync <string>            method for AV sync (default: through)
                                 through  ... assume cfr, no check but fast
                                 forcecfr ... check timestamp and force cfr.
-m,--mux-option <string1>:<string2>
                                set muxer option name and value.
                                 these could be only used with
                                 avcuvid/avsw reader and avcodec muxer.
   --input-res <int>x<int>        set input resolution
   --crop <int>,<int>,<int>,<int> crop pixels from left,top,right,bottom
                                    left crop is unavailable with avcuivid reader
   --output-res <int>x<int>     set output resolution
   --fps <int>/<int> or <float> set framerate

-c,--codec <string>             set ouput codec
                                  h264 (or avc), h265 (or hevc)
   --profile <string>           set codec profile
                                  H.264: baseline, main, high(default), high444
                                  HEVC : main, main10, main444
   --level <string>             set codec level
                                - H.264: auto(default), 1, 1b, 1.1, 1.2, 1.3
                                         2, 2.1, 2.2, 3, 3.1, 3.2, 4, 4.1, 4.2
                                         5, 5.1, 5.2
                                - HEVC:  auto(default), 1, 2, 2.1, 3, 3.1, 4
                                         4.1, 5, 5.1, 5.2, 6, 6.1, 6.2
   --output-depth <int>         set output bit depth ( 8(default), 10 )
   --sar <int>:<int>            set SAR ratio
   --dar <int>:<int>            set DAR ratio

   --cqp <int> or               encode in Constant QP mode
         <int>:<int>:<int>        Default: <I>:<P>:<B>=<20>:<23>:<25>
   --vbr <int>                  set bitrate for VBR mode (kbps)
   --vbrhq <int>                set bitrate for VBR (High Quality) mode (kbps)
   --cbr <int>                  set bitrate for CBR mode (kbps)
   --cbrhq <int>                set bitrate for CBR (High Quality) mode (kbps)
                                  Default: 7500 kbps

   --vbr-quality <int>          set target quality for VBR mode (0-51, 0 = auto)
   --max-bitrate <int>          set Max Bitrate (kbps)
   --qp-init <int> or           set initial QP
             <int>:<int>:<int>    Default: auto
   --qp-max <int> or            set max QP
            <int>:<int>:<int>     Default: unset
   --qp-min <int> or            set min QP
             <int>:<int>:<int>    Default: unset
   --lookahead <int>            enable lookahead and set lookahead depth (1-32)
                                  Default: 16 frames
   --gop-len <int>              set GOP Length / Default: 0 frames
   --strict-gop                 avoid GOP len fluctuation
   --no-i-apdat                 disable adapt. I frame insertion on lookahead mode
   --no-b-apdat                 disable adapt. B frame insertion on lookahead mode
                                  Default: off
-b,--bframes <int>              set B frames / Default 1457204848 frames
   --ref <int>                  set Ref frames / Default 3 frames
   --enable-ltr                 enable LTR (Long Term Reference pictures)
   --aq                         enable spatial adaptive quantization
   --aq-temporal                enable temporal adaptive quantization (FOR H.264 ONLY)
   --aq-strength <int>          set aq strength (weak 1 - 15 strong)
                                  FOR H.264 ONLY, Default: auto(= 0)
   --mv-precision <string>      set MV Precision / Default: Q-pel
                                  Q-pel    (High Quality)
                                  half-pel
                                  full-pel (Low Quality)
   --vbv-bufsize <int>          set vbv buffer size (kbit) / Default: auto
   --vpp-deinterlace <string>   set deinterlace mode / Default: none
                                  none, bob, adaptive (normal)
                                  available only with avcuvid reader
   --vpp-resize <string>        default, nn, npp_linear, cubic
                                cubic_bspline, cubic_catmull, cubic_b05c03
                                super, lanczos, bilinear, spline36
                                 default: default
   --vpp-gauss <int>            disabled, 3, 5, 7
                                 default: disabled
   --vpp-knn [<param1>=<value>][,<param2>=<value>][...]     enable denoise filter by K-nearest neighbor.
    params
      radius=<int>              set radius of knn (default=3)
      strength=<float>          set strength of knn (default=0.08, 0.0-1.0)
      lerp=<float>              set balance of orig and blended pixel (default=0.20)
                                  lower value results strong denoise.
      th_lerp=<float>           set threshold for detecting edge (default=0.80, 0.0-1.0)
                                  higher value will preserve edge.
   --vpp-pmd [<param1>=<value>][,<param2>=<value>][...]     enable denoise filter by pmd.
    params
      apply_count=<int>         set count to apply pmd denoise (default=2)
      strength=<float>          set strength of pmd (default=100.00, 0.0-100.0)
      threshold=<float>         set threshold of pmd (default=100.00, 0.0-255.0)
                                  lower value will preserve edge.
   --vpp-delogo <string>        set delogo file path
   --vpp-delogo-select <string> set target logo name or auto select file
                                 or logo index starting from 1.
   --vpp-delogo-pos <int>:<int> set delogo pos offset
   --vpp-delogo-depth <int>     set delogo depth [default:-544]
   --vpp-delogo-y  <int>        set delogo y  param
   --vpp-delogo-cb <int>        set delogo cb param
   --vpp-delogo-cr <int>        set delogo cr param
   --vpp-perf-monitor           check duration of each filter.
                                  may decrease overall transcode performance.
   --videoformat <string>       undef, ntsc, component, pal, secam, mac
                                 default: undef
   --colormatrix <string>       undef, auto, bt709, smpte170m, bt470bg
                                smpte240m, YCgCo, fcc, GBR, bt2020nc
                                bt2020c
                                 default: undef
   --colorprim <string>         undef, auto, bt709, smpte170m, bt470m
                                bt470bg, smpte240m, film, bt2020
                                 default: undef
   --transfer <string>          undef, auto, bt709, smpte170m, bt470m
                                bt470bg, smpte240m, linear, log100, log316
                                iec61966-2-4, bt1361e, iec61966-2-1
                                bt2020-10, bt2020-12, smpte-st-2084
                                smpte-st-428, arib-srd-b67
                                 default: undef
   --fullrange                  set fullrange
   --output-buf <int>           buffer size for output in MByte
                                 default 8 MB (0-128)
   --max-procfps <int>         limit encoding performance to lower resource usage.
                                 default:0 (no limit)
   --output-thread <int>        set output thread num
                                 -1: auto (= default)
                                  0: disable (slow, but less memory usage)
                                  1: use one thread

   --log <string>               set log file name
   --log-level <string>         set log level
                                  debug, info(default), warn, error
   --log-framelist <string>     output frame info of avcuvid reader to path

H.264/AVC
   --tff                        same as --interlaced tff
   --bff                        same as --interlaced bff
   --interlaced <string>        interlaced encoding
                                  tff, bff
   --cabac                      use CABAC
   --cavlc                      use CAVLC (no CABAC)
   --bluray                     for bluray / Default: off
   --lossless                   for lossless / Default: off
   --(no-)deblock               enable(disable) deblock filter

H.265/HEVC
   --cu-max <int>               set max CU size
   --cu-min  <int>              set min CU size
                                  8, 16, 32 are avaliable
    warning: it is not recommended to use --cu-max or --cu-min,
             leaving it auto will enhance video quality.
important part is the second one:
Code:
--aq                         enable spatial adaptive quantization
   --aq-temporal                enable temporal adaptive quantization (FOR H.264 ONLY)
   --aq-strength <int>          set aq strength (weak 1 - 15 strong)
                                  FOR H.264 ONLY, Default: auto(= 0)

=> Similar outputs on your system should explain why Hybrid acts the way it does.

Cu Selur

404fox

oh
the version is old.
Please update for the new features.