Video-Encoding: Keyframes automatisch beim Szenenwechsel setzen

Einige Encoding-Programme bieten die Möglichkeit, Szenenwechsel im Video zu erkennen. Wird eine neue Szene erkannt, sorgt der Encoder dafür, dass genau an dieser Stelle ein Keyframes gesetzt wird.

Mit dieser Methode kann die Videoqualität erhöht werden. Was dabei genau passiert, wird in diesem Artikel erklärt.

Sorenson Squeeze Auto-Keyframe

Zu Demonstrationszwecken habe ich beim Encoding die Option „Auto Key Frame on Scene Change” einmal aktiviert und einmal deaktiviert. Die restlichen Einstellungen waren alle gleich.

Szenenwechsel

Betrachtet wird eine Szene, die bei Frame 282 beginnt.

Statisches Keyframeintervall

Ist die automatische Szenenerkennung nicht aktiviert (bzw. ist diese Einstellung beim Encoder nicht vorhanden), wird immer nach einem vordefinierten Intervall ein neues Keyframe gesetzt, z.B. alle 300 Bildern (frames).

Beim Beispielvideo mit 30 fps sitzt das zweite Keyframe genau bei 10 Sekunden (= Frame 300). Rechnerisch lässt sich dies so herleiten: 300f / 30fps = 10s. Dass dies auch tatsächlich im Videofile so ist, lässt sich z.B. mit Streamclip überprüfen (mit der Funktion Gehe zu Keyframe; siehe Streamclip).

Qualitätssprung

Visuell fällt auf: Genau an dieser Stelle des Videos ist ein deutlich sichtbarer Qualitätssprung zu verzeichnen.

Zum besseren Verständnis einfach diese Beispiel-Screenshots anschauen (ca. 700 KB / kein Preloader).

Man sieht Frame 299 (= ein Frame davor) und Frame 300 (=Keyframe) im Wechsel. Beim Beispielvideo ohne Szenenerkennung (links) sieht man, dass Frame 299 deutlich schlechter ist als Frame 300.

Die Erklärung liegt darin, dass das Keyframe-Intervall von 300 zu groß ist. Je größer das Intervall, desto mehr Zwischenbilder beziehen sich auf das Keyframe. Mit steigender Entfernung zum Keyframe nimmt jedoch die Qualität ab (z.B. durch Rundungsfehler). Erschwerend kommt hinzu, dass im Beispiel ein Szenenwechsel den kompletten Bildinhalt austauscht. Es müssen also Information in Form einer Referenz zum einen Keyframe abgespeichert, das einen komplett anderen Inhalt hat.

Ein großes Intervall sorgt zwar für eine hohe Kompression, da die Zwischenbilder im Vergleich zu den Keyframes nur wenig Speicherplatz brauchen. Ist es zu hoch, nimmt die Bildqualität ab. Beim nächsten Keyframe verbessert sich die Bildqualität wieder deutlich („pulsierende Qualität”).

Keyframeintervall mit Szenenerkennung

Aktiviert man die Einstellung, hält sich der Encoder nicht stur an das fest vorgegebene Intervall, sondern fügt stattdessen am Szenenwechsel ein Keyframe ein.

Wie in den Beispiel-Screenshots rechts zu sehen, ist kein qualitativer Unterschied zwischen Frame 299 und 300 zu sehen. Der Grund: Das letzte Keyframe liegt aufgrund der Szenenerkennung kurz davor, bei Beginn der Szene.

Ein kurzer Test in Streamclip zeigt, dass das Keyframe des Beispielvideos tatsächlich genau bei 9:12 liegt (= Frame 282, also dem Szenenwechsel).

Ein kluges Setzen von Keyframes durch eine automatische Szenenerkennung ist also ist ein hilfreiches Feature. Wer möchte, kann sich die beiden Demos zum Nachvollziehen herunterladen (1,6 MB). Das Video ist extra etwas schlechter kodiert, damit man den Effekt gut sieht.

[ad]

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert