This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm whether you accept or reject these cookies being set.

A cookie will be stored in your browser regardless of choice to prevent you being asked this question again. You will be able to change your cookie settings at any time using the link in the footer.

[INFO] NVEnc auf Turing Karten / x264 10 bit + x265 support in Hybrid
#1
NVEnc scheint sich auf den Nvidia Turing Karten qualitätstechnisch und geschwindigkeitstechnisch kräftig weiterentwickelt zu haben.
Hier ein Bericht bei Igorslab, wo im Rahmen einer Bachelorarbeit (hoffentlich) unabhängig darüber berichtet wird:
deutsch:
https://www.igorslab.de/nvidias-nvenc-vs...flix-vmaf/
englisch:
https://www.igorslab.de/en/nvidias-nvenc...flix-vmaf/

NVEnc h264 scheint in den meisten Fällen auch qualitätstechnisch x264 medium zu schlagen, im Speed logischerweise sowieso.

Leider sehe ich bei Hybrid im NVEnc Menü bei h264 bei output bit depth keine Möglichkeit 10 bit auszuwählen und h265 gibt's bei Codec auch nicht (steckt allerdings gerade auch noch ne AMD-Karte im Rechner).
Anscheinend wird aber beides mittlerweile von NVEnc unterstützt. Die section könnte somit mal wieder ein Update gebrauchen.
Reply
#2
Quote:Leider sehe ich bei Hybrid im NVEnc Menü bei h264 bei output bit depth keine Möglichkeit 10 bit auszuwählen und h265 gibt's bei Codec auch nicht (steckt allerdings gerade auch noch ne AMD-Karte im Rechner).
Anscheinend wird aber beides mittlerweile von NVEnc unterstützt. Die section könnte somit mal wieder ein Update gebrauchen.
Hybrid ruft am Anfang 'NVEncC --check-features' auf und erlaubt nur das was laut NVEncC von der Hardware&Treiber Kombination unterstützt wird.
Sowohl H.265 als auch 10bit gehen bei mir auf meiner alten 1070ti ohne Probleme.
Man muss halt Codec auf h265 und Profile auf mindestens main10 stellen, wenn man 10 bit verwenden will,...
-> keine Ahnung warum es bei Dir nicht geht.

Quote:NVEnc h264 scheint in den meisten Fällen auch qualitätstechnisch x264 medium zu schlagen, im Speed logischerweise sowieso.
Da wird immer wieder drüber gestritten, ich halte mich da raus. Würde aber so Minitests die nur eine Metric verwenden und die ich nicht selber nachgestellt habe eher skeptisch gegenüber stehen.

Cu Selur
Reply
#3
Quote:Hybrid ruft am Anfang 'NVEncC --check-features' auf und erlaubt nur das was laut NVEncC von der Hardware&Treiber Kombination unterstützt wird.
Sowohl H.265 als auch 10bit gehen bei mir auf meiner alten 1070ti ohne Probleme.
Man muss halt Codec auf h265 und Profile auf mindestens main10 stellen, wenn man 10 bit verwenden will,...
-> keine Ahnung warum es bei Dir nicht geht.

Wird hoffentlich nur dran liegen, dass da momentan noch die AMD RX 560 drin steckt.

Übrigens unterstützt ffmpeg mittlerweile AMF/VCE, also HW-Encoding auf AMD Karten, und die AMD RX 560 kann sogar h.264 + h.265:
https://www.dvbviewer.tv/forum/topic/608...-und-hevc/
http://ffmpeg.org/general.html#AMD-AMF_002fVCE

Hab's allerdings noch nicht getestet, wie's da qualitätstechnisch aussieht. Mit A's Video Converter hab ich das mal ausprobiert, aber es war ein absoluter Albtraum, bin da mit der Bitratensteuerung gar nicht klar gekommen, da kam nie das raus, was ich wollte. Entweder mickrige 6 Mbit, oder gleich 30, trotz eingestellter Target Rate und Max Rate... 30 Mbit sehen natürlich gut aus, das ist keine Kunst...
Keine Ahnung ob das an AMD oder der komischen Software liegt. Werd's wohl mal mit ffmpeg probieren, solange die AMD Karte noch drin ist.

(30.05.2022, 12:01)Selur Wrote:
Quote:NVEnc h264 scheint in den meisten Fällen auch qualitätstechnisch x264 medium zu schlagen, im Speed logischerweise sowieso.
Da wird immer wieder drüber gestritten, ich halte mich da raus. Würde aber so Minitests die nur eine Metric verwenden und die ich nicht selber nachgestellt habe eher skeptisch gegenüber stehen.

Immerhin ist's die Metrik von Netflix, und angeblich ist es ja auch erst seit den Touring Karten besser geworden. Aber man weiß natürlich nie wie unabhängig solche Tests von Seiten wie igorslab sind. Angeblich steckt ja eine Bachelor Arbeit dahinter, hoffentlich nicht von einem, der bei Nvidia berufsbegleitend studiert Smile
Hab mich trotzdem verleiten lassen erstmal eine gebrauchte Nvidia Quadro T1000 zu ersteigern.
Das war ein Fehler - h.265 wird von den Turing-Karten der 5. Generation (Tu117) nur ohne Bframes unterstützt. Man braucht als Minimum einen TU106 oder TU116 Chip:
https://en.wikipedia.org/wiki/Nvidia_NVENC#Versions
Die Karte geht also direkt wieder zurück.

Eigentlich wäre ein ganz neues System mit moderner CPU ja besser, aber ich hab einfach keine Lust mich von meinem feinst zusammengebastelten System aus ehemals hochwertiger Hardware zu trennen und alles neu zu machen, leider lässt sich da keine bessere CPU mehr einbauen. der DDR32400 CL10 1T Ram reicht mir immer noch gut, hat sogar niedrigere Latenzen als viele DDR4 Systeme, und ich hab auch noch einen Haufen AM3+ Ersatzteile...
Aber wenn ich mal größere Mengen zu encoden habe, bekomm ich da mittlerweile echt ein schlechtes Gewissen wegen des Stromverbrauchs, so schnarch langsam wie der übertaktete FX-8350 bei allen Presets unterhalb X264 Fast encoded.

Jetzt hab ich mir eine KFA² GeForce GTX 1650 EX Plus mit TU106 Chip bestellt, die war (jedenfalls bis gestern noch) neu gerademal 10€ teurer als die gebrauchte Quadro und braucht nur wenig mehr Strom. Heute ist sie schon wieder um 20€ gestiegen, ist echt ein Albtraum mit den Grafikkartenpreisen derzeit Dodgy  Zur Markteinführung vor knapp 2 Jahren hat die gerademal gut die Hälfte gekostet.
Allerdings hat die Karte jetzt wiederum wohl im Idle nervig laute Lüfter hab ich gelesen, da muss ich wohl erstmal das Bios eines anderen Herstellers flashen, wenn sie was taugt. Bei Techpowerup gibt's zum Glück einige (hoffentlich kompatible) BIOSe.

Ich werde dann mal selbst ein wenig rumtesten, was die VMAF Metrik zur Qualität sagt. Wenn's besser ist wie x264 Fast bin ich schon einigermaßen zufrieden.
Das war ein absoluter Albtraum sich mit der grauenhaften Syntax von ffmpeg und fehlerhaften Anleitungen im Netz rumzuplagen. Habe Stunden gebraucht endlich einen funktionierenden Multihreaded call hinzubekommen, der auch einigermaßen schnell läuft. Allerdings nur mit der anscheinend in ffmpeg integrierten Metrik, von der ich nicht weiß, welche genau das ist (wahrscheinlich die für 1080p):
echo %time% calculating ffmpeg internal VMAF score...
"C:\Program Files\Hybrid\64bit\ffmpeg.exe" -i "%comparingVideo%" -i "%originalVideo%" -lavfi libvmaf="n_threads=8:log_fmt=csv:log_path='%comparingVideoFname%_VMAF_results.txt'" -f null - 2>"%cd%\%comparingVideoFname%_VMAF.log"

SSIM + PSNR bekommt man so:
echo %time% calculating SSIM score...
"C:\Program Files\Hybrid\64bit\ffmpeg.exe" -i "%comparingVideo%" -i "%originalVideo%" -lavfi ssim="f='%comparingVideoFname%_SSIM_results.txt'" -f null - 2>"%cd%\%comparingVideoFname%_SSIM.log"

echo %time% calculating PSNR score...
"C:\Program Files\Hybrid\64bit\ffmpeg.exe" -i "%comparingVideo%" -i "%originalVideo%" -lavfi psnr="f='%comparingVideoFname%_PSNR_results.txt'" -f null - 2>"%cd%\%comparingVideoFname%_PSNR.log"
 
Aber die von Github runtergeladenen Netflix Models zum laufen zu bekommen, ist mir bis jetzt noch nicht gelungen:
C:\Program Files\Hybrid\64bit\ffmpeg.exe" -i "%comparingVideo%" -i "%originalVideo%" -lavfi libvmaf="model='path=C\:/Program Files/Hybrid/64bit/vmaf_float_4k_v0.6.1.json':n_threads=8:log_fmt=csv:log_path='%comparingVideoFname%_vmaf_float_4k_v0.6.1_results.txt'" -f null - 2>"%cd%\%comparingVideoFname%_vmaf_float_4k_v0.6.1.log"
U.a. das schlägt leider fehl, keine Ahnung warum... .json, .model und .pkl file hab ich ins Hybrid folder kopiert, trotzdem klappts nach stundenlangem rumprobieren nicht Sick
Reply
#4
Bei Kartenwechseln sollte man immer schauen, dass die Treiber komplett deinstalliert und neu installiert werden. Smile

Cu Selur
Reply
#5
Die kleinste Touring Karte mit TU106 Chip (KFA2 GeForce GTX 1650 EX Plus) und damit vollständigen h.264 + h.265 Features wie B-Frames performt auf den ersten Blick für meine Verhältnisse spitzenmäßig.

Hab mal nen kurzen 1080p 8 Bit yuv420 Testclip (cut_Term_Gen_2015_x264_yuv420_8bit_1920x808), der eine gar nicht mal so unanspruchsvolle Szene enthält (ordentlich luma+chroma grain in der ersten Hälfte) mit dem speed von x264 preset fast + medium abgeglichen und PSNR, SSIM und VMAF mit ffmpeg ermittelt.

x264 crf 19, preset medium:
 
Quote:  encoded 1459 frames, 26.89 fps, 10427.23 kb/s

    PSNR y:26.736638 u:39.341916 v:40.802837 average:28.396570 min:9.955948 max:52.007690
    SSIM Y:0.904620 (10.205436) U:0.954853 (13.453737) V:0.965217 (14.586276) All:0.923092 (11.140272)
    VMAF score: 38.599646


x264 crf 19, preset fast :

Quote:    encoded 1459 frames, 36.87 fps, 11561.19 kb/s

    PSNR y:26.741128 u:39.314528 v:40.763522 average:28.400210 min:9.955854 max:52.007690
    SSIM Y:0.905469 (10.244276) U:0.954287 (13.399641) V:0.964602 (14.510225) All:0.923461 (11.161183)
    VMAF score: 38.532809


NVEnc  vbr-quality 20, alle Qualitätseinstellungen aktiviert/maximiert und 6 ref frames / 4 Bframes:

Quote:    encoded 1459 frames, 210.47 fps, 10804.10 kbps, 78.37 MB

    PSNR y:26.749656 u:39.491764 v:40.970017 average:28.412846 min:9.957233 max:57.727943
    SSIM Y:0.908716 (10.396039) U:0.957721 (13.738783) V:0.967844 (14.927324) All:0.926738 (11.351209)
    VMAF score: 38.599521

Ergebnis:

Bei 3,6% höherer Bitrate als x264 medium bei VMAF praktisch gleichauf, SSIM und PSNR sogar leicht besser.
Der Speed liegt um 783% höher als bei x264 medium und um 571% höher als bei x264 fast!
Wobei x264 hier fast 7% mehr Bitrate als NVEnc gebraucht hat und auch bei VMAF merkbar schlechter abschneidet.

Und das Beste:
VapourSynth belastet hier die CPU bei aktiviertem HW Decoding so wenig, dass ich sie dabei im Windows Energiesparmodus belassen kann, und der Verbrauch steigt um gerademal 95W von 85W auf 180W. Cool
Beim x264 CPU encoding steigt der Verbrauch mit und ohne HW decoding um 205W auf 290W!

EDIT: Link zum verwendeten clip hinzugefügt. Skript zum ermitteln von VMAF, SSIM und PSNR mit ffmpeg hinzugefügt.


Attached Files
.7z   ffmpeg VMAF SSIM PSNR Calculator 1.1.cmd.7z (Size: 1,31 KB / Downloads: 124)
.7z   x264 crf19 medium+fast, NVEnc vbr-quality 20 - Speed VMAF SSIM PSNR.7z (Size: 2,82 KB / Downloads: 167)
Reply
#6
Zu wenig Details zum Nachstellen.
-> 0-Aussagekraft.

Davon ausgegangen, dass die Aussage richtig ist, aber cool. Smile

Cu Selur
Reply
#7
Hab den verwendeten clip im posting verlinkt.
Die Parameter für die encoder sind in den im posting angehangenen logfiles enthalten.

VMAF, SSIM + PSNR kann man mit diesem Skript und ffmepg ermitteln (jetzt auch als Anhang im original posting):


@echo off
set hybridFolder="C:\Program Files\Hybrid"
set "originalVideo="
set "comparingVideo="
set "cpuThreads=12"

echo ffmpeg VMAF SSIM PSNR Calculator 1.1 & echo.
echo cpuThreads used: '%cpuThreads%'
if not "%cpuThreads%" GTR "1" (echo cpuThreads not defined, enter or hardcode in script & set /p "cpuThreads=cpuThreads? [1-64]")

:HYBRIDFOLDER_CHK
call :REMQUOT hybridFolder %hybridFolder%
call :CHECK_EXIST hybridFolder "%hybridFolder%"
if %checkExist%==0 call :REMQUOT hybridFolder %hybridFolder%
if not exist "%hybridFolder%" goto :HYBRIDFOLDER_CHK
echo hybridFolder: '%hybridFolder%'

:ORIGINALVIDEO_CHK
call :REMQUOT originalVideo %originalVideo%
call :CHECK_EXIST originalVideo "%originalVideo%"
if %checkExist%==0 call :REMQUOT originalVideo %originalVideo%
if not exist "%originalVideo%" goto :ORIGINALVIDEO_CHK
echo originalVideo: '%originalVideo%'

:COMPARINGVIDEO_CHK
call :REMQUOT comparingVideo %comparingVideo%
call :CHECK_EXIST comparingVideo %comparingVideo%
if %checkExist%==0 call :REMQUOT comparingVideo %comparingVideo%
if not exist "%comparingVideo%" goto :COMPARINGVIDEO_CHK
echo comparingVideo: '%comparingVideo%'

for /f "tokens=1 delims=" %%a in ("%comparingVideo%") do (set "comparingVideoFname=%%~na")

cls
echo.
echo originalVideo: '%originalVideo%' comparingVideoFname: '%comparingVideoFname%'
echo.
echo VMAF (cpu intensive), SSIM and PSNR will be calculated with ffmeg, progress can be seen in logfiles
timeout 3
color 0c

echo %time% calculating VMAF score without scaling resolution (easy way)...
"%hybridFolder%\64bit\ffmpeg.exe" -i "%comparingVideo%" -i "%originalVideo%" -lavfi libvmaf="n_threads=%cpuThreads%:log_fmt=csv:log_path='%comparingVideoFname%_VMAF_results.txt'" -f null - 2>"%comparingVideoFname%_VMAF.log"

REM Alternative more complex way with variables for ffmpeg to calculate VMAF, at least 'scale' or one other option must be defined in stream [0:v] and stream [1:v]
REM "%hybridFolder%\64bit\ffmpeg.exe" -i "%comparingVideo%" -i "%originalVideo%" -filter_complex "[0:v]scale=1920x808[main];[1:v]scale=1920x808[ref];[main][ref]libvmaf=n_threads=%cpuThreads%:feature='name=psnr':feature='name=ssim':feature='name=psnr':log_fmt=csv:log_path='%comparingVideoFname%_VMAF_results.txt'" -f null - 2>"%cd%\%comparingVideoFname%_VMAF.log"

REM Another way with variables for ffmpeg to calculate VMAF with phone_model, which results in higher score and absolute path for the logfile
REM "%hybridFolder%\64bit\ffmpeg.exe" -threads 8 -i "%comparingVideo%" -i "%originalVideo%" -filter_complex "[0:v]scale=1920x1080:flags=bicubic,format=pix_fmts=yuv444p,fps=fps=50[main];[1:v]scale=1920x1080:flags=bicubic,format=pix_fmts=yuv444p,fps=fps=50[ref];[main][ref]libvmaf=n_threads=%cpuThreads%:feature='name=psnr':phone_model=1:log_fmt=csv:log_path='C\:/%comparingVideoFname%_VMAF_results.txt'" -f null - >"%comparingVideoFname%_VMAF.log"

echo %time% calculating SSIM score...
"%hybridFolder%\64bit\ffmpeg.exe" -i "%comparingVideo%" -i "%originalVideo%" -lavfi ssim="f='%comparingVideoFname%_SSIM_results.txt'" -f null - 2>"%cd%\%comparingVideoFname%_SSIM.log"

echo %time% calculating PSNR score...
"%hybridFolder%\64bit\ffmpeg.exe" -i "%comparingVideo%" -i "%originalVideo%" -lavfi psnr="f='%comparingVideoFname%_PSNR_results.txt'" -f null - 2>"%cd%\%comparingVideoFname%_PSNR.log"

echo.
color 07
echo %time% done...
pause
EXIT


:REMQUOT
set %1=%~2
goto :EOF

:CHECK_EXIST
set "checkExist=0"
echo.
if not exist "%~2" (
    echo %~1 '%~2' doesn't exist, drag 'n drop or hardcode in script!
    set /p "%~1=%~1?"
) else (set "checkExist=1")
goto :EOF
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)