AviSynth und CUDA / oder: Optimale Komprimierbarkeit für YouTube

  • Vergiss l nnedi3ocl, hab bis dato noch kein Szenario entdeckt, bei dem der:
    a. an sich schon schneller wäre als wenn ich die normale Version nutze
    b. die CPU so stark entlasten würde, dass ich ein schnelleres Ergebnis erhalten würde als wenn ich nur die CPU nutze
    i.d.R. ist es bei mir (i7 4770k + Geforce GTX 660 ti) sogar so, dass ich mit 'nur CPU' schneller zum Ziel komme.

    -> Mit AVSMeter kann man die Geschwindigkeit von Scripten testen.

  • Presets ändern mehrere Basis-Parameter gemeinsam in einem sinnvollen Verhältnis zueinander. Die Encodier-Geschwindigkeit ändert sich dadurch mittelbar nach dem Aufwand, mit dem der Encoder nach Redundanzen (ähnlichen und durch Inter-Codierung im Code verkleinerbaren Videobereichen) sucht. Selbstverständlich wird der Encoder häufiger Intra-Codierung nutzen müssen, wenn er bei wenig Suchaufwand häufiger keine geeigneten Kandidaten für Inter-Codierung findet. Die Qualität verschlechtert das aber nur dann, wenn man dabei die Bitrate begrenzt. Bei einer qualitätsorientierten Encodierung (CRF) wird das Ergebnis einfach nur wahrscheinlich größer, aber nicht grundsätzlich schlechter. Im Gegenteil: Inter-Codierung hat eher die Tendenz, Details zu reduzieren.

    intra ~ für sich allein, ohne Abhängigkeit zu anderen Frame-Inhalten, wie Einzelbild
    inter ~ im Zusammenhang, Unterschiede zu anderen Frame-Inhalten, Bewegungsschätzung

  • Wenn man ohnehin vorhat, einen recht niedrigen CRF (~15..18) zu verwenden, der schon nahe an der "visuellen Transparenz" ist (also vom Original kaum noch zu unterscheiden), und die Größe des Ergebnisses keine erhebliche Rolle spielt, dann dürfte es auch kaum einen Grund geben, langsamer als "--preset fast" zu arbeiten; schneller als Preset "faster" wäre dann aber schon wieder fast Platzverschwendung wegen zu geringer Komplexität.

    Wer Platz sparen muss und einen CRF über 21 wählt, der wird sicher lieber etwas aufwändiger rechnen lassen; aber langsamere Presets als "slow" können zu Inkompatibilitäten mit Hardware-Playern führen, für die man dann zusätzliche begrenzende Parameter verwenden würde.

    Das sind aber meine persönlichen Einschätzungen. Andere haben vielleicht abweichende Erfahrunge gemacht. Allgemein gilt aber: Wenn die Qualität zu schlecht ist, dann erhöhe lieber die Bitrate, wenn möglich, als mit langsameren Presets mehr herausquetschen zu wollen. Nicht möglich ist das Erhöhen der Bitrate nur bei vorgegebener Zielgröße, da sind langsame Presets legitim (aber jenseits von "slower" auch schon Verzweiflung).

  • Ich nutze im Normalfall das:
    program --crf 18 --keyint infinite --min-keyint 1 --aq-strength 1.25 --output-csp "i444" --output "output" "input"

    Was ich bei meinen Testvideos festgestellt habe ist das:
    Wobei ich hier einen CRF 23 hatte...

    [TABLE='width: 886']

    [tr][td]

    CRF 23

    [/td][td]

    1800p

    [/td][td]

    30

    [/td][td]

    Ultra Fast

    [/td][td]

    YV24

    [/td][td]

    Spline100

    [/td][td]

    502.817.623

    [/td][td]

    29.17 Fps

    [/td][/tr][tr][td]

    CRF 23

    [/td][td]

    1800p

    [/td][td]

    30

    [/td][td]

    Super Fast

    [/td][td]

    YV24

    [/td][td]

    Spline100

    [/td][td]

    311.249.465

    [/td][td]

    24.05 Fps

    [/td][/tr][tr][td]

    CRF 23

    [/td][td]

    1800p

    [/td][td]

    30

    [/td][td]

    Very Fast

    [/td][td]

    YV24

    [/td][td]

    Spline100

    [/td][td]

    301.211.269

    [/td][td]

    20.30 Fps

    [/td][/tr][tr][td]

    CRF 23

    [/td][td]

    1800p

    [/td][td]

    30

    [/td][td]

    Faster

    [/td][td]

    YV24

    [/td][td]

    Spline100

    [/td][td]

    300.998.434

    [/td][td]

    14.49 Fps

    [/td][/tr][tr][td]

    CRF 23

    [/td][td]

    1800p

    [/td][td]

    30

    [/td][td]

    Fast

    [/td][td]

    YV24

    [/td][td]

    Spline100

    [/td][td]

    310.094.394

    [/td][td]

    8.22 Fps

    [/td][/tr][tr][td]

    CRF 23

    [/td][td]

    1800p

    [/td][td]

    30

    [/td][td]

    Medium

    [/td][td]

    YV24

    [/td][td]

    Spline100

    [/td][td]

    308.521.438

    [/td][td]

    6.46 Fps

    [/td][/tr][tr][td]

    CRF 23

    [/td][td]

    1800p

    [/td][td]

    30

    [/td][td]

    Slow

    [/td][td]

    YV24

    [/td][td]

    Spline100

    [/td][td]

    302.249.950

    [/td][td]

    3.61 Fps

    [/td][/tr][tr][td]

    CRF 23

    [/td][td]

    1800p

    [/td][td]

    30

    [/td][td]

    Slower

    [/td][td]

    YV24

    [/td][td]

    Spline100

    [/td][td]

    299.818.517

    [/td][td]

    1.79 Fps

    [/td][/tr][tr][td]

    CRF 23

    [/td][td]

    1800p

    [/td][td]

    30

    [/td][td]

    Very Slow

    [/td][td]

    YV24

    [/td][td]

    Spline100

    [/td][td]

    286.166.288

    [/td][td]

    0.91 Fps

    [/td][/tr][tr][td]

    CRF 23

    [/td][td]

    1800p

    [/td][td]

    30

    [/td][td]

    Placebo

    [/td][td]

    YV24

    [/td][td]

    Spline100

    [/td][td]

    288.846.374

    [/td][td]

    0.37 Fps

    [/td][/tr]


    [/TABLE]

    Was mich dabei halt wieder irritiert ist, das Faster mit eine der kleinsten Dateien hat... Und das bei gleicher Qualität?
    Weil wenn das Stimmen sollte was du sagst wäre in denn meisten Fällen das beste Preset Faster, da es eine sehr gute Geschwindigkeit und Dateiengröße bringt...

  • Man kann sicherlich nicht sagen, dass das Preset "faster" generell für jedes Material die kleinsten Ergebnisse bringt; nur für dieses Testvideo bei diesen Parametern.

    Beachte auch, dass x264 m.o.w. "progressiv" encodiert, also etwas langsamer arbeitet, je kleiner der CRF ist (es werden "mehr Details gesammelt, das dauert länger", stark vereinfacht).

    Unendliche GOPs sind auch nicht zu empfehlen, wenn die Videodaten auf störanfälligem Weg übermittelt werden. Ein falsches Bit, das einen Decodierfehler auslöst, und im schlimmsten Fall setzt der Bildfehler sich bis ans Ende des Videos fort, während YouTube das hochgeladene Video konvertiert. Sicher ist das Risiko gering, aber es wäre schon schade, wenn das Hochladen von Gigabytes nachträglich umsonst gewesen wäre.

  • Mit Batch-Datei, FOR-Schleifen, Loglevel- und CSV-Parameter... x265 ist doch ein Kommandozeilen-Encoder, also hervorragend automatisierbar. Bei mir läuft aber schon was... :rolleyes:

    Äh, ups, x264 wolltest du. Na ja, auch da gibt es Möglichkeiten, das wichtigste zu protokollieren. Zur Not mit FIND-Filter.

  • Nun ja, Grundlagenwissen über CMD und Batch hilft da schon... Nur ein kleines Beispiel:

    Code
    FOR %%a IN (ultrafast superfast veryfast faster fast medium slow slower veryslow placebo) DO x264 --preset %%a (...)

    In einer Schleife jeweils x264 mit allen Preset-Stufen aufrufen (in Batch-Dateien wird das Prozentzeichen der Lauf-Variable verdoppelt, im Vergleich zum direkten Aufruf in der Eingabezeile).

    Wer dann auch noch alle Presets mehrmals mit unterschiedlichen CRF testen will, verschachtelt zwei solcher Schleifen.

    Und die Dauer des Encodings will man ja auch noch aufzeichnen. Leider hat x264 keine CSV-Ausgabe wie x265. Wenn man das nicht aus der Konsolenausgabe von x264 herausfiltert, dann hilft vielleicht nur ein zusätzlicher Benchmark-Logger (man wird ja möglichst alles über Nacht laufen lassen wollen, anstatt daneben zu sitzen und die Zeiten vom Bildschirm abzuschreiben).

  • Zitat

    Unendliche GOPs sind auch nicht zu empfehlen, wenn die Videodaten auf störanfälligem Weg übermittelt werden. Ein falsches Bit, das einen Decodierfehler auslöst, und im schlimmsten Fall setzt der Bildfehler sich bis ans Ende des Videos fort, während YouTube das hochgeladene Video konvertiert. Sicher ist das Risiko gering, aber es wäre schon schade, wenn das Hochladen von Gigabytes nachträglich umsonst gewesen wäre.

    Einfach kein WLAN nehmen, dann passiert auch nix. Hat youtube noch nie gestört. Die encodierens ja auch eh um.

    Im Doom9 forum stand aber auch geschrieben das trotz CRF die schnelleren Presets weniger Qualität liefern^^ Glaub das stand sogar auch mal hier, hm ^^

  • Kann ich mich jetzt nicht daran erinnern; ist aber auch im Bereich des Möglichen. Dafür sprächen eventuell, dass bei aufwändigerer Suche nach bester Übereinstimmung (auch in größerem Umkreis) auch wirklich bessere Übereinstimmungen mit minimaler Differenz gefunden werden, sowie dass die Inter-Codierung der Differenz möglicherweise mit höherer Genauigkeit erfolgt, weil Unterschiede ja einen geringeren Werteumfang haben.

    Letztendlich sollte es aber wenig ausmachen. CRF versucht ja abzusichern, dass der Qualitätsverlust unter einem Grenzwert liegt, und bei kleinem CRF ist der Grenzwert auch hinreichend niedrig. Ob man also CRF 15 mit langsamem oder schnellem Preset erzeugt, in jedem Fall sollte "visuelle Transparenz" erreicht werden, nur mit mehr oder weniger Aufwand, und kleinerem oder größerem Ergebnis. Oder?!

Jetzt mitmachen!

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