x264 Streaming und Aufnahme

  • Konnte jetzt die neuen Tipps nicht ausprobieren, schau LCS, gleich fängt das 5 Game bei einem best of 5 an xD

    Was ich mir aber gerade gedacht habe, vielleicht ziehe ich es auch vom falschen Ende auf.
    Vielleicht sollte ich eher mit dem Prset Very Fast arbeiten und schauen das ich die CPU Last reduziere indem ich einen Parameter nach dem anderen deaktiviere.
    Hierbei wäre dann natürlich gut zu wissen welche Parameter viel CPU Leistung brauchen und welche eher weniger.

  • Ach ja mir fällt gerade ein.
    Momentan Teste ich die Einstellungen immer gleich am Spiel mit einer Aufnahme.
    Dementsprechend kriege ich nicht genau das gleiche Videomaterial hin dadurch kann ich immer nur schauen ob die Makroblöcke irgendwo auftauchen.
    Müsste ich nicht wenn ich eine Aufnahme mache, diese lossless speichere und dann durch MeGui schicke, zum Beispiel mit Ultrafast, genau die gleichen Ergebnisse bekommen, als wenn ich im Aufnahmeprogramm Ultrafast eingestellt habe?
    Das würde das vergleichen nämlich deutlich vereinfachen xD

    Aber wenn wir schon mal bei dem Thema sind...
    Der Grund dafür das ich ein bereits fertig codierte Aufnahme haben wollte, war das ich mit x264 Aufnehmen wollte, qp=0
    Da ich hier je nach Spiel teils deutlich Größenunterschiede, je nach Spiel, im vergleich zu UT Video oder MagicYUV hatte.
    Zudem kommt noch das UT Video in OBS Studio nur über ffmpeg und nicht über die VFW-Schnittstelle integriert wurde, wodurch MagicYUV komplett weg fällt.
    Das Problem war nur das wenn ich dann meine Aufnahme mit x264 und qp=0 neu codieren lassen wollte, halt so das man es hochladen kann...
    Das Problem dann war nur das ich meine CPU nicht mehr zu 100% ausgelastet bekommen habe, bei allem über fast...
    Hierbei hatte ich auch schon geschaut wodran es liegen könnte, Decoder, Avisynth, Resizer und und und...
    Ich hatte dann sogar probiert über einen weiter MeGui Worker die CPU besser auszulasten, ging nicht...
    Sie haben sich dann einfach die Geschwindigkeit geteilt.
    Hier ist dann die frage wodran das liegen kann?

    Einmal editiert, zuletzt von GelberDrache (3. April 2017 um 12:12)

  • Müsste ich nicht wenn ich eine Aufnahme mache, diese lossless speichere und dann durch MeGui schicke, zum Beispiel mit Ultrafast, genau die gleichen Ergebnisse bekommen, als wenn ich im Aufnahmeprogramm Ultrafast eingestellt habe?


    Ja. Vergleich aber zur Sicherheit die Parameter über MediaInfo. Könnte sein, daß OBS da im Hintergrund etwas andere Parameter als MeGUI wählt.

    Das Problem dann war nur das ich meine CPU nicht mehr zu 100% ausgelastet bekommen habe, bei allem über fast...


    "über fast" heißt medium bis placebo?

  • Ich kann das nicht nachvollziehen. Habe ein utvideo mit 2560x1440 Pixeln erstellt. Über lwlibavvideosource() geöffnet und einen Benchmark durchgeführt. Dann noch einen Benchmark mit Enkodierung einer einfachen Quelle über x264 --qp 0 --preset ultrafast. Beides lastete jeweils die CPU zu fast 100% aus. Das Dekodieren war etwas schneller als das Enkodieren, d.h. das sollte auch kein Flaschenhals sein. Allerdings habe ich derzeit nur einen Quad-Core ohne Hyper-Threading, d.h. meine Ergebnisse sind nicht 100% auf Deinen i7 übertragbar.

    Kann es sein, daß Deine Festplatte an ihre Grenzen gerät? Kannst Du Dein Skript mal an x264 pipen aber an -o NUL ausleiten? Das ganze auch parallel (doppelt) - das wäre dann noch belastender für die Festplatte.

    Einmal editiert, zuletzt von sneaker2 (3. April 2017 um 13:55)

  • Die Aufnahme würde ja dann bereits mit QP=0 und Ultrafast gemacht werden und damit wird dann MeGui gefüttert.
    Zudem die Festplatte nicht der Flaschenhals sein wird, da ich schon mit verschiedenen Festplatten und SSD das probiert habe.
    Also auch Aufnahme auf SSD und dann auf eine andere HDD geschrieben.

    Kannst Du Dein Skript mal an x264 pipen aber an -o NUL ausleiten? Das ganze auch parallel (doppelt) - das wäre dann noch belastender für die Festplatte.


    Hier wüsste ich nicht genau was du meinst oder wie man das macht.
    Zudem die Aufnahme eine Auflösung von 2048x1152 hat.

  • Eine andere Erklärung als das mit der Festplatte habe ich so nicht. Könnte sein, daß der 6C/12T nicht voll auslasten kann, was ich hier mit 4C/4T nicht testen kann. Aber das erklärt nicht unbedingt, warum das auch bei zwei Workern so bleibt.

  • Gibt es eine Möglichkeit wo man so wenig wie nur irgendwie möglich an Flaschenhälse haben kann.
    Das eigentlich nur noch decodiert und dann encodiert wird.
    Also x264 QP=0 Aufnahme -> x264 CRF18 Encodiert

  • Nur Source-Filter im Skript und das dann Enkodieren? :confused:

    Mach auch einen reinen Dekoding-Benchmark des Skripts (avsmeter oder avs2pipemod -bench). Haut MeGUI evtl. so etwas wie threads=1 in den Source-Filter? Dann könnte Dekoding ein Flaschenhals sein. Aber das erklärt immer noch nicht das Problem mit mehreren Workern.

  • Aber das erklärt immer noch nicht das Problem mit mehreren Workern.


    Werden denn die Daten vom avs Script zum Encoder gepipet? Dürften dann ja kopiert werden (?) und könnten ein Flaschenhals sein.
    Bei Auflösungen bis 1080p fällt das nicht ins Gewicht, aber bei 4K habe ich schon häufiger gelesen, dass es bei einigen, die das getestet haben, zu Performanceverlusten kommt.

    Nicht unbedingt wahrscheinlich, könnte man aber mal mit purem ffmpeg testen:

    z.B.

    Code
    ffmpeg -threads 0 -i input_datei.mkv -vcodec libx264 -preset medium -x264opts crf=18:direct=auto:aq-mode=3:force-cfr=1:b-adapt=2:rc-lookahead=60:stitchable=1 -map_metadata 0 -movflags faststart -threads 0 output_datei.mkv
  • Nicht unbedingt wahrscheinlich, könnte man aber mal mit purem ffmpeg testen:


    So unwahrscheinlich wie es war, war es tatsächlich Avisynth.
    Rein über CMD.exe wird selbst bei Ultrafast die CPU zu 100% ausgelastet.
    Jetzt wäre für mich die frage wodurch das sein könnte.
    Wir nutzen halt ein Skript was über eine GUI erzeugt wird (Sagaras Scriptmaker).
    Diese Gui ist dafür da um einfache Befehle wie, Auflösung, Fps, Resizer, Schnitt, usw für den Dau grafisch dazustellen, damit die auch Avisynth und MeGui nutzen können.
    Das Problem mit der Auslastung der CPU hatten wir bisher hallt auch nur bei x264 Aufnahmen mit qp=0
    Hängt das vielleicht damit zusammen das das Video über FFMS2 geladen wird?

  • Einmal editiert, zuletzt von GelberDrache (3. April 2017 um 20:11)

  • Bei den Quellfiltern sehe ich zumindest schon mal threads=1. Resizen ist auch so ein Kandidat, wobei ich jetzt nicht weiß, ob das überhaupt genutzt wird. Dazu bräuchte man noch ein Sample oder zumindest MediaInfo-Log der Quelle.

    Teste mal ein simples Skript:

    Code
    LWLibavVideoSource("D:\Aufnahme\Test\qp=0.mkv")


    oder:

    Code
    ffvideosource("D:\Aufnahme\Test\qp=0.mkv")
  • Mit den einfachen Skripten läut es schon sehr gut, wobei hier ffvideosource zu 100% meine CPU auslastet und LWLibavVideoSource nur zu 90%.
    [Wir haben auch schon gerade einmal geschaut, wenn man man Threads=1 raus nimmt, wird die CPU deutlich besser ausgelastet, 95%, dafür ist die Geschwindigkeit, also die fps langsamer.]
    Ok SetMtMode (3) raus genommen, jetzt läuft es ordentlich xD

  • Ich hab jetzt aber gerade mal ffmpeg und Avisynth / MeGui verglichen, was die Geschwindigkeit angeht.
    ffmpeg: 195 fps
    MeGui: 90

    Klar hier ist der Unterschied das bei ffmpeg schon alleine mal nicht Avisynth genutzt wird.
    Trotzdem ist der Unterschied nicht gerade zu Unterschätzen.
    Sagaras meinte das man über ffmpeg mit einer pipeline auf den x264_10bit von MeGui zugreifen könnte, hier wäre dann die frage wie sowas gehen würde.
    Zudem was für Möglichkeiten würde es bei ffmpeg zum Beispiel für Skalierung oder Schnitt geben, ohne das man Sachen wie Avisynth nutzen muss, nur mal aus Interesse.

Jetzt mitmachen!

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