VideoHelp Forum

Try DVDFab and download streaming video, copy, convert or make Blu-rays,DVDs! Download free trial !
+ Reply to Thread
Results 1 to 5 of 5
Thread
  1. Hi everyone,

    first post and new forum member here. Thanks for letting me be part of the community.

    While being fairly new to video encoding itself, I think I already know a little bit about the background workings.

    Here is what I'm trying to solve either through a GUI or CLI:

    Converting H.264 to H.265 using NVENC using setting or parameters, which let me set a factor for my target file size based on the original file size.

    Example:

    input: 3GB file H.264 @3Mb/sec -> output settings: H.265 using NVEnc @ Data ratio 0.66 or 66% -> output: 2GB file H.265 @2Mb/sec

    I want to run batch conversion of files, which come at different bit rates and different resolutions. I found that H.264 to H.265 at factor 0.66 yields about the same visual quality at a significant reduction in file size.

    After crawling the web for a few days, I've only been able to found one front-end GUI that offers exactly that, which is MediaCoder. Unfortunately for batch conversion, there are some limitations in the free version and I can't justify spending $200 to make my life easier.

    If anyone knows how to make NVEnc pick a bit rate based on bit rate of the original file using CLI or maybe knows of an alternative to MediaCoder, I'd be very happy about any pointers.

    I've been testing various front-ends like StaxRip or MeGUI, etc and while all offer great options to run batches, the automatic ratio calculation seems to be missing from all of them.

    Thanks in advance for your time.
    Quote Quote  
  2. Personally I don't think it's worth the time and effort. But...

    You can use MediaInfo to get the bitrate and save it as an environment variable. Then use ffmpeg to do the encoding at 2/3 that bitrate. This batch file will encode all the mp4 files in a folder to hevc mkv files in a subfolder called new:

    Code:
    md new
    setlocal enabledelayedexpansion
    
    for %%F in ("*.mp4") do (
        "G:\Program Files\MediainfoCLI\Mediainfo.exe" --Inform=Video;%%BitRate%% "%%~F" >bitrate.txt
        set /p bitrate=<"bitrate.txt"
        del bitrate.txt
        "G:\Program Files\ffmpeg64\bin\ffmpeg.exe" -y -i "%%~F" -c:v hevc_qsv -preset:v veryfast -b:v !bitrate!*0.66 -c:a copy "new\%%~nF.hevc.mkv"
        )
    endlocal
    
    pause
    Here I used the Intel Quick Sync HEVC encoder, hevc_qsv. You'll have to change that to "hevc_nvenc" and add whatever other options you want. Beware that MediaInfo sometimes doesn't return bitate. You will get empty files (size = 0) when that happens.
    Quote Quote  
  3. @jagabo

    Wow, that is a great solution! Thanks, exactly what I was looking for!

    Addition:
    Played around with it and it now does exactly what I need. The only thing that didn;t work was the veryfast preset, as it doesn't seem to exists in NVEnc: Eventually replaced it with fast. The other option would have been hp (high performance).

    Again thanks a lot!
    Last edited by Greg4rious; 2nd Jul 2020 at 20:43.
    Quote Quote  
  4. Member Cornucopia's Avatar
    Join Date
    Oct 2001
    Location
    Deep in the Heart of Texas
    Search PM
    The irony is that "2/3" is not even close to being a standard reduction ratio, unless you only work in a narrow range of bitrates and only deal with a narrow type of content.

    But it"s your dime.


    Scott
    Quote Quote  
  5. Originally Posted by Greg4rious View Post
    The only thing that didn;t work was the veryfast preset, as it doesn't seem to exists in NVEnc: Eventually replaced it with fast.
    I used veryfast just so I wouldn't have to wait long when I was testing the batch file. You can specify a preset numerically too. I recommend you try different presets to see how they effect quality. The slower presets exist for a reason. One type of shot that suffers badly from compression is low motion dark grainy shots -- they develop severe posterization artifacts (watch the video in a darkened room). Hardware encoders are especially bad about this. Try re-encoding the attached video.

    You can get a list of options specific to the NVENC encoder with "ffmpeg -? encoder=hevc_nvenc". You should check them out too.

    Code:
    Encoder hevc_nvenc [NVIDIA NVENC hevc encoder]:
        General capabilities: delay hardware 
        Threading capabilities: none
        Supported pixel formats: yuv420p nv12 p010le yuv444p p016le yuv444p16le bgr0 rgb0 cuda d3d11
    hevc_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..... lossless
         losslesshp                   E..V..... lossless hp
      -profile           <int>        E..V..... Set the encoding profile (from 0 to 4) (default main)
         main                         E..V..... 
         main10                       E..V..... 
         rext                         E..V..... 
      -level             <int>        E..V..... Set the encoding level restriction (from 0 to 186) (default auto)
         auto                         E..V..... 
         1                            E..V..... 
         1.0                          E..V..... 
         2                            E..V..... 
         2.0                          E..V..... 
         2.1                          E..V..... 
         3                            E..V..... 
         3.0                          E..V..... 
         3.1                          E..V..... 
         4                            E..V..... 
         4.0                          E..V..... 
         4.1                          E..V..... 
         5                            E..V..... 
         5.0                          E..V..... 
         5.1                          E..V..... 
         5.2                          E..V..... 
         6                            E..V..... 
         6.0                          E..V..... 
         6.1                          E..V..... 
         6.2                          E..V..... 
      -tier              <int>        E..V..... Set the encoding tier (from 0 to 1) (default main)
         main                         E..V..... 
         high                         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)
      -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)
      -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
    Image Attached Files
    Last edited by jagabo; 3rd Jul 2020 at 07:22.
    Quote Quote  



Similar Threads