Diccionari

Què són els B-frames en un vídeo?

Un B-frame és un fotograma de vídeo que pot utilitzar tant un fotograma anterior com un de posterior. Descobreix com funcionen els B-frames i què significa el valor Has B Frames al teu fitxer.

b-frames

Un B-frame és un fotograma de vídeo que pot utilitzar tant un fotograma anterior com un de posterior per construir la seva imatge. La B significa bidireccional. Els B-frames ofereixen més compressió que els altres tipus de fotogrames, cosa que ajuda a mantenir el vídeo petit.

En les metadades d'un fitxer de vídeo, pots veure un camp anomenat Has B Frames, també escrit has_b_frames. El nom suggereix una resposta de sí o no, però el valor és un número. Aquest número t'indica quants fotogrames ha de poder mantenir un descodificador en memòria per mostrar el vídeo en l'ordre correcte.

En què es diferencien els B-frames dels I-frames i els P-frames

La compressió de vídeo generalment funciona comparant fotogrames i enregistrant-ne les diferències. El vídeo MPEG-2 defineix aquests 3 tipus de fotogrames:

  • I-frame: codificat sense referència a altres fotogrames, així que la descodificació pot començar aquí
  • P-frame: pot utilitzar l'I-frame o P-frame anterior
  • B-frame: pot utilitzar l'I-frame o P-frame anterior i següent

Un B-frame pot dependre d'un fotograma que ve més tard en el temps, així que aquest fotograma posterior s'ha d'emmagatzemar primer. Per tant, l'ordre d'emmagatzematge és diferent de l'ordre que veus a la pantalla. Una seqüència MPEG-2 típica té aquest aspecte:

  • Ordre de visualització: B1 B2 I3 B4 B5 P6 B7 B8 P9 B10 B11 P12
  • Ordre d'emmagatzematge: I3 B1 B2 P6 B4 B5 P9 B7 B8 P12 B10 B11

Com són els valors

Has B Frames és un nombre enter. FFmpeg descriu el valor com la mida del buffer de reordenació de fotogrames al descodificador. Per al vídeo MPEG-2, FFmpeg defineix 2 valors:

  • 0: vídeo de baixa latència només amb I-frames i P-frames
  • 1: vídeo amb I-frames, P-frames i B-frames

Els codificadors H.264 i HEVC també poden mantenir alguns B-frames com a referència per a altres fotogrames. Els fitxers de prova de FFmpeg per a H.264 mostren com això canvia el valor. Els noms dels fitxers indiquen els paràmetres del codificador:

  • Com a màxim 3 B-frames seguits, cap mantingut com a referència: 1
  • Com a màxim 3 B-frames seguits, alguns mantinguts com a referència: 2
  • Com a màxim 4 B-frames seguits, alguns mantinguts com a referència: 2

Per tant, el valor no és un recompte de fotogrames B. El programa ffprobe mostra el tipus de cada fotograma com un valor pict_type: I, P, o B. El camp NB Frames indica el nombre de fotogrames, però no el seu tipus.

D'on ve el valor

El nom del camp prové de FFmpeg, el programa ffprobe del qual escriu has_b_frames per a fluxos de vídeo. Un flux H.264 pot indicar el número al seu propi capçalera. Si el capçalera no indica el número, FFmpeg el calcula a partir dels fotogrames i els seus temps.

Els paràmetres del codificador decideixen si un vídeo utilitza B-frames. A FFmpeg i al codificador Microsoft H.264, un valor de 0 desactiva els B-frames.

Quins fitxers ho porten

El camp només existeix per als fluxos de vídeo. Pots veure el camp de vídeo en fitxers MP4, MOV, MKV, WebM i AVI. Un fitxer MOV amb fotogrames reordenats també desa una taula amb el temps entre la descodificació i la visualització de cada fotograma.

El còdec decideix si els B-frames són possibles. El vídeo MPEG-2 i el perfil Main d'H.264 poden utilitzar-ne, però el perfil Baseline d'H.264 no. VP8, un còdec utilitzat en fitxers WebM, no té B-frames, perquè els seus fotogrames mai no es prediuen a partir de fotogrames posteriors.

Per què és important

Els B-frames ajuden a mantenir el vídeo petit, però afegeixen latència. El codificador ha de reordenar els fotogrames abans d'emmagatzemar-los, i aquesta latència depèn del nombre de B-frames seguits.

El vídeo reordenat també té 2 temps diferents per a cada fotograma: quan s'ha de descodificar i quan s'ha de mostrar. FFmpeg dona tots dos com a marques de temps en la base de temps del flux.