NB Frames significa el nombre de fotogrames en un flux d'un fitxer de vídeo o d'àudio. Les lletres NB volen dir "number". FFmpeg i el seu programa ffprobe anomenen aquest camp nb_frames.
Un fitxer pot contenir diversos fluxos, i cada flux té el seu propi valor NB Frames. Un fitxer amb un flux de vídeo i un flux d'àudio té, per tant, 2 recomptes separats. NB Streams és un valor diferent: compta els fluxos del fitxer, no els fotogrames dins d'un flux.
Què és un frame
En un flux de vídeo, un fotograma és una imatge fixa del vídeo. En un flux d'àudio, el significat depèn del format.
En AIFF, un fotograma de mostra conté una mostra per a cada canal d'àudio. En MP3, un fotograma és un bloc més gran, i FFmpeg multiplica el recompte de fotogrames per les mostres per fotograma per obtenir la durada. Per això no pots comparar directament un recompte d'àudio d'un format amb el d'un altre.
Com són els valors
El valor és un nombre enter quan es coneix. Aquests valors apareixen al codi, la documentació i els resultats de proves de FFmpeg:
708: el recompte per a un flux de vídeo en un dels fitxers de prova de FFmpeg.1: el recompte per a una sola imatge fixa en un fitxer HEIC.0: el valor que fa servir la interfície de programació de FFmpeg quan no es coneix el nombre.N/A: el text que la sortida per defecte de ffprobe mostra quan el valor és 0. Les seves sortides JSON i XML ometen el camp.
Un valor de 0 o N/A, o un camp que falta, no vol dir que el flux estigui buit. El valor només t'indica que FFmpeg no ha establert cap recompte en aquest camp.
D'on ve el valor
Normalment, NB Frames prové de l'estructura pròpia del fitxer, de manera que FFmpeg no ha de comptar els fotogrames. L'origen depèn del format:
- MP4 i MOV: FFmpeg suma els recomptes de mostres de la taula temps-a-mostra, que és l'àtom
stts. - AVI: FFmpeg llegeix un nombre de 32 bits de la capçalera del flux, que és el bloc
strh. - AIFF: FFmpeg llegeix el camp
numSampleFramesdel Common Chunk. - WAV, MP3, FLAC i MKV: els lectors de FFmpeg per a aquests formats no estableixen el valor, per la qual cosa la sortida per defecte de ffprobe mostra
N/A.
Un fitxer MKV encara pot contenir un recompte amb un altre nom. El programa mkvmerge escriu una etiqueta anomenada NUMBER_OF_FRAMES per a cada pista.
Com comptar els frames
NB Frames només repeteix el nombre de l'estructura del fitxer. Aquest nombre no demostra que tots els fotogrames siguin realment al fitxer. En un fitxer MOV de prova de FFmpeg es guarda un recompte de 708, però ffprobe només llegeix 66 paquets i 65 fotogrames d'aquest fitxer.
Per mesurar el recompte, executa ffprobe amb les opcions -show_streams i -count_frames. El programa ffprobe llavors descodifica el flux i informa del resultat en un camp separat, nb_read_frames. Això triga més temps, perquè ffprobe ha de descodificar cada fotograma.
Fes servir aquesta comprovació per a fluxos de vídeo. En un fitxer AIFF, ffprobe compta blocs descodificats que cadascun conté molts fotogrames de mostra, de manera que els dos nombres difereixen fins i tot en un fitxer complet.
L'opció -count_packets, també usada amb -show_streams, compta paquets sense descodificar-los i informa del resultat a nb_read_packets. Un paquet de vídeo normalment conté un fotograma comprimit, però un paquet d'àudio pot contenir-ne diversos.
Per què és important
Per a un flux de vídeo, el recompte de fotogrames i la durada junts donen la freqüència de fotogrames mitjana. El lector MP4 i MOV de FFmpeg calcula la freqüència a partir d'un recompte de fotogrames i una durada. En el mateix fitxer de prova, 708 fotogrames en 23,613333 segons donen aproximadament 29,98 fotogrames per segon.
El recompte també t'ajuda a comprovar un fitxer de vídeo. Si un recompte mesurat és molt inferior al recompte guardat, pot ser que falti part de les dades de vídeo.