[Optimierung] Encoding

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • [Optimierung] Encoding

    Anzeige
    Hallo,
    da ich nächster Zeit meine Qualität verbessern möchte, habe ich mich am Wochenende mal hingesetzt und ein bisschen experimentiert. Meine Quelle war eine Aufnahme mit 60 FPS und 9:23 Minuten. Das Encoding läuft über den Frameserver mit MeGUI. Jetzt habe ich das Video mit verschieden Auflösungen enkodiert:

    - 1920x1080, Dauer: ca. 45 Minuten
    - 2560x1440, Dauer: ca. 1:20 Stunde
    - 3600x1800, Dauer: ca. 2 Stunden

    ...allerdings wurde mir noch eine andere Auflösung von 2048x1152 empfohlen, die ich leider nicht mehr testen konnte. Die Dauer des Encodings ist mir einfach viel zu hoch und deshalb wollte ich nachfragen, was ich noch optimieren könnte um ein optimales Ergebnis zu erzielen? Aktuell verarbeite ich eine Aufnahme (30 FPS, 1080p, ~20 Minuten Länge) in ca. 45 Minuten. Das ich mit höherer Qualität mehr Zeit beim Encoding benötige ist mir klar, aber doch nicht sooo viel. :D
    Es handelt sich hier ja immerhin um ein Video mit fast 10 Minuten Länge und das ist gerade einmal die Hälfte einer normalen Folge.

    In MeGUI verwende ich folgende Einstellungen:
    - CRF: 18,0
    - Preset: Slow
    - Resize Filter: Spline36 (ohne "Color Correction")
    - Upscaling MOD: mod8
    - GOP: 250

    Mein Ziel wären ca. 1:30 Stunde mit 60 FPS und einer Auflösung von 2048x1152 oder noch besser 2560x1440. Ist das überhaupt möglich und wenn ja, wie erreiche ich diese Zeit? Mein System besteht übrigens aus einem i7 4770K @ 3,5 GHz, 16GB RAM und einer GTX660 mit 2GB.

    Vielen Dank für eure Hilfe!
  • Mein ganz persönlicher Tipp: Versuch irgendwie, direkt nativ in der gewünschten Auflösung aufzunehmen. Nvidia DSR oder andere Tricksereien. Denn diese blöde Skalierung klaut nicht nur ewig viel Zeit, sondern sieht meistens noch unsauber aus. Wenn du direkt nativ in 2048x1152 aufnimmst und einfach nur durch MeGUI jodelst, kriegst du die wirklich sauberste Bildqualität bei kürzerer Kodierungszeit. ^^
  • Da haut der Julien doch tatsächlich wieder einen seiner Geheim-Tipps raus, Dankeschön! Warum bin ich nicht auf diese Idee gekommen?! :D
    Ich kann allerdings nur 2560x1440 und keine 2048x1152 auswählen. Unter "DSR - Faktoren" sind alle Optionen aktiviert.

    Wie sieht es denn mit den anderen Einstellungen von MeGUI aus, kann ich damit weiterarbeiten oder gibt es auch hier Verbesserungsvorschläge? Klar, den Resize Filter und Upscaling MOD brauche ich ja nun nicht mehr, wenn ich mit nativer Auflösung aufnehme. :)
  • Encodingspeed hängt zum einen von der eigenen CPU ab. Denn der x264 Encoder ist ein reiner CPU Encoder. Wird etwas davon geklaut und woanders benötigt, oder hat eine zu niedrige Priorität anderen Prozessen gegenüber, so wird das selbstverständlich langsamer.

    Ein Frameserver wie DebugMode oder Advanced können ebenfalls den Encode ausbremsen.
    Grund dafür ist das vom Schnittprogramm aus das Bild berechnet werden muss erst, dann als Pseudo-AVI in Farbraum x Frame für Frame gesendet werden muss. Dann wird es noch mal von AVISynth decodiert und schließlich von x264 encodiert.
    Dieser Prozess an sich ist schon sehr langsam, je nachdem was man noch zusätzlich draufballert an Filtern. Zum einen muss das Bild wie gesagt im Schnittprogramm berechnet werden und zusätzlich noch Außerhalb in AVISynth skaliert werden und das alles über einen einzigen Output, dessen Frames erst angefordert werden müssen.

    Dann ist auch noch die Bremse das kein Multithreading bei AVISynth in MeGUI genutzt wird. Da geht sehr viel Zeit drauf. Weil so ohne, wird alles nur mit einem Thread gearbeitet und das frisst einen seeeehr viel Zeit.

    Würde man noch Zusätzlich das Skalieren weglassen, würde der Encode wie @Julien gesagt hat auch noch mal schneller laufen. Dafür sollte dann aber eine native Aufnahme in der Zielauflösung erfolgen.
    Ist dies nicht möglich und es muss hochskaliert werden, so empfehle ich erst einmal AVISynth MT zu nutzen und eventuell dann nur mit MeGUI zu arbeiten. Auf jedenfall AVISynth MT würde dir schon mal einen ordentlichen Geschwindigkeitsboost geben bei jetzigem Workflow.

    ODER du verzichtest auf AVISynth und MeGUI und x264-10Bit und encodierst deine Videos über x264vfw. Dann brauchst du keinen Frameserver mehr, sondern kannst über die VFW Schnittstelle von deinem Schnittprogramm aus auf x264 zugreifen. Das wäre der schnellste Weg um x264 in Kombination mit der Schnittsoftware zu verwenden. Würde dir halt auch Zeit einsparen. ^^

    Was du nun machen willst weiß ich nicht. Aber optimieren kann man es auf jedenfall.
  • Anzeige
    @Sagaras: Vielen Dank für die ausführliche Erklärung. Ich habe das mit der nativen Aufnahme von 2560x1440 mal ausprobiert. Das Problem ist jetzt, dass ich das Spiel zwar in 60 FPS spielen kann, jedoch wird die Datei in Dxtory nur mit ~30 FPS geschrieben. Die Geschwindigkeit der Platte liegt bei ca. 160-170 MB/s.

    Ich arbeite mit Adobe Premiere und möchte auch nicht wechseln. Das mit dem x264vfw müsste ich mir daher noch einmal genauer anschauen, da ich davon absolut keine Ahnung habe. :)
  • Wossi schrieb:

    Sehr gute Arbeit! So wie ich das verstehe, muss ich nur den x264vfw installieren und kann dann direkt über Adobe Premiere die Aufnahme encoden, oder?!

    Danke ^^

    Ja, du brauchst x264vfw, einen Muxer (MyMP4Box) und ein Audioencoder (z.B. NeroAAC mit MeGUI als Oberfläche)

    Adobe erstellt dann 2 unterschiedliche Dateien.
    • Die Videospuren werden durch [lexicon]Adobe[/lexicon] gerendert, von [lexicon]x264vfw[/lexicon] encodiert und als AVCRAW Stream ausgegeben.
    • Die Audiospur wird als [lexicon]PCM[/lexicon] encodiert und kommt in, den von der vfw-Schnittstelle zugewiesenen, [lexicon]AVI[/lexicon]-[lexicon]Container[/lexicon].
    Die AVI kannst du dann in MeGUI reinziehen und mit NeroAAC encodieren, dann hast du das fertige Audio als .mp4

    Das Audio kommt dann mit der AVCRAW Datei in MyMP4Box und wird in ein MP4 Container gemuxt.

    Du musst aber genau auf die Einstellungen bei x264vfw achten, guck dir dafür am besten das Video an, da geh ich genauer darauf ein. :)
    ~ Let's plays, Animes, Cinematics, Zeichnungen ~ :D
  • Wossi schrieb:

    Ich kann allerdings nur 2560x1440 und keine 2048x1152 auswählen. Unter "DSR - Faktoren" sind alle Optionen aktiviert.

    Benutzerdefinierte Auflösung erstellen mit 2048x1152 und vorher DSR deaktivieren, falls nötig.
    Dein Monitor bekommt dann das native 1152p Material, statt dem runter skalierten DSR Material.
    Die meisten skalieren dieses Material dann selbstständig runter auf ihre eigene native Auflösung.
    Bedeutet allerdings, dass es unterstützt werden muss und demnach nicht mit jedem Monitor möglich ist.
    Bei mir ist beispielsweise bei 1800p Schluss auf meinen 1080p Monitoren.
  • ...also ich habe es jetzt noch einmal mit der nativen Aufnahme und dem MagicYUV versucht, allerdings ohne Erfolg. Der MagicYUV Codec ist nicht so stabil wie der Lagarith Lossless. Da dropen die Frames beim Schreiben schon mal auf 13 ab! Der LLC bleibt eigentlich konstant bei 30 FPS (mit kleineren Drops). Das Spiel läuft aber mit 60 FPS, deshalb bringt die native Aufnahme von 2560x1440 nichts. Ich versuche mal den Tipp von @Kayten, um zumindest das bessere 1080p auf Youtube zu erhalten.

    ~edit:
    Jetzt habe ich es nochmal mit der nativen Auflösung von 2048x1152 probiert... überwiegend konstant bei 45 FPS, doch es kann ab und zu passieren, dass die Frames beim Schreiben auf 30 FPS dropen. Das Spiel läuft eigentlich immer konstant mit 60 FPS. Woran liegt das denn?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Wossi ()

  • Julien schrieb:

    Nvidia DSR oder andere Tricksereien

    Als wenn Nvidia nicht skalieren muss. Was meinste warum man auch dort die Schärfe einstellen kann? (DSR - Glättung)

    Julien schrieb:

    sondern sieht meistens noch unsauber aus

    DSR macht auch unschärfer ....
    Und wo isn Spline36 unsauber. Spline100 wird ziemlich unscharf, ja. Aber Spline36 skaliert neutral und da wird kaum was passieren bei derart wenig scale von 1080 auf 1152 herauf. Übertreib mal nich.

    Wossi schrieb:

    @Sagaras: 10-Bit Encoding nutze ich sowieso nicht

    Würd ich dir aber anraten. Kein Banding ist schon ein Vorteil.

    Wossi schrieb:

    ...also ich habe es jetzt noch einmal mit der nativen Aufnahme und dem MagicYUV versucht, allerdings ohne Erfolg. Der MagicYUV Codec ist nicht so stabil wie der Lagarith Lossless. Da dropen die Frames beim Schreiben schon mal auf 13 ab! Der LLC bleibt eigentlich konstant bei 30 FPS (mit kleineren Drops)


    Dann liegt es entweder an einer zu langsamen Festplatte, oder du hast in höherem Farbraum aufgenommen.
    Aktuelle Projekte/Videos


  • Wossi schrieb:

    und 10-Bit Encoding nutze ich deshalb nicht, weil ich die Aufnahmen später vielleicht noch bearbeiten oder anderweitig nutzen möchte.


    Tja TMPGEnc 6 würde 10bit einlesen können und auch coden können mit 10bit, x264, CRF und co. Deine NLE ist im Encoding und Decoding einfach totale scheiße. Ist leider so.

    Aber du könntest bei SSM via Frameserver arbeiten. Datei in SSM, Frameserving Button drücken, dann bekommt dein Premiere Unkomprimiert RGB. Das wird das Ding auf kriegen dann :D
    Aktuelle Projekte/Videos


  • Ich habe es noch einmal versucht... eine Aufnahme mit einer Länge von 25:30 Minuten in 1080p. Die Sache mit dem x264vfw behalte ich mir mal als Alternative im Hinterkopf. Ich bin mit dem Frameserver (CRF 18,0 und Preset Medium) zu folgendem Ergebnis gekommen:

    Aufnahme 1080p mit 60 FPS » 1080p 60 FPS (Dauer: ca. 1:40 Stunde)
    Aufnahme 1080p mit 30 FPS » 4K 30 FPS (Dauer: ca. 2 Stunden)
    Aufnahme 1080p mit 50 FPS » 1080p 50 FPS (Dauer: ca. 1:30 Stunde)

    Die 10 Minuten zwischen 50 und 60 FPS machen auch keinen gewaltigen Unterschied. Da kann ich auch gleich bei 60 FPS bleiben. Die Frage ist jetzt aber der Vergleich zwischen 4K 30 FPS und 1080p 60 FPS. Wo erhalte ich mehr Bitrate und welche Variante ist ökonomischer?

    Das Problem mit den 60 FPS ist allerdings noch die Aufnahme, denn immer wieder kommt es zu Frame Drops... dazu werde ich mich aber mal in einem anderen Thread schlau machen. ^^