• Stars
    star
    872
  • Rank 52,322 (Top 2 %)
  • Language
    C++
  • License
    Other
  • Created over 8 years ago
  • Updated about 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

NVENCによる高速エンコードの性能実験

NVEnc

by rigaya

日本語版はこちら>> 简体中文版本>>

Build Windows Releases Build Linux Packages

This software is meant to investigate performance and image quality of HW encoder (NVENC) of NVIDIA. There are 2 types of software developed, one is command line version that runs independently, and the nother is a output plug-in of Aviutl.

  • NVEncC.exe ... Command line version supporting transcoding.
  • NVEnc.auo ... Output plugin for Aviutl.

Downloads & update history

rigayaの日記兼メモ帳>>
github releases

Install

Install instructions for Windows and Linux

Build

Build instructions for Windows and Linux

System Requirements

Windows 10/11 (x86 / x64)
Linux (x64/aarch64)
Aviutl 1.00 or later (NVEnc.auo)
Hardware which supports NVENC
NVIDIA GPU GeForce Kepler gen or later (GT / GTX 6xx or later)
※ Since GT 63x, 62x etc. are renames of the Fermi generation, they cannot run NVEnc.

NVEnc Supported NVENC API Required graphics driver version
NVEnc 0.00 or later 4.0 NVIDIA graphics driver 334.89 or later
NVEnc 1.00 or later 5.0 NVIDIA graphics driver 347.09 or later
NVEnc 2.00 or later 6.0 NVIDIA graphics driver 358 or later
NVEnc 2.08 or later 7.0 NVIDIA graphics driver 368.69 or later
NVEnc 3.02 or later 7.0 NVIDIA graphics driver 369.30 or later
NVEnc 3.08 or later 8.0 NVIDIA graphics driver 378.66 or later
NVEnc 4.00 or later 8.1 NVIDIA graphics driver 390.77 or later
NVEnc 4.31 or later 9.0 NVIDIA graphics driver 418.81 or later
NVEnc 4.51 or later 9.1 NVIDIA graphics driver 436.15 or later
NVEnc 5.10 or later 9.0 - 10.0 NVIDIA graphics driver 418.81 or later
NVEnc 5.18 or later 9.0 - 11.0 NVIDIA graphics driver 418.81 or later
NVEnc 5.24 or later 9.0 - 11.0 NVIDIA graphics driver 418.81 or later (x64)
NVIDIA graphics driver 456.81 or later (x86)
NVEnc 5.36 or later 9.0 - 11.1 NVIDIA graphics driver 418.81 or later (x64)
NVIDIA graphics driver 456.81 or later (x86)
NVEnc 7.00 or later 9.0 - 12.0 NVIDIA graphics driver 418.81 or later (x64)
NVIDIA graphics driver 456.81 or later (x86)
NVEnc 7.26 or later 9.0 - 12.1 NVIDIA graphics driver 418.81 or later (x64)
NVIDIA graphics driver 456.81 or later (x86)
Supported NVENC API Required graphics driver version
9.0 NVIDIA graphics driver (Win 418.81 / Linux 418.30) or later
9.1 NVIDIA graphics driver (Win 436.15 / Linux 435.21) or later
10.0 NVIDIA graphics driver (Win 445.87 / Linux 450.51) or later
11.0 NVIDIA graphics driver (Win 456.71 / Linux 455.28) or later
11.1 NVIDIA graphics driver (Win 471.41 / Linux 470.57.02) or later
12.0 ???
12.1 NVIDIA graphics driver (Win 531.61 / Linux 530.41.03) or later
CUDA version Required graphics driver version
10.1 NVIDIA graphics driver (Win 418.96 / Linux 418.39) or later
10.2.89 NVIDIA graphics driver (Win 440.33 / Linux 441.22) or later
11.0.2 NVIDIA graphics driver (Win 451.48 / Linux 450.51.05) or later
11.0.3 NVIDIA graphics driver (Win 451.82 / Linux 450.51.06) or later
11.1.0 NVIDIA graphics driver (Win 456.38 / Linux 455.23) or later
11.1.1 NVIDIA graphics driver (Win 456.81 / Linux 455.32) or later
11.2 NVIDIA graphics driver (Win 460.89 / Linux 460.27.04) or later

Usage and options of NVEncC

Option list and details of NVEncC

Examples of supported encode features

Result of --check-features, a feature list returned from the driver. May depend on the driver version.

GPU Gen Windows Linux
Kepler GTX660Ti Tesla K80
Maxwell GTX970 Tesla M80
Pascal GTX1080, GTX1070, GTX1060, GTX1050Ti GTX1080
Volta GTX1650
Turing RTX2070, RTX2060, GTX1660Ti, GTX1650 Super Tesla T4, Tesla T4G @ aarch64
Ampere RTX3090, RTX3080, RTX3050Ti
Ada Lovelace RTX4090, RTX4080

Precautions for using NVEnc

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND.

Main usable functions

Common to NVEnc / NVEncC

  • Encoding using NVENC
    • H.264 / AVC
      • YUV420 / YUV444
    • H.265 / HEVC (2nd Gen Maxwell or later)
      • YUV420 / YUV444
      • 10 bits
    • AV1 (Ada Lovelace or later)
  • Each encode mode of NVENC
    • CQP (fixed quantization)
    • CBR (Constant bitrate)
    • CBRHQ (Constant bitrate, high quality)
    • VBR (Variable bitrate)
    • VBRHQ (Variable bitrate, high quality)
  • Interlaced encoding (by PAFF)
  • Lossless output (YUV 420 / YUV 444)
  • supports setting of codec profile & level, SAR, colormatrix, maxbitrate, GOP len, etc...

NVEncC

  • Supports cuvid decoding
    • MPEG1
    • MPEG2
    • H.264 / AVC
    • HEVC (10 bit / 12bitdepth with YUV444 support)
    • VC-1
    • VP9
    • AV1
  • Supports various formats such as avs, vpy, y4m, and raw
  • Supports demux/muxing using libavformat
  • Supports decode using libavcodec
  • Calculation of ssim/psnr/vmaf of the encode
  • High performance filtering (VPP, Video Pre-Processing)
    • cuvid built-in hw processing
      • resize
      • deinterlace (normal / bob)
    • GPU filtering by CUDA
      • rff (apply rff flag)
      • deinterlacer
        • afs (Automatic field shift)
        • nnedi
        • yadif
      • decimate
      • mpdecimate
      • colorspace conversion (x64 version only)
        • hdr2sdr
        • lut3d
      • delogo
      • subburn
      • resize
        • bilinear
        • spline16, spline36, spline64
        • lanczos2, lanczos3, lanczos4
        • various algorithms by npp library are available (x64 version only)
        • nvvfx-superres
      • transpose / rotate / flip
      • padding
      • select-every
      • deband
      • noise reduction
        • knn (K-nearest neighbor)
        • pmd (modified pmd method)
        • gauss (npp library, x64 version only)
        • convolution3d
        • nvvfx-artifact-reduction
        • nvvfx-denoise
      • edge / detail enhancement
        • unsharp
        • edgelevel (edge ​​level adjustment)
        • warpsharp

NVEnc.auo (Aviutl plugin)

  • Audio encoding
  • Mux audio and chapter
  • afs (Automatic field shift) support

NVEnc.auo

Auto GPU selection in multi GPU envinronment

NVEncC will automatically select a GPU depending on the options used, when there are multiple GPUs available which support NVENC. --device option can be used to specify on which GPU to run manually.

  1. Select GPU which supports...
    Items below will be checked whether the GPU supports it or not
  • Codec, Profile, Level
  • Additionally, below items will be checked if specified
    • 10bit depth encoding
    • Lossless encoding
    • Interlaced encoding
    • HW decode support for ssim/psnr/vmaf calculation
  1. Prefer GPU which supports...
  • B frame support
  1. If there are multiple GPUs which suports all the items checked in 1. and 2., GPU below will be prefered.
  • GPU which has low Video Engine(VE) utilization
  • GPU which has low GPU core utilization
  • newer Generation GPU
  • GPU with more CUDA cores

The purpose of selecting GPU with lower VE/GPU ulitization is to assign tasks to mulitple GPUs and improve the throughput of the tasks. Also, newer Gen GPU and GPU with more cores are assumed to have improved performance.

Please note that VE and GPU ulitization are check at the initialization pahse of the app, and there are delays in values taken. Therefore, it is likely that the multiple tasks started at the same time to run on the same GPU, and divided into multiple GPUs, even if the options are supported in every GPUs.

NVEnc source code

  • MIT license.
  • This program is based on NVIDA CUDA Samples and includes sample code. This software contains source code provided by NVIDIA Corporation.
  • --vpp-nvvfx fiters are power by NVIDIA BROADCAST.
  • This software depends on jitify, ffmpeg, vmaf, tinyxml2, dtl, libass, ttmath & Caption2Ass. For these licenses, please see the header part of the corresponding source and NVEnc_license.txt.

About source code

Windows ... VC build

Character code: UTF-8-BOM
Line feed: CRLF
Indent: blank x4

More Repositories

1

QSVEnc

QSVによる高速エンコードの性能実験
C++
260
star
2

VCEEnc

VCEによる高速エンコードの性能実験
C++
178
star
3

x264guiEx

拡張 x264 出力(GUI) Ex
C++
161
star
4

x265guiEx

拡張 x265 出力(GUI) Ex
C++
64
star
5

ffmpegOut

Aviutlのffmpegを使用した出力プラグイン
C++
39
star
6

svtAV1guiEx

拡張 SVT-AV1 出力(GUI) Ex
C++
38
star
7

rkmppenc

Rockchip系SoCのHWエンコーダ(rkmpp)の性能実験
C++
30
star
8

tsreplace

tsの映像部分のみの置き換えを行うツールです。
C++
26
star
9

CheckBitrate

動画ファイルを分析して、ビットレート分布をcsvで出力します。
C++
17
star
10

ram_speed

スレッド数ごとにアクセス速度を測定。
JavaScript
11
star
11

aui_indexer

lwinput.auiやm2v.auiで必要なindexファイルなどを事前生成します。
C++
9
star
12

VVenCguiEx

拡張 VVenC 出力(GUI) Ex
C++
8
star
13

edgelevel_avisynth

エッジレベル調整フィルタのAvisynth移植版です。
C++
8
star
14

bandingMT_simd

Aviutl バンディング低減フィルタMT 高速化版
C++
8
star
15

AviutlColor

Aviutlの色空間変換プラグイン
C++
7
star
16

pmd_mt

Aviutl PMD_MT ノイズ除去フィルタ 高速化版
C++
7
star
17

Aviutl-clfilters

Aviutl用のOpenCLによるGPUフィルタです。
C++
7
star
18

ffmpeg5_dlls_for_hwenc

QSVEncやNVENCの画質や速度といった性能の実験を目的とするQSVEncやNVEncのサブモジュールです。
C
7
star
19

hdr10plus_gen

cmake projectの練習用
C++
5
star
20

auo_setup

Aviutlプラグイン用の簡易インストーラです。
C++
5
star
21

checkhwenc

Standalone check tool for hw encoder availability
C++
5
star
22

vq_results

画質比較結果の公開用です。
JavaScript
4
star
23

build_scripts

自分用ビルドスクリプト集
Shell
4
star
24

OpenCLTest

OpenCLの勉強用
C++
4
star
25

ChapConvert

Converts chapter file formats.
C++
3
star
26

ffmpeg_dlls_for_hwenc_old

QSVEncやNVENCの画質や速度といった性能の実験を目的とするQSVEncやNVEncのサブモジュールです。
C
3
star
27

checkclinfo

Result of GPU detection via OpenCL
C++
3
star
28

afs

自動フィールドシフト 高速化版
C++
2
star
29

fawutil

C++
2
star
30

microbench

SIMD命令の速度を測る遊び
Assembly
2
star
31

edgelevelMT

Aviutl プラグイン エッジレベル調整 MT ver 0.7
C++
1
star
32

delogo

Aviutl 透過性ロゴフィルタ SIMD版
C
1
star
33

HWEncTest

QSVEnc/NVEnc/VCEEncのデバッグ/テスト/検証用
Python
1
star
34

build_pkg

currently for test
Python
1
star
35

rkmppenc_access_override

C
1
star