Threadanzahl für x264

  • Den Schritt mit dem DivX- hatte ich damals zum Glück ;D übersprungen, meine ersten Encodes waren VP7. (der ging so von der Speed ok)
    4Stunden wäre BlueRay Material in 2Pass, diese OTR HD avi nochmals drücken dauern hingegen nochmals länger, was wohl daran liegt, das diese 50FPS haben.

  • Zitat

    was wohl daran liegt, das diese 50FPS haben.


    Wobei man vermutlich die Hälfte der Bilder auch verwerfen könnte, da es vermutlich eh nur doppelte sind,.. *gig*
    Kann LigH aber nur zustimmen, ich erinnere mich hier noch an Aktionen wo ich erst 2 Tage lang den Rechner hab laufen lassen um das AvisynthSkript erst mal nach HuffYUV zu rendern und dann noch mal 2 Tage um den 2pass Xvid encode hinter mich zu bringen,... nur um am Ende festzustellen, dass ich irgendwas falsch eingestellt hatte und das ganze noch mal machen darf. ;)

  • Bei HD Material sehe ich keine so großen Sprünge, selbst wenn ich testweise auf "fast" Presets gehe, wird das nicht soo wesentlich schneller als wie unter slow. Bei niedrig auflösenden Sachen (DVDs usw) ist der Unterschied von fast zu slow Presets hingegen sehr deutlich spürbar (teils um das doppelte mehr FPS).

    Also ein Faktor von zwei ist bei slow/fast durchaus normal und wird bei mir auch bei HD-Material erreicht. Achte mal auf die CPU-Auslastung bei der HD-Encodierung unter preset fast, ob dort nicht ein Flaschenhals sitzt.

  • Na ja, das irgendwas mit der Treadverteilung nicht so ganz koscher ist, hatte ich ja auch eingangs gefragt - denn zwischen 6 und 15 Treads macht nur max. 5% aus. Das ist aber nicht nur bei mir in vdub / x264vfw so, sondern in allen Konvertierprogrammen (in Verbindung mit dem X6) :rolleyes_: und z.b. im Mediacoder mit 1080p siehts so aus:
    Preset fast: 25FPS (50-80% CPU Auslastung)
    Preset slow: 23FPS (85-95% CPU Auslastung)
    Preset slowest: 17FPS (95-100% CPU Auslastung)

    Die CPU läßt sich egal wieviel Treads in den "schnelleren" Fast Profilen einfach nicht weiter als 80% auslasten. :nein:
    Andererseits ist es auch nicht soo tragisch, weil ich ja eh mit höheren Settings encode und liege da bei meist ~95% CPU Auslastung. :)

    10 Mal editiert, zuletzt von Der_Lurchi (25. Januar 2012 um 18:15)

  • Also, denkst du die Werte mit HD Material sind dann doch für den X6 im normalen Rahmen?
    Unter DVD Material siehts so aus:

    Preset fast: 96FPS (Auslastung 90-100%)
    Preset slow: 75FPS (Auslastung 95-100%)
    Preset slowest: 34FPS (Auslastung ~100%)

    Bei kleineren Auflösungen sind zwischen Fast und slowest immerhin ~60FPS Unterschied = 3x schneller und die CPU skaliert da auch anscheinend recht ordentlich. Bei HD Material hingegen wie im vorigen Posting zu sehen jedoch nur lumpige 8FPS zwischen fast & slowest.

    4 Mal editiert, zuletzt von Der_Lurchi (25. Januar 2012 um 18:50)

  • Eben weil da weniger Daten zu verarbeiten sind. Entsprechend müssen auch weniger Daten zwischen RAM und RAM und Festplatte hin und her geschaufelt werden, worauf die CPU warten müsste. Bei einer überschaubaren Datenmenge trifft dann auch der Level-2- oder gar Level-3-Cache öfters mal.

  • Aha ok, alles klar - war halt nur verunsichert, weil Sneaker sagte er hätte bei HD-Material ebenfalls einen Zugewinn um Faktor 2, was dann ja quasi 40-50FPS im Fast Preset sein müßten. (ich ermittel da zumindest mal keinen solchen Zugewinn mit meinem PC bei 1080p)

    Zitat

    Also ein Faktor von zwei ist bei slow/fast durchaus normal und wird bei mir auch bei HD-Material erreicht

    8 Mal editiert, zuletzt von Der_Lurchi (25. Januar 2012 um 19:04)

  • Meine Erfahrung ist, dass x264 eigentlich durch die Bank gut skaliert. Nochmal einen Testlauf mit einer 5-Minuten-Sequenz gemacht:

    1080p Source, geladen mit Avisynth/DGDecodeNV, x264_r2146 --crf 21 , alles in x86_64 , auf i7-860 (4C8T)

    Code
    --preset veryfast: 41.83 fps, 6144.61 kbps, CPU 50~70%--preset faster:   31.47 fps, 6898.15 kbps, CPU 80~95%--preset fast:     22.16 fps, 7158.45 kbps, CPU 99~100%--preset medium:   18.37 fps, 6881.94 kbps, CPU 99~100%--preset slow:     10.02 fps, 6823.69 kbps, CPU 99~100%--preset slower:    6.15 fps, 6641.32 kbps, CPU 99~100%--preset veryslow:  3.07 fps, 6205.86 kbps, CPU 99~100%

    Skaliert doch recht gut.

    Dass bei schnellen Presets die CPU-Auslastung sinkt (und mithin auch die Skalierung), liegt vor allem an der "Frametype decision": die ist nämlich noch nicht parallelisiert (oder nur wenig). Deswegen wird die Performance von dem Thread limitiert, der die Frametype decision durchführt.

    Das Parallelisierungs-Problem ist knifflig: durch die vielen internen "Tools" gibt es zu jedem Zeitpunkt einen ganzen Strauß an verschiedenen Möglichkeiten, wie man die I/P/B-Verteilung anordnen kann, es muss also einiges probiert und geschätzt werden. Und vor allem: solange noch nicht entschieden ist, was mit Frame N eigentlich gemacht wird, solange kann auch noch nicht entschieden werden, was mit den später nachfolgenden Frames N+x am besten zu tun ist.
    Die Frametype decision ist praktisch (noch) der Knackpunkt, an dem die ganze Parallelisierung auf eine rein lineare Kette zusammenbricht, bzw. auf den linearen Anteil warten muss.


    Praxis: das Spiel von oben nochmal, mit --veryfast, aber diesmal im 2-pass-Verfahren. Hier wird die Frametype decision ja nur im 1.Pass durchgeführt. Der 2.Pass rechnet praktisch das gleiche wie zuvor oben, nur dass er eben keine Frametype decision mehr durchführen muss ...

    Code
    --preset veryfast ,  2-pass
    
    
    --pass 1         : 50.11 fps, 6293.60 kbps, CPU 35~50%
    --pass 2         : 77.38 fps, 6155.47 kbps, CPU 99~100%

    Hoppala... im Vergleich zu CRF: 60% --> 100% , und 41.8 --> 77.4 fps. Nur weil keine I/P/B-Entscheidungen mehr getroffen werden müssen.

  • Hallo,
    danke für die Bench/Infos, hat mir nun keine Ruhe :D gelassen und habs nunmal in vdub gemessen.
    Mit ffmpeg2source/DGDecNV/AviSynth, weiß ich adhoc zwar noch nix mit anzufangen (muß mich erst einlesen) -- aber dieser Hinweis hat mich dazu mal veranlaßt zu probieren "womit sich sonst mkvs" in vdub noch öffnen lassen ..... und sieh da, zumindest in vdub hab ich jetzt unter HD Material auch bei den Fast Presets zum ersten mal mit dem X6 volle Auslastung der Kerne :lol: :ja: :lol: (abhängig jenach Plugin):

    1080P MKV (BlueRay / 2Minuten Clipencoding) / Preset Fast --CRF21 --threads 9
    DirectShow Plugin: 75% / 1.47 Minuten
    FCC Handler mkv Plugin: 80% / 1.26 Minuten
    FFMpeg-Plugin: 100% / 1.00 Minuten

    H.264 (OTR.avi) / Preset (eigenes) --CRF 20 --threads 9
    vdub (standartmäßig ohne Plugin geöffnet): 75% -- > 4.03Minuten
    DirectShow Plugin: 64% --> 6.23 Minuten
    FFMpeg Plugin 90% --> 2.54 Minuten
    Hatte ich vorher so nie ausprobiert und die otr avi immer "normal" geöffnet (d.h. ohne ein InputPlugin anzuwählen) :rolleyes_: - aber der Zeitunterschied und auch die CPU Auslastung mit dem FFMpeg Plugin ist ja schon wirklich gravierend.

    5 Mal editiert, zuletzt von Der_Lurchi (26. Januar 2012 um 16:15)

  • Zitat

    Wg. des DGDecNV/CUDA Decoders, bringt das beim Encoden einen zeitlichen Unterschied anstelle ... Ja, aber der ist nicht sonderlich groß.


    Nicht sehr groß ist relativ, bringt bei 1080p Materal schon eine weitere Zeitersparnis. (die paar Minuten für das Indizieren fällt da nichtmals mehr negativ ins Gewicht)
    Was mich nur stört, das anscheinend ohne zusätzliche Plugin über avisynth anscheinend nur wav verarbeitet wird.
    Installiert habe ich den Arcsoft DTS Dekoder, kann ich den im Script laden - falls ja wie?
    (lade das script in vdub und soll von da einfach als avi mit Ac3 encoded werden)

    LoadPlugin("path...\DGDecodeNV.dll")
    video=DGSource("filename.dgi")
    -- wie weiter ab hier & was muß zusätzlich für DTS installiert sein:
    Load?
    audio= ??? ("filename.dts")
    AudioDub(video,audio)

    Oder geht das nur über DirectShowSource?
    (hab das ausprobiert, funktioniert "irgendwie" aber mit den Kanälen/Interleave stimmt dabei irgendwas nicht)

    5 Mal editiert, zuletzt von Der_Lurchi (3. Februar 2012 um 13:25)

  • Wenn der Arcsoft DTS Decoder ein DirectShow-Decoder ist, dann könnte er möglicherweise per DirectShowSource verwendbar sein. Vorausgesetzt, du hast auch einen Quellfilter, der *.dts-Dateien als DTS erkennt und weiß, dass der Arcsoft-Decoderfilter dafür geeignet ist.

    Andere Möglichkeiten wären wohl FFAudioSource oder NicDTSSource. Da dies native AviSynth-Plugins sind, würde ich die vorziehen, außer es gibt gute Gründe, einen DirectShow-Decoder zu verwenden.

    Und dann willst du aus VirtualDub heraus eine AC3-Tonspur encodieren? Womit? Mit dem AC3ACM-Codec von ffcHandler? Dann vielleicht doch lieber via MeGUI mit Aften?

  • Die Directshow Variante wollte ich eigentlich außen vor lassen (den kann das nicht wieder zu FrameDrops führen?)
    Den Arcsoft Dekoder habe ich derweil im eacto3 ans laufen gekriegt (was btw. auch diese Clipping Errors fixt ;) ) Vermutlich wirds wohl letzlich dann doch am sinnvollsten sein, den video Stream über DGDecNV/Avisynth/vdub und das audio seperat weiter über eacto und die Spuren anschließend mit Avimux wieder zusammenführen?

    Nur wie ist das eigentlich mit Filtern:
    Ok, ich croppe vorm indixieren und wenn man dann ja (in die avs) z.b. , resize_w=1280, resize_h=720 dranhängt, macht DGDecNV anscheinend über die GPU ein crop+Resize.
    Was für eine Art Resize ist dieses GPU basierte eigentlich und kann man über andere Methoden (Lanczos, Spline, Billinear usw.) auch resizen?
    Soweit ich das überblicke (hab avisynth bislang so gut wie nie genutzt) säh ein Crop mitsamt billienaren Rezise ja etwa so aus:
    AVISource("Dateiname").Crop(10,10,5,5).BilinearResize(1280,720)
    Nur wie muß der Syntax hier lauten oder geht crop/resize in Verbindung nur über DGDecN internes crop/rezise?

    6 Mal editiert, zuletzt von Der_Lurchi (3. Februar 2012 um 15:51)

  • Sicher, im ZIP-Archiv von DGDecNV liegen auch ein paar HTML-Dateien, z.B. die DGDecodeNVManual.html. Lesen! Und dann AviSource() gegen DGSource() austauschen (mit entsprechenden Parametern).

    Wer übrigens erst croppen und dann skalieren will, kann auch beides in einem – sogar effizienter: Resize()-Filter in AviSynth unterstützen auch eine "Ausschnittsvergrößerung" mit vier zusätzlichen Parametern. DGSource() ebenso, wenn man sowohl crop- als auch resize-Parameter angibt.

  • Das habe ich gelesen, da steht aber nur das interne GPU crop/resize erklärt (was ja auch funktioniert)
    Was meinst du mit "austauschen"?
    Wenn ich die Zeile DGSource("Dateiname.dgi", resize_w=1280, resize_h=720) austausche mit: AVISource("Dateiname.dgi").Crop(10,10,5,5).BilinearResize(1280,720)
    Gibts die Meldung "Avisynth open failure"

  • Was meinst du mit "austauschen"?
    Wenn ich die Zeile DGSource("Dateiname.dgi", resize_w=1280, resize_h=720) austausche mit: AVISource("Dateiname.dgi").Crop(10,10,5,5).BilinearResize(1280,720)
    Gibts die Meldung "Avisynth open failure"

    Das ist ja auch genau das Gegenteil von dem, was ich meine (ist ja klar, dass AviSource keine *.dgi öffnen kann):

    AVISource("Dateiname").Crop(10,10,5,5).BilinearResize(1280,720)


    ^ Darin AviSource() ersetzen durch DGSource().

    Deine Crop-Angaben sind etwas unlogisch. Du willst also nur 5×5 Pixel ab Position (10,10)? Oder doch eher links udn rechts 10 Pixel weg, sowie oben und unten 5?

    DGSource("Dateiname.dgi").Crop(10,5,-10,-5).BilinearResize(1280,720)

    oder

    DGSource("Dateiname.dgi").BilinearResize(1280,720,10,5,-10,-5)

    oder so ähnlich, ungetestet. Also: BilinearResize auf 1280×720 den Ausschnitt mit Rand 10 von links, 5 von oben, 10 von rechts, 5 von unten.

    Allerdings sind 5 Zeilen oben und unten vielleicht keine gute Idee, ungerade Anzahlen in der Höhe sind immer etwas riskant. Vielleicht lieber 6.

  • Hey ja echt danke für die Erklärung, funktioniert nun einwandfrei. :)
    Und ja man kann nur gerade Zahlen beim Crop verwenden. Das Resize geht (in dem Beispielfall mit dem Billinear) dann aber über die CPU, oder?

    Welches Resize ist qualitiv das bessere, über GPU oder CPU?
    Bei z.b. Bicubic, Lanczos usw. kann man wohl über float "b", float "c" rumstellen (für Schärfe, Blur/Ringing des Resize) und gibts wohl auch noch div. andere Resize(Plugins): http://avisynth.org/mediawiki/External_filters#Resizers
    Gibt es irgendwo im Web Vergleiche der verschiedenen Varianten oder besser gleich bei bicubic bleiben?

    6 Mal editiert, zuletzt von Der_Lurchi (3. Februar 2012 um 16:57)

  • Ich weiß nicht, welche Methode die GPU verwendet. Wahrscheinlich bilinear, eventuell bikubisch. Bei DGDecNV ist es wohl nicht dokumentiert.

    AviSynth rechnet bei seinen Funktionen mit der CPU. Hier hat man eine recht große Auswahl, was aber auch heißt, dass man selber wählen (und alle mal ausprobieren) muss, was einem in welchem Zusammenhang am besten gefällt. Je mehr "Taps" (Stützpunkte) verwendet werden, umso höher ist der Rechenaufwand, aber das Ergebnis muss deswegen nicht unbedingt "schöner" wirken. Im Gegenteil, aufwändigere Funktionen können eher zum Ringing neigen als einfachere. Beim Verkleinern hatten wir unter anderem mal Spline16 vorgeschlagen.

    ResampleHQ - Kernels (erfordert Browser mit Unterstützung von HTML 5 und JavaScript Canvas)

  • Den Arcsoft Dekoder habe ich derweil im eacto3 ans laufen gekriegt (was btw. auch diese Clipping Errors fixt ;) ) Vermutlich wirds wohl letzlich dann doch am sinnvollsten sein, den video Stream über DGDecNV/Avisynth/vdub und das audio seperat weiter über eacto und die Spuren anschließend mit Avimux wieder zusammenführen?

    Ich würde zuerst den Ton encodieren und dann in VirtualDub (mit AC3-Plugin) direkt die bereits fertige Tonspur wählen. Damit sparst Du Dir einen Arbeitsschritt.
    ArcSoft direkt als AviSynth-Plugin habe ich noch nie gesehen, kenne da auch nur den DirectShow-Weg. (Bzw. genaugenommen würde ich H.264 nicht in AVI packen, aber das wurde hier ja schon bis zur Vergasung diskutiert.)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!