NB Frames, bir video veya ses dosyasındaki bir akıştaki kare sayısı anlamına gelir. NB harfleri "number" (sayı) kelimesinin kısaltmasıdır. FFmpeg ve onun ffprobe programı bu alanı nb_frames olarak adlandırır.
Bir dosya birden çok akış içerebilir ve her akışın kendi NB Frames değeri vardır. Bu nedenle, bir video akışı ve bir ses akışı olan bir dosyanın 2 ayrı sayımı olur. NB Streams ise farklı bir değerdir: dosyadaki akışları sayar, tek bir akışın içindeki kareleri değil.
Kare nedir
Bir video akışında kare (frame), videonun tek bir durağan görüntüsüdür. Bir ses akışında ise anlamı formata bağlıdır.
AIFF formatında bir örnek karesi, her ses kanalı için bir örnek içerir. MP3'te kare daha büyük bir bloktur ve FFmpeg, uzunluğu bulmak için kare sayısını kare başına örnek sayısıyla çarpar. Bu nedenle, bir formattaki ses sayımını başka bir formattaki sayımla doğrudan karşılaştıramazsınız.
Değerlerin görünümü
Değer biliniyorsa tam sayıdır. Bu değerler FFmpeg'in kodunda, belgelerinde ve test sonuçlarında görünür:
708: FFmpeg'in test dosyalarından birindeki bir video akışının sayımı.1: bir HEIC dosyasındaki tek bir durağan görüntünün sayımı.0: sayı bilinmediğinde FFmpeg'in programlama arayüzünün kullandığı değer.N/A: değer 0 olduğunda ffprobe'un varsayılan çıktısının yazdırdığı metin. JSON ve XML çıktıları bu alanı hiç içermez.
0 veya N/A değeri ya da eksik bir alan, akışın boş olduğunu göstermez. Değer yalnızca FFmpeg'in bu alana bir sayım yazmadığını gösterir.
Değerin kaynağı
NB Frames değeri normalde dosyanın kendi yapısından gelir, bu nedenle FFmpeg kareleri saymak zorunda kalmaz. Kaynak, formata bağlıdır:
- MP4 ve MOV: FFmpeg, zaman-örneğe tablosundaki örnek sayımlarını toplar; bu tablo
sttsatomudur. - AVI: FFmpeg, akış başlığındaki 32 bitlik sayıyı okur; bu bölüm
strhparçasıdır. - AIFF: FFmpeg, Common Chunk içindeki
numSampleFramesalanını okur. - WAV, MP3, FLAC ve MKV: FFmpeg'in bu formatlar için okuyucuları değeri ayarlamaz, bu nedenle ffprobe'un varsayılan çıktısı
N/Ayazdırır.
Bir MKV dosyası yine de başka bir ad altında bir sayım tutabilir. mkvmerge programı, her parça için NUMBER_OF_FRAMES adlı bir etiket yazar.
Kareler nasıl sayılır
NB Frames yalnızca dosya yapısındaki sayıyı tekrarlar. Bu sayı, karelerin gerçekten dosyada olduğu anlamına gelmez. FFmpeg'deki bir MOV test dosyası 708 sayısını saklar, ancak ffprobe o dosyadan yalnızca 66 paket ve 65 kare okur.
Sayımı ölçmek için ffprobe'u -show_streams ve -count_frames seçenekleriyle çalıştırın. ffprobe programı daha sonra akışı decode eder ve sonucu ayrı bir alanda, nb_read_frames içinde raporlar. Bu daha uzun sürer, çünkü ffprobe her kareyi decode etmek zorundadır.
Bu kontrolü video akışları için kullanın. Bir AIFF dosyasında ffprobe, her biri birçok örnek karesi içeren decode edilmiş blokları sayar, bu yüzden eksiksiz bir dosyada bile iki sayı farklı olur.
-count_packets seçeneği, yine -show_streams ile birlikte kullanıldığında, paketleri decode etmeden sayar ve sonucu nb_read_packets içinde raporlar. Bir video paketi genellikle bir sıkıştırılmış kare içerir, ancak bir ses paketi birkaç kare içerebilir.
Neden önemli olduğu
Bir video akışı için kare sayısı ile süre birlikte ortalama kare hızını verir. FFmpeg'in MP4 ve MOV okuyucusu hızı kare sayısı ve süreden hesaplar. Aynı test dosyasında, 23,613333 saniyede 708 kare yaklaşık saniyede 29,98 kare eder.
Sayım, bir video dosyasını kontrol etmenize de yardımcı olur. Ölçülen sayım saklanan sayımın çok altındaysa, video verisinin bir kısmı eksik olabilir.