Selur's Little Message Board

Full Version: 1920x1012 10bit YUV444 file wird in AviSynth falsch verarbeitet
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Pages: 1 2 3 4 5 6
Kann leider den DGDecNV-Aufruf nicht nachstellen, da Hybrid merkt, dass ich keine NV Hardware hab, sonst hätte ich vielleicht ein vorgefertigtes bench-skript zusammenbauen können.
Auf die Schnelle hab ich bei Avisynth.nl gerade (noch) nicht die Syntax von DGDecNV gefunden, und ob DGIndexNV extra per cli vorm encoding aufgerufen werden muss...
Ist aber eher besser wenn die von Hybrid erzeugte Syntax verwendet wird, nachher bau ich irgendeinen Fehler ein.
Kannst ja wenn du willst ein von Hybrid erzeugtes DGDecNV avs skript + cli-Aufruf hier posten, mal sehen ob ich daraus was zusammenbasteln kann...


EDIT:

Für lwLibaV Hardware-Decoding müsstest du theoretisch nur bei den angehangenen Skripten das prefer_hw auf größer 0 ändern, wenn du mit dem tool benchen willst.

Hab hier mal die 2 skripte auf x264 von preset veryfast auf faster zurückgeschraubt, (ist eventuell genauer, da bessere CPU-Auslastung), und Messwiederholungen auf 2 reduziert (die neueste Version verhindert etwas zuverlässiger das starten einer Messung, wenn da irgendein Hintergrundprozess die CPU Auslastung erhöht, dewegen reichen u.U. auch 2 Messungen), damit wiederhole ich eventuell auch nochmal die Messung von vorhin.

P.S. Wenn im batch tool nach dynMeasureVar [start,step,end]? gefragt wird, wird bei den präparierten skripten der prefetch(X) Wert schrittweise erhöht, ist vielleicht nicht so verständlich. Theoretisch kann man da auch z.B. 8,0,8 eingeben wenn man nur ein prefetch(8) setting testen will.
Um die Wiederholungsmessungen zu ändern muss man aktuell im kopf des batch tools die user variable repeatBenchCount ändern. Nervt sonst, wenn Dinge, die man fast nie ändert, ständig beim Starten abgefragt werden. Genauso macht es Sinn im Kopfbereich bei hybridFolderWin das Hybrid-Verzeichnis dauerhaft einzutragen, damit man nicht ständig danach gefragt wird...
Durch Verwendung des x264 preset FASTER statt VERYFAST hat sich die Differenz bei den Spitzenwerten um gigantische 0,2% auf 2,3% erhöht Wink

Aktuelle Hybrid AviSynth Umsetzung mit convertbits(10) und ConvertToYUV444:
Code:
REM ### First 3 lines will be skipped when generating AVS/VPY script from this file. 2nd line must have vspipe/ffmpeg/avs2yuv64 call. Do not remove GOTO :EOF in 3rd line!
"%hybridFolderWin%\64bit\Avisynth\avs2yuv64.exe" -depth 10 -nstdr "%cd%\%dynFileName%.avs" -o - | "%hybridFolderWin%\64bit\x264.exe" --crf 19.00 --profile high444 --level 5.2 --ref 2 --no-mixed-refs --keyint 250 --min-keyint 0 --scenecut 40 --bframes 3 --b-bias 0 --b-pyramid normal --direct spatial --b-adapt 1 --sync-lookahead 16 --cplxblur 20.0 --qcomp 0.60 --qblur 0.50 --mbtree --rc-lookahead 20 --ipratio 1.40 --pbratio 1.30 --chroma-qp-offset 0 --qpmin 0 --qpmax 69 --qpstep 4 --partitions i4x4,i8x8,p8x8,b8x8 --8x8dct --me hex --merange 16 --mvrange -1 --subme 4 --cabac --trellis 1 --weightp 1 --aq-mode 1 --aq-strength 1.00 --vbv-maxrate 240000 --vbv-bufsize 720000 --nr 0 --deadzone-inter 21 --deadzone-intra 11 --cqm flat --threads 16 --sar 1:1 --deblock 0:0 --non-deterministic --range tv --colormatrix bt709 --demuxer y4m --input-range tv --fps 24/1 --output-csp i444 --output-depth 10 --output "%cd%\%dynFileName%.264" -
goto :EOF

ClearAutoloadDirs()
SetFilterMTMode("DEFAULT_MT_MODE",MT_MULTI_INSTANCE)
SetFilterMTMode("FFT3dGPU",MT_MULTI_INSTANCE)
LoadPlugin("$$HYBRIDFOLDER$$\64bit\Avisynth\avisynthPlugins\LoadDll.dll")
LoadDLL("$$HYBRIDFOLDER$$\64bit\Avisynth\avisynthPlugins\d3d9.dll")
LoadPlugin("$$HYBRIDFOLDER$$\64bit\Avisynth\avisynthPlugins\LSMASHSource.dll")
# LoadCPlugin("$$HYBRIDFOLDER$$\64bit\Avisynth\avisynthPlugins\ffms2.dll")
LoadPlugin("$$HYBRIDFOLDER$$\64bit\Avisynth\avisynthPlugins\FFT3dGPU.dll")
# loading source: $$SOURCEVID$$
# color sampling YV24@10, matrix: bt709, scantyp: progressive, luminance scale: limited
#####
LWLibavVideoSource("$$SOURCEVID$$",cache=false,format="YUV444P16", prefer_hw=0,repeat=true)
# LWLibavVideoSource("$$SOURCEVID$$",cache=false,format="YUV444P10", prefer_hw=0,repeat=true)
# FFVideoSource("$$SOURCEVID$$",colorspace="YV12")
#####
# current resolution:

# scaling to 3840x2026
Spline16Resize(3840,2026)

# Converting from 16 to 10bit for encoder
ConvertBits(10)

# adjust color to YV24 (color matrix: Rec709)
ConvertToYUV444()
PreFetch($$DYNMEASUREVAR$$)

#####
# setting output fps to 24.000fps
AssumeFPS(24,1)
#####
#  output: color sampling YUY2@10, matrix: bt709, scantyp: progressive, luminance scale: limited
return last
--------------------------------------------------------------------------------

REPLACEMENTS:
$$SIGMA$$ replaced with '2.00'
$$BW$$ replaced with '32'
$$BH$$ replaced with '32'
$$BT$$ replaced with '3'
$$PLANE$$ replaced with '4'
$$MODE$$ replaced with '0'
$$PRECISION$$ replaced with '1'
$$BORDERSIZE$$ replaced with '1'
$$HYBRIDFOLDER$$ replaced with 'C:\Program Files\Hybrid'
$$HYBRIDFOLDER_VS$$ replaced with 'C:/Program Files/Hybrid'
$$SOURCEVID$$ replaced with 'C:\BENCH_AVS_VPS_FILTER\Hybrid YUV444P10 handling\cut_TGM_TLR2_IMAX_3840x2025_H265_YUV444_10BIT.mkv'
$$SOURCEVID_VS$$ replaced with 'C:/BENCH_AVS_VPS_FILTER/Hybrid YUV444P10 handling/cut_TGM_TLR2_IMAX_3840x2025_H265_YUV444_10BIT.mkv'
$$DYNMEASUREVAR$$ replaced dynamically [start,step,end] with '0,4,8'
$$DYNMEASUREVARGAP$$ replaced dynamically [start,step,end] with '0,4,8' +- gap of '+1'

--------------------------------------------------------------------------------

x0 X264 FASTER convertbits(10)-ConvertToYUV444 - lsmash - avs2yuv - 4K YUV444P16 in YUV444P10 out 0-8T
encoded 1666 frames, 5.15 fps, 31495.26 kb/s

x2 X264 FASTER convertbits(10)-ConvertToYUV444 - lsmash - avs2yuv - 4K YUV444P16 in YUV444P10 out 0-8T
encoded 1666 frames, 5.12 fps, 31490.02 kb/s

x4 X264 FASTER convertbits(10)-ConvertToYUV444 - lsmash - avs2yuv - 4K YUV444P16 in YUV444P10 out 0-8T
encoded 1666 frames, 5.19 fps, 31492.89 kb/s

x6 X264 FASTER convertbits(10)-ConvertToYUV444 - lsmash - avs2yuv - 4K YUV444P16 in YUV444P10 out 0-8T
encoded 1666 frames, 5.13 fps, 31491.08 kb/s

x8 X264 FASTER convertbits(10)-ConvertToYUV444 - lsmash - avs2yuv - 4K YUV444P16 in YUV444P10 out 0-8T
encoded 1666 frames, 5.10 fps, 31491.93 kb/s

Mit VapourSynth like Umsetzung und direktem laden als YUV444P10 Quelle:
Code:
REM ### First 3 lines will be skipped when generating AVS/VPY script from this file. 2nd line must have vspipe/ffmpeg/avs2yuv64 call. Do not remove GOTO :EOF in 3rd line!
"%hybridFolderWin%\64bit\Avisynth\avs2yuv64.exe" -depth 10 -nstdr "%cd%\%dynFileName%.avs" -o - | "%hybridFolderWin%\64bit\x264.exe" --crf 19.00 --profile high444 --level 5.2 --ref 2 --no-mixed-refs --keyint 250 --min-keyint 0 --scenecut 40 --bframes 3 --b-bias 0 --b-pyramid normal --direct spatial --b-adapt 1 --sync-lookahead 16 --cplxblur 20.0 --qcomp 0.60 --qblur 0.50 --mbtree --rc-lookahead 20 --ipratio 1.40 --pbratio 1.30 --chroma-qp-offset 0 --qpmin 0 --qpmax 69 --qpstep 4 --partitions i4x4,i8x8,p8x8,b8x8 --8x8dct --me hex --merange 16 --mvrange -1 --subme 4 --cabac --trellis 1 --weightp 1 --aq-mode 1 --aq-strength 1.00 --vbv-maxrate 240000 --vbv-bufsize 720000 --nr 0 --deadzone-inter 21 --deadzone-intra 11 --cqm flat --threads 16 --sar 1:1 --deblock 0:0 --non-deterministic --range tv --colormatrix bt709 --demuxer y4m --input-range tv --fps 24/1 --output-csp i444 --output-depth 10 --output "%cd%\%dynFileName%.264" -
goto :EOF

ClearAutoloadDirs()
SetFilterMTMode("DEFAULT_MT_MODE",MT_MULTI_INSTANCE)
SetFilterMTMode("FFT3dGPU",MT_MULTI_INSTANCE)
LoadPlugin("$$HYBRIDFOLDER$$\64bit\Avisynth\avisynthPlugins\LoadDll.dll")
LoadDLL("$$HYBRIDFOLDER$$\64bit\Avisynth\avisynthPlugins\d3d9.dll")
LoadPlugin("$$HYBRIDFOLDER$$\64bit\Avisynth\avisynthPlugins\LSMASHSource.dll")
LoadCPlugin("$$HYBRIDFOLDER$$\64bit\Avisynth\avisynthPlugins\ffms2.dll")
LoadPlugin("$$HYBRIDFOLDER$$\64bit\Avisynth\avisynthPlugins\FFT3dGPU.dll")
# loading source: $$SOURCEVID$$
# color sampling YV24@10, matrix: bt709, scantyp: progressive, luminance scale: limited
#####
# LWLibavVideoSource("$$SOURCEVID$$",cache=false,format="YUV444P16", prefer_hw=0,repeat=true)
LWLibavVideoSource("$$SOURCEVID$$",cache=false,format="YUV444P10", prefer_hw=0,repeat=true)
# FFVideoSource("$$SOURCEVID$$",colorspace="YV12")
#####
# current resolution:

# scaling to 3840x2026
Spline16Resize(3840,2026)

# Converting from 16 to 10bit for encoder
# ConvertBits(10)

# adjust color to YV24 (color matrix: Rec709)
# ConvertToYUV444()

PreFetch($$DYNMEASUREVAR$$)
#####
# setting output fps to 24.000fps
AssumeFPS(24,1)
#####
#  output: color sampling YUY2@10, matrix: bt709, scantyp: progressive, luminance scale: limited
return last
--------------------------------------------------------------------------------

REPLACEMENTS:
$$SIGMA$$ replaced with '2.00'
$$BW$$ replaced with '32'
$$BH$$ replaced with '32'
$$BT$$ replaced with '3'
$$PLANE$$ replaced with '4'
$$MODE$$ replaced with '0'
$$PRECISION$$ replaced with '1'
$$BORDERSIZE$$ replaced with '1'
$$HYBRIDFOLDER$$ replaced with 'C:\Program Files\Hybrid'
$$HYBRIDFOLDER_VS$$ replaced with 'C:/Program Files/Hybrid'
$$SOURCEVID$$ replaced with 'C:\BENCH_AVS_VPS_FILTER\Hybrid YUV444P10 handling\cut_TGM_TLR2_IMAX_3840x2025_H265_YUV444_10BIT.mkv'
$$SOURCEVID_VS$$ replaced with 'C:/BENCH_AVS_VPS_FILTER/Hybrid YUV444P10 handling/cut_TGM_TLR2_IMAX_3840x2025_H265_YUV444_10BIT.mkv'
$$DYNMEASUREVAR$$ replaced dynamically [start,step,end] with '0,2,8'
$$DYNMEASUREVARGAP$$ replaced dynamically [start,step,end] with '0,2,8' +- gap of '+1'

--------------------------------------------------------------------------------

x0 X264 FASTER lsmash - avs2yuv - 4K YUV444P10 in YUV444P10 out 0-8T
encoded 1666 frames, 5.21 fps, 31484.95 kb/s

x2 X264 FASTER lsmash - avs2yuv - 4K YUV444P10 in YUV444P10 out 0-8T
encoded 1666 frames, 5.16 fps, 31487.20 kb/s

x4 X264 FASTER lsmash - avs2yuv - 4K YUV444P10 in YUV444P10 out 0-8T
encoded 1666 frames, 5.31 fps, 31489.04 kb/s

x6 X264 FASTER lsmash - avs2yuv - 4K YUV444P10 in YUV444P10 out 0-8T
encoded 1666 frames, 5.27 fps, 31489.41 kb/s

x8 X264 FASTER lsmash - avs2yuv - 4K YUV444P10 in YUV444P10 out 0-8T
encoded 1666 frames, 5.21 fps, 31488.59 kb/s

Ja ich weiß, du hast das eh schon als bug eingestuft, wollt nur zeigen, dass preset faster u.U. etwas besser für derartige Messungen ist. Jedenfalls in meinem System... Da wird bei mir gerade so (jedenfalls die meiste Zeit) eine nahezu vollständige Auslastung des Systems erreicht. Das scheinen mir optimale Voraussetzungen zu sein und ich werde wohl für andere Vergleichsmessungen erstmal dabei bleiben.
Quote:Aktuelle Hybrid AviSynth Umsetzung mit convertbits(10) und ConvertToYUV444
Nicht ganz richtig, sollte in der dev Version die ich geschickt hatte gefixed sein.
(15.05.2022, 20:01)Selur Wrote: [ -> ]Nebenbei: DGDecNV gibt bei >8bit immer 16bit aus.
-> könntest mal testen ob das bei libav auch ist wenn Hardware decoding verwendet wird.

Cu Selur

Ist dir eigentlich irgend eine Hardware Decoding Methode bekannt, die mit AMD GPUs kompatibel ist?
Hab festgestellt, dass das Playback von diesem 4k 10bit video meine CPU zu 75% auslastet Dodgy  Da würde HW Decoding vermutlich wirklich was bringen...


Mir ist außerdem bezüglich der mauen fft3dgpu Performance bei 10 bit Quellen ein Licht aufgegangen. Da wird intern immer precision=2 genutzt, da wird meine angestaubte GPU dann vermutlich selbst im mode 0 langsam zum bottleneck.
Changelog von Avisynth.nl:
Quote:Changelog
Version      Date             Changes

v0.8.6      2021/01/04   - Support 10-32 bit formats. Parameter ranges (smin, smax, sigmas) are the same for all bit depths.
                                     - For 10-32 bit clips parameter "precision" is ignored and is set to 2: always use 32 bit float internally
                                     - Note: for 8 bits "precision" default is 0: calculation is done in 16 bit floating point type (s10m5) internally
Quote:Ist dir eigentlich irgend eine Hardware Decoding Methode bekannt, die mit AMD GPUs kompatibel ist?
DirectShowSource geht vermutlich,... aber nein, wüsste keinen brauchbaren SourceFilter der UVD unterstützt.

Cu Selur
Vielleicht geht auch FRIM. (Filtering->Avisynth->Misc->Source->Support FRIM)

Cu Selur
(17.05.2022, 05:24)Selur Wrote: [ -> ]
Quote:Ist dir eigentlich irgend eine Hardware Decoding Methode bekannt, die mit AMD GPUs kompatibel ist?
DirectShowSource geht vermutlich,... aber nein, wüsste keinen brauchbaren SourceFilter der UVD unterstützt.

Cu Selur

Nach langer Zeit hab ich jetzt Directshowsource mal wieder ausprobiert und mit 10 bit 4K Material gefüttert.
Erst dachte ich "Heureka! Mit avs2yuv ist das ja um die 20% schneller wie alle anderen! Warum bitte nicht tauglich?". Und das obwohl ich bei der GPU eigentlich keine wirkliche Load feststellen konnte Huh
Bis dann der Blick irgendwann auf Bitrate und den Output fiel. Da wurde leider nur Pixel Art produziert Tongue

Mals sehen, ob ich die Ursache da finde, aber die Beschleunigung kam bestimmt nur vom fabrizierten Murks... Am Sampling liegt's wohl nicht, sowohl YUV444P10 als auch YUV420P10 haben gleichermaßen nur psychedelische Bilder produziert.
Vielleicht liegt's am Y4M Format, welches avs2yuv standardmäßig in Hybrid nutzt. Jedenfalls wurde die horizintale Auflösung einfach mal halbiert. Oder da liegt ein ähnliches Problem wie bei FFT3DGPU vor und es wird intern mit unzureichender Genauigkeit gerechnet. Oder beides... Oder was ganz anderes...
Problem bei DirectShowSource ist:
a. es ist i.d.R. nicht frame genau wenn gesprungen wird
b. je nach dem wie die DirectShow Filter die im System installiert sind gibt DirectShowSource nicht umbedingt den Farbraum wieder den das Quell Material hat.
Für micht sieht es so aus, als ob letzteres das Problem ist. Wink
y4m geht an sich ohne Probleme mit yuv444PX.

Cu Selur
(18.05.2022, 16:12)Selur Wrote: [ -> ]Problem bei DirectShowSource ist:
a. es ist i.d.R. nicht frame genau wenn gesprungen wird
Ist das eher ein Thema, das Auftritt, wenn es als Playback Filter eingesetzt wird?
Oder beinflusst dass das Resultat vom Encoding? Hätte jetzt gedacht, dass das eher von Encoder und Muxer beeinflusst wird.
Der Decoder liefert ja eigentlich einfach nur nacheinander voneinander unabhängige Vollbilder und kein I P B Frames usw. die voneinander abhängen. Wenn dann die Framerate Frabraum uws. bekannt sind, wird das ja eigentlich wieder komplett neu von Encoder + Muxer zusammengepuzzelt. Stelle ich mir vermutlich zu einfach vor...
Wenn ich ehrlich bin, ist mir auch gar nicht richtig klar wie da die Arbeitsteliung zwischen FFMpeg/Avs2Yuv und dem Source Filter genau abläuft.

(18.05.2022, 16:12)Selur Wrote: [ -> ]b. je nach dem wie die DirectShow Filter die im System installiert sind gibt DirectShowSource nicht umbedingt den Farbraum wieder den das Quell Material hat.
Für micht sieht es so aus, als ob letzteres das Problem ist. Wink
y4m geht an sich ohne Probleme mit yuv444PX
Ich hab das K-Lite Mega Codec Pack 16.1.6 drauf, welches MPC-HC mitinstalliert. Ist ziemlich genau ein Jahr alt. Keine Ahnung ob das was zerschossen hat.
Eigentlich verwende ich das schon länger, ohne dass ich bisher auf größere Probleme gestoßen bin.
Auf der Website steht: The K-Lite Codec Pack is a collection of DirectShow filters, VFW/ACM codecs, and tools.

Was ich mich schon häufiger gefragt habe: Überschreibt sowas eigentlich die z.B. von Windows mitgelieferten Original Codecs/Filter usw.?
Und wenn nicht, wie zum Henker soll ich beeinflussen welche Software welche Version eines Filters/Codecs verwendet? Womöglich registriert immer die Software, die als letztes sowas installiert hat, seine Version irgendwo in der Registry als default und die ganzen anderen 100 Versionen schimmeln als Dateimüll, der u.U. nie wieder benutzt wird, auch noch irgendwo rum?!?

Und mal blöd im Bezug auf Hybrid gefragt: Eigentlich ist es ja immer sicherer, wenn eine Software ihre eigenen Codecs/Filter im installierten Programmverzeichnis mitbringt, weil dann sicher eine definierte Version verwendet wird. Darf das Hybrid bei DirectShow Filtern nicht, oder gibt's da andere Gründe?
LSmashsource hat ja seine Codecs sozusagen an Bord im Hybrid folder, oder greift das genau so auf irgendeine im System installierte Libavcodec Version zu?
Ohje, sind das schon wieder ein haufen Fragen...
Quote:Ist das eher ein Thema, das Auftritt, wenn es als Playback Filter eingesetzt wird?
Ist ein Problem was eher beim Filtern Probleme macht.
DirectShow is gerade dann nicht frame genau wenn du Frames nicht in der Reihenfolge abfragst.
Sprich z.B. erste Frame 88 dann 87 und dann 89, wie einige filter/scripte es tun. Für die meisten temporalen filter ist es nicht so dolle wenn die Frames die sie anfragen nicht die Frames sind die sie bekommen. Beim normalen Playback im Player wird einerseits nicht so vie gesprungen und andererseits ist es da nicht so schlimm wenn mal hier und da ein Frame durcheinander gebracht wird wenn man doch wie verrückt springt. Wink

Quote:Was ich mich schon häufiger gefragt habe: Überschreibt sowas eigentlich die z.B. von Windows mitgelieferten Original Codecs/Filter usw.?
DirectShowFilter haben:
a. Formate für die sie sich registrieren
b. Prioritäten
-> Ja, irgendwelche Filterpacks sorgen dafür, dass ihre Filter andere Filter 'überdecken'.
Software die DirectShowFilter verwendet, fragt entweder bewusst nach bestimmten Filtern oder fragen nach einem Format und nehmen dann die Filter die zur Verfügung stehen.

Quote:Darf das Hybrid bei DirectShow Filtern nicht, oder gibt's da andere Gründe?
DirectShowSource greift auch die DirectShowFilter zu die im System registriert sind.
Wenn man DirectShowSource mit einem Filtergraph füttert wird die in ihm enthaltenen Regeln verwendet, ansonten was immer das System liefert. So lange Hybrid nicht eigene Filter mit bringt und für diese dann extra Filtergraphen schreibt und verwendet, macht das keinen Sinn. -> DirectShowSource sollte i.d.R. vermieden werden. Ach ja, noch ein Ding an DirectShowFiltern, die sind für Playback optimiert, sprich, wenn das Decoding nicht schnell genug ist, ist es auch erlaubt mal ein Frame weg zu lassen bzw. einfach das letze Frame mehrfach ausgibt. Wink Was natürlich für Avisynth&Vapoursynth nicht okay ist.
-> DirectShow ist nicht wirklich brauchbar und nur eine Notlösung, wenn es keine andere Alternative gibt.

Cu Selur

Ps.: https://forum.doom9.org/showthread.php?t=176231 ist vielleicht auch interessant.
Pages: 1 2 3 4 5 6