Cuvid Resize methode wählen

  • Hi,
    Ausgangsmaterial H264 -> H265 nvenc

    hiernach unterstützt H.264 resize ja auch lanzcos, sinc resize etc.: https://encodingwissen.de/codecs/x264/referenz/#skalieren
    nur irgendwie scheint das alles unter FFMPEG anders, als da steht um z.b. beim croppen oben unten die Balken entfernen:

    -crop 145x145x0x0
    -resize 1920x788 -----> macht ja dann nur bicubic
    nur wie sieht der Synthax für z.b. sinc aus?
    (per , wie : dranhängen schon probiert)
    Den FFMPEG Scaler möchte ich nicht benutzen, da im direkten Vergleich der FFMEP bicubic zu scharf zeichnet,
    davon ab der FFMPEG sinc sehr langsam ist.

    ffmpeg -y -hwaccel_output_format cuda -c:v h264_cuvid -crop 145x145x0x0 -resize 1920x788 -threads 1^

    -i "e:\tv\movie.mkv" -c:a copy -c:v hevc_nvenc -preset slow -rc vbr -cq 28 -qmin 27 -qmax 30 -b:v 0 -b-pyramid 2 -mbtree 1^

    -2pass 1 -spatial-aq 1 -aq-strength 3 -rc-lookahead 50 -me_range 32 -fast-pskip 0 -psy 1 -psy-rd 23.00:1.00 -b_adapt 2 -weightb 1 -weightp 2^

    "e:\newest movuie\\movie.mkv"

  • bergh

    Doch Sinn macht es 20GB große H.264 Videoaufnahmen anzusammeln,

    wenn es auch 1GB als HEVC tuen würde. Und ja du hast das schon richtig erkannt, das sind nicht 0,9% sondern über 90% Platzersparniss. ;-)


    Selur

    Zitat

    Mit scale_npp erlaubt NVIDIA unterstütztes resizing.

    Was per GPU Resize funtkionert ist obiges Nvcuvid zumindest mit den FFMPEG builds hier von Gyan.dev / Btbn:

    https://ffmpeg.org/download.html#build-windows

    Was jedoch nicht funktioniert scale_npp
    der scale_npp Resizer ist in diesen FFMPEG builds nicht drin. (kommt nur so ne Meldung no such filter/Feature not implemented)

    Keine Ahnung woher man ein FFMPEG Windows Build mit scale_npp herkriegt. :-(


    Hab mir auchmal das Nvidia NVENC pdf* zu H264 runtergeladen (* Using_FFmpeg_with_NVIDIA_GPU_Hardware_Acceleration)

    und ja, da ist obiger nvcuvid -resize wie aus meinem Beispielcode zwar auch beschrieben,

    nur eigenartigerweise steht selbst in dem Nvidia PDF bzgl. nvcuvid -resize rein gar nix von einer "-method" option mit lanczos sinc & so,

    wie auf der Brother John seite. (daher vermute ich mal das nvcuvid wohl auch nur bicubic & sonst nix anderes kann, wenn selbst im Nvidia pdf nix von ner -method option steht)

  • Ja, ffmpeg muss mit scale_npp gebaut sein und braucht die libnpp.dll.

    Problem da bei ist, dass man dann ffmpeg nicht mehr verteilen darf.

    Denke MABS builds mit 'non-free' sollte geht. (Zumindest wurde das mal gefixed https://github.com/m-ab-s/media-autobuild_suite/issues/1071 und damals hab ich da auch ne funktionierende Version mit gebaut.)

    -> muss man aber selber kompilieren.

    Dann geht aber auch sowas wie:

    Code
    1. ffmpeg -y -loglevel fatal -noautorotate -nostdin -threads 8 -i "F:\TestClips&Co\files\test.avi" -map 0:0 -an -sn -vf "hwupload_cuda,scale_npp=w=1280:h=-2" -c:v h264_nvenc -vsync 0 e:\Output\test.264

    oder:

    Code
    1. ffmpeg -y -loglevel fatal -noautorotate -nostdin -threads 8 -i "F:\TestClips&Co\files\test.avi" -map 0:0 -an -sn -vf "hwupload_cuda,scale_npp=w=1280:h=-2:interp_algo=super" -c:v h264_nvenc -vsync 0 e:\Output\test.264

    das nur linear und bicubic geht ist schon lange nicht mehr aktuell,...



    Cu Selur

  • Bei den Auflösungen (FullHD) sind Skalierungen wirklich kein Flaschenhals. Aber ab 4K oder 8K und der Algo eventuell noch single-threaded ist, dann kann das - je nach Hardware - deutliche Unterschiede in der Performance machen.


    Ebenfalls wenn Daten kopiert werden müssen - z.B. von einen Programm zum anderen pipen - kann ab 4K schon mal die FPS halbieren.

  • Kann man so pauschal nicht sagen: Thuban + GTX 950

    Obiges HEVC nvenc Beispiel mit verschiedenen bicubic Resizern:

    Nvcuvid Scaler = 250FPS mit ca. 30% CPU Auslastung

    FFMPEG Scaler = 130FPS mit ca. 50% CPU Auslastung ***

    FFMPEG Zscaler = 120FPS mit ca. 55% CPU Auslastung
    ***(Anm. mit sinc+accurate_rnd+full_chroma_int+full_chroma_inp gar nur noch 70FPS)


    130FPS mit FFMPEG Scaling schon aufgrund der CPU Limitierung ein Trugschluß;

    die max Anzahl an parallelen nvenc Encodes ist Nvidia hardwareseitig auf 3 limitiert doch schon bei nur 2 (!) paralellen Encodes der Thuban schlicht zu 100% gnadenlos überlastet.

    Da werden bei 3 parallen Encodes aus 130FPS ganz schnell nur noch 35FPS pro encode.


    Läuft hingegen auch das Rezise komplett über die GPU halt über nvcuvid,

    bleibt die CPU Auslastung selbst bei 3 parallelen nvenc encodes knapp unter 100%

    3 encodes parallel flitzen dann meist mit so 140FPS daher was klar ein Unterschied zu 35FPS ist.


    Das bei moderneren CPUs div. nicht ins Gewicht fällt schon klar,

    nur mit so oller Hardware bleibt nur das beste draus machen. Hab zwar noch ne GTX 1050 rumliegen die im Gegensatz zur GTX 950 zwar 10bit YUV444 nvenc kann (auch weight_prediction)

    nur das macht nicht wirklich einen nennenswerten Qualitäts Unterschied.
    Neuen PC anschaffen zu teuer würde wenn nur lohnen mit Rizen + Nvidia Turingkarte. (mit Turing soll das HEVC enc doch was besser aussehn)
    Rein per CPU alles encoded mit eigenen (brauchbaren) Settings die schon einen guten Kompromiß Speed vs. Quality darstellen encoded der Thuban mit lumpigen 7FPS, ein (bezahlbares) Rizenmodell mag um den Faktor 2-3x schneller sein nur auch damit wär ich per CPU bei max. 25-30FPS, was immer zu lang wäre um mal eben bei nem Encode daneben zu sitzen, ergo kann ich auch gleich den ollen Thuban behalten, abends mit CPU encoded Material "füttern" und über nacht die encodes laufen lassen, damits am nächsten Tag fertig ist.



    Selur

    ja, das mit dem FFMPEG selbst compilieren steht auch im Nvidia paper,

    nur was man dafür alles braucht, irgendwas mit MinWing und Cuda SDK was auch immer so,

    ich geb zu - ich versteh da nur Bahnhof &, folglich bleibt nur das was es da auf der FFMPEG Seite zum download gibt,
    womit eben "nur" Nvcuvid als GPU Scaler geht.

  • Ich formuliere die Eingangsfrage mal neu;
    Geht die -method option zum auswählen eines Sinc (oder anderen Scalingmedthode) per GPU nur per cli mit x.264.exe?

    Das es keine fertige FFMPEG Builds mit scale_npp gibt hat ja, offensichtlich lizenzechtliche Gründe wg der libnpp.dll aus dem CUDA SDK PAck.
    Gibt es den ein FFMPEG Build was als scale_npp "enabled" bzw. --enable-libnpp und --enable-cuda compilliert wurde, wo jedoch lediglich die libnpp.dll fehlen würde? (wäre doch vermutllich nicht illegal wenn die dll nicht dabei wäre)

  • Zitat

    Geht die -method option zum auswählen eines Sinc (oder anderen Scalingmedthode) per GPU nur per cli mit x.264.exe?

    Soweit mir bekannt, hat x264.exekeine Option die beim resizing die GPU nutzen kann.


    k.A. ob es lizenztechnisch möglich wäre eine ffmpeg Version zu verteilen die gegen das CUDA SDK gebaut ist aber nicht die nötigen Dateien enthält.

    Praktisch kann man so einen build mit MBAS erzeugen,... (ging zumindest mal und würde mich wundern wenn es nicht mehr geht)


    Cu Selur

  • Hmmm okay was bräuchte ich denn dafür alles, wäre das der richtige Download?

    https://developer.nvidia.com/cuda-downloads

    https://sourceforge.net/projects/mingw-w64/

    http://msystem.waw.pl/x265/ --> da wähl ich dann das GCC 10.2 none x265 Pack.


    https://ffmpeg.org/download.html#releases ---> was für einen FFMPEG Download brauch ich da zum selbst "compilieren"?

    https://github.com/m-ab-s/media-autobuild_suite ---> davon nehm ich die batch datei

    und mache mit dem ganzen anschliessend was genau ???


    Ich hab bislang noch nix runtergeladen/installiert (weiß ja nichtmals was ich alles brauche)

    D.h. bislang nur deinen Link d.h. dieses "issue ticket" gelesen, und der Fehler war das du bei der Cuda version 10.0 statt V10.0 eingetragen hattest, oder wie???

    nur wo hast du was eingetragen, ohne das jemals gemacht zu haben, wüßte ich nichtmals worauf sich Passagen in diesem Issue Ticket beziehen wie der non free flag, das "custom profile" & so:

    # adapt these to your environment

    _cuda_basepath="C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA"

    _cuda_version=10.0

  • https://github.com/m-ab-s/media-autobuild_suite ---> davon nehm ich die batch datei

    und mache mit dem ganzen anschliessend was genau ???

    Nein, du nimmst davon nicht nur die Batch-Datei, sondern das ganze Archiv mit dem aktuellen Stand. Das entpackst du komplett in ein eigenes, kurzes Verzeichnis (D:\MABS oder so ähnlich). Beim ersten Start der darin enthaltenen Batch-Datei lädt es alles herunter, was zur Erstinstallation einer MSYS2/MinGW-Entwicklungsumgebung nötig ist, das wird am Ende einige GB benötigen. Außerdem kannst du Schritt für Schritt konfigurieren, ob und welche Codecs du mit compilieren möchtest, und welche Lizenzvariante von ffmpeg am Ende dabei entstehen soll. Es kann sein, dass du die Batch-Datei nach und nach mehrmals starten musst, nachdem einige Vorbereitungsschritte abgeschlossen sind.


    Heutzutage sollte es genügen, nur Software für ein 64-Bit-Windows zu compilieren. Du kannst ccache verwenden, wenn du immer wieder neu compilieren willst, das kann Zeit sparen, aber es wird auch sehr viel mehr Plattenplatz benötigen, muss also nicht sein. Wenn du nur ein statisches ffmpeg am Ende haben willst, musst du nicht unbedingt von den Codecs noch extra eigenständige Binaries erzeugen lassen.


    Du musst auch für ffmpeg sowohl die Lizenz (non-free) als auch einen gewünschten Umfang festlegen. Dafür gibt es vier Varianten (light, Zeranoe-ähnlich, full, und eine Variante, die über eine Textdatei mit Optionen einzeln konfiguriert werden kann).


    Nachdem alles konfiguriert wurde, werden die Shell-Scripte, die dann in einem mintty-Fenster laufen, alle Quelltexte von ffmpeg und den darin einzubindenden Codecs herunterladen und compilieren (vorausgesetzt dass in keinem Projekt mal wieder ein Fehler enthalten ist, der den ganzen Prozess unterbricht...).

  • Echt mehrere GB an Downloads, wieso soviel so ne ffmpeg.exe ist doch nur 90mb groß ???

    Der Win 7 PC (den ich fürs konvertieren benutze) hängt nicht mehr am Internet , was sich natürlich wieder ändern läßt, nur mach ich das eher ungern das irgendwelch Tools was auch immer so aus dem Internet sich "selbstständig" runterladen, ohne zu wissen das nachher alles so auf einen PC mitbefördert.


    Gibt es da keine andere "Offline-Install" Möglichkeit?

    Läßt sich eine vorhandene ffmpeg.exe ev. mittels eines Toos libnpp "enabled" patchen?

  • das tool kompelliert halt das programm (und andere) aus frischen sourcen.

    also, der läd nicht gigabyte sachen,

    sondern der ganze verarbeitungsprozess generiert gigabyte von daten.


    das kannst du an jedem internetrechner machen.

    und dann das ergebnis überall hinkopieren.
    du musst ja nicht jeden tag die neuste version haben.