Sözlük

Videoda B-Frame Nedir?

B-frame, hem önceki hem de sonraki bir kareyi kullanabilen bir video karesidir. B-frame'lerin nasıl çalıştığını ve dosyanızdaki Has B Frames değerinin ne anlama geldiğini öğrenin.

b-frames

B-frame, hem önceki hem de sonraki kareyi kullanarak kendi görüntüsünü oluşturabilen bir video karesidir. Buradaki B, iki yönlü (bidirectional) anlamına gelir. B-frame'ler, diğer kare türlerine göre daha fazla sıkıştırma sunar ve bu da videonun küçük kalmasına yardımcı olur.

Bir video dosyasının meta verilerinde, Has B Frames veya has_b_frames adlı bir alan görebilirsiniz. Adı evet ya da hayır cevabı çağrıştırsa da, değeri bir sayıdır. Bu sayı, videonun doğru sırada gösterilebilmesi için bir decoder'ın bellekte kaç kare tutabilmesi gerektiğini belirtir.

B-çerçeveler I-çerçevelerden ve P-çerçevelerden nasıl farklıdır

Video sıkıştırma genelde kareleri karşılaştırıp aralarındaki farkları kaydederek çalışır. MPEG-2 video şu 3 kare türünü tanımlar:

  • I-frame: diğer karelere başvurmadan kodlanır, bu yüzden çözme işlemi buradan başlayabilir
  • P-frame: önceki I-frame veya P-frame'i kullanabilir
  • B-frame: önceki ve sonraki I-frame veya P-frame'i kullanabilir

Bir B-frame, zaman olarak daha sonra gelen bir kareye bağlı olabilir, bu yüzden o sonraki kare önce saklanmalıdır. Bu nedenle saklanan sıra, ekranda gördüğünüz sıradan farklıdır. Tipik bir MPEG-2 dizisi şöyle görünür:

  • Görüntüleme sırası: B1 B2 I3 B4 B5 P6 B7 B8 P9 B10 B11 P12
  • Saklama sırası: I3 B1 B2 P6 B4 B5 P9 B7 B8 P12 B10 B11

Değerlerin görünümü

Has B Frames, tam sayıdır. FFmpeg bu değeri, decoder içindeki kare yeniden sıralama tamponunun boyutu olarak açıklar. MPEG-2 video için, FFmpeg 2 değer tanımlar:

  • 0: yalnızca I-frame ve P-frame içeren, gecikmesi düşük video
  • 1: I-frame, P-frame ve B-frame içeren video

H.264 ve HEVC encoder'ları, bazı B-frame'leri diğer kareler için referans olarak da tutabilir. FFmpeg'in H.264 test dosyaları, bunun değeri nasıl değiştirdiğini gösterir. Dosya adları encoder ayarlarını verir:

  • Art arda en fazla 3 B-frame, hiçbiri referans olarak tutulmuyor: 1
  • Art arda en fazla 3 B-frame, bazıları referans olarak tutuluyor: 2
  • Art arda en fazla 4 B-frame, bazıları referans olarak tutuluyor: 2

Bu nedenle değer, B-frame sayısını vermez. ffprobe programı, her karenin türünü pict_type değeri olarak gösterir: I, P veya B. NB Frames alanı kare sayısını verir, ancak türlerini vermez.

Değerin kaynağı

Alan adı, video akışları için ffprobe programının has_b_frames yazdırdığı FFmpeg'den gelir. Bir H.264 akışı bu sayıyı kendi başlığında belirtebilir. Başlık sayıyı belirtmiyorsa, FFmpeg bunu karelerden ve zaman bilgilerinden hesaplar.

Bir videoda B-frame kullanılıp kullanılmayacağına encoder ayarları karar verir. FFmpeg'de ve Microsoft H.264 encoder'ında 0 ayarı, B-frame'leri kapatır.

Bunu hangi dosyalar içeriyor

Bu alan yalnızca video akışları için vardır. MP4, MOV, MKV, WebM ve AVI dosyalarındaki video için bu alanı görebilirsiniz. Kareleri yeniden sıralanmış bir MOV dosyası ayrıca, her kare için çözme ile gösterme arasındaki zamanı içeren bir tablo saklar.

B-frame'lerin mümkün olup olmadığına codec karar verir. MPEG-2 video ve H.264 Main profili bunları kullanabilir, ancak H.264 Baseline profili kullanamaz. WebM dosyalarında kullanılan VP8 codec'inin B-frame'i yoktur, çünkü kareleri hiçbir zaman daha sonraki karelerden tahmin edilmez.

Neden önemli olduğu

B-frame'ler videonun küçük kalmasına yardımcı olur, ancak gecikme ekler. Encoder, kareleri saklamadan önce yeniden sıralamak zorundadır ve bu gecikme, art arda gelen B-frame sayısına bağlıdır.

Yeniden sıralanmış videoda her kare için iki farklı zaman vardır: karenin ne zaman çözüleceği ve ne zaman gösterileceği. FFmpeg her ikisini de akışın zaman tabanında zaman damgaları olarak verir.