Wörterbuch

Was sind B-Frames in einem Video?

Ein B-frame ist ein Videoframe, das sowohl ein früheres als auch ein späteres Frame verwenden kann. Erfahre, wie B-frames funktionieren und was der Wert Has B Frames in deiner Datei bedeutet.

b-frames

Ein B-Frame ist ein Videoframe, das sowohl ein früheres als auch ein späteres Frame nutzen kann, um sein Bild aufzubauen. Das B steht für bidirektional. B-Frames ermöglichen mehr Kompression als andere Frame-Typen und helfen so, ein Video klein zu halten.

In den Metadaten einer Videodatei findest du möglicherweise ein Feld namens Has B Frames, auch geschrieben als has_b_frames. Der Name deutet auf eine Ja-oder-Nein-Antwort hin, aber der Wert ist eine Zahl. Diese Zahl gibt an, wie viele Frames ein Decoder im Speicher halten können muss, um das Video in der richtigen Reihenfolge anzuzeigen.

Wie sich B-Frames von I-Frames und P-Frames unterscheiden

Videokompression funktioniert im Allgemeinen, indem Frames verglichen und die Unterschiede zwischen ihnen gespeichert werden. MPEG-2-Video definiert diese 3 Frame-Typen:

  • I-Frame: codiert ohne Bezug zu anderen Frames, das Decoding kann hier beginnen
  • P-Frame: kann das vorherige I-Frame oder P-Frame verwenden
  • B-Frame: kann das vorherige und das nächste I-Frame oder P-Frame verwenden

Ein B-Frame kann von einem Frame abhängen, das zeitlich später kommt, daher muss dieses spätere Frame zuerst gespeichert werden. Die Speicherreihenfolge unterscheidet sich daher von der Reihenfolge, die du auf dem Bildschirm siehst. Eine typische MPEG-2-Sequenz sieht so aus:

  • Anzeigereihenfolge: B1 B2 I3 B4 B5 P6 B7 B8 P9 B10 B11 P12
  • Speicherreihenfolge: I3 B1 B2 P6 B4 B5 P9 B7 B8 P12 B10 B11

Wie die Werte aussehen

Has B Frames ist eine ganze Zahl. FFmpeg beschreibt den Wert als die Größe des Frame-Reordering-Puffers im Decoder. Für MPEG-2-Video nennt FFmpeg 2 Werte:

  • 0: Video mit geringer Verzögerung, nur mit I-Frames und P-Frames
  • 1: Video mit I-Frames, P-Frames und B-Frames

H.264- und HEVC-Encoder können einige B-Frames auch als Referenz für andere Frames behalten. Die Testdateien von FFmpeg für H.264 zeigen, wie sich dadurch der Wert ändert. Die Dateinamen geben die Encoder-Einstellungen an:

  • Maximal 3 B-Frames in Folge, keine als Referenz behalten: 1
  • Maximal 3 B-Frames in Folge, einige als Referenz behalten: 2
  • Maximal 4 B-Frames in Folge, einige als Referenz behalten: 2

Der Wert ist also keine Zählung der B-Frames. Das Programm ffprobe zeigt den Typ jedes Frames als pict_type-Wert: I, P oder B. Das Feld NB Frames gibt die Anzahl der Frames an, aber nicht deren Typen.

Woher der Wert kommt

Der Feldname stammt von FFmpeg, dessen Programm ffprobe für Videostreams has_b_frames ausgibt. Ein H.264-Stream kann die Zahl in seinem eigenen Header angeben. Wenn der Header die Zahl nicht angibt, ermittelt FFmpeg sie aus den Frames und ihren Zeiten.

Die Encoder-Einstellungen legen fest, ob ein Video B-Frames verwendet. In FFmpeg und im Microsoft-H.264-Encoder schaltet die Einstellung 0 B-Frames aus.

Welche Dateien sie enthalten

Das Feld existiert nur für Videostreams. Du kannst das Feld für Video in MP4-, MOV-, MKV-, WebM- und AVI-Dateien sehen. Eine MOV-Datei mit neu geordneten Frames speichert außerdem eine Tabelle mit der Zeit zwischen Decoding und Anzeige für jedes Frame.

Der Codec entscheidet, ob B-Frames möglich sind. MPEG-2-Video und das H.264-Main-Profil können sie verwenden, das H.264-Baseline-Profil jedoch nicht. VP8, ein Codec, der in WebM-Dateien verwendet wird, hat keine B-Frames, da seine Frames nie aus späteren Frames vorhergesagt werden.

Warum es wichtig ist

B-Frames helfen, ein Video klein zu halten, fügen aber Verzögerung hinzu. Der Encoder muss Frames neu anordnen, bevor er sie speichert, und diese Verzögerung hängt von der Zahl der B-Frames in Folge ab.

Neu geordnetes Video hat außerdem 2 verschiedene Zeiten für jedes Frame: wann es decodiert und wann es angezeigt werden soll. FFmpeg gibt beide als Timestamps in der time base des Streams aus.