Splitted encoding => key frame pumping?

  • Hi,

    wenn ich hier und da mal av1 oder vp9 encode und sehe wie wenig da die CPU genutzt wird Frage ich mich wie viel Sinn es macht:

    1. einen VideoStream in GOPs zu splitten (z.B. 'mkvmerge --split 1s')

    2. die Teile separat zu encoden

    3. die reencodeten Teile zusammen zu muxen.

    Was mir daran nicht gefällt:

    - Unmengen an temporärer Speicherplatz für die ganzen gesplitteten Datein, die reencodedten Teile.

    - Die Unsicherheit ob man damit einen ähnlichen Effekt wie 'keyframe pumping' einfangen könnte.

    Cu Selur

  • HQ-LQ: meinte mit GOP jetzt key- bis key-frame bei open gop formaten kann so ein schnipsel entsprechen groß werden.

    @manarc99: yo, av1an kenne ich, da wird erste nen scene change detection gestartet und dann anhand von Start&Endzeiten encoded soweit ich es sehe. Ist quasi ein Wrapper um ffmpeg. Hatte gehofft ich könnte mir eventuelles testen ersparen da sich das vielleicht schon mal jemand angeschaut hat.

  • Kleine Update:

    Hab mal etwas Zeit darin investiert und mir in Hybrid testweise etwas geschrieben, so dass:

    1. eine scene change detection mit Vapoursynth und sxvid gemacht wird.

    2. anhand der scene changes wird gechunked (mittels Vapoursynth + trim), wobei scenen unter 10 frames mit der nächsten kombiniert werden.

    3. für jeden der scene changes ein einger encoding job erstellt wird

    4. wenn alle encoding jobs durch sind mit einem merge job die einzel Teile zusammen gefügt werden.

    45min Serien hat jetzt 586 Videoencoding jobs.

    -> ist vielleicht overkill, aber an sich geht es.

    Hab dann aber drüber nachgedacht was alles Probleme macht an dem Ansatz:

    a. sobald man filter verwendet, welche die scene change detection ändern könnten (vor allem frame count Änderungen) muss man die Scene Change Detection auf dem vollen Filterskript laufen lassen, was den nutzen von chunked encoding enorm senken würde.

    b. 2pass encoding und qp files an chapter punkten machen keinen Sinn mit chunked encoding.

    Da es mir i.d.R. reicht 'Tile(colomns/rows)' auf 6/2 und 'CPU utilization' auf 0 zu setzen in aomenc gebe ich die Idee erstmal auf, da der Aufwand das (sauber) zu Implementieren nicht durch den Nutzen gerechtfertig scheint.

    Cu Selur

Jetzt mitmachen!

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