NB Frames significa el número de fotogramas en un solo flujo (stream) de un archivo de video o audio. Las letras NB significan "number" (número). FFmpeg y su programa ffprobe llaman a este campo nb_frames.
Un archivo puede contener varios flujos, y cada flujo tiene su propio valor de NB Frames. Un archivo con un flujo de video y un flujo de audio tiene por lo tanto 2 recuentos separados. NB Streams es un valor diferente: cuenta los flujos del archivo, no los fotogramas dentro de un flujo.
Qué es un frame
En un flujo de video, un fotograma es una imagen fija del video. En un flujo de audio, el significado depende del formato.
En AIFF, un sample frame contiene una muestra para cada canal de audio. En MP3, un frame es un bloque más grande, y FFmpeg multiplica el recuento de frames por las muestras por frame para obtener la duración. Por eso no puedes comparar directamente un recuento de audio de un formato con el recuento de otro formato.
Cómo son los valores
El valor es un número entero cuando se conoce. Estos valores aparecen en el código, la documentación y los resultados de prueba de FFmpeg:
708: el recuento para un flujo de video en uno de los archivos de prueba de FFmpeg.1: el recuento para una sola imagen fija en un archivo HEIC.0: el valor que la interfaz de programación de FFmpeg usa cuando no se conoce el número.N/A: el texto que la salida predeterminada de ffprobe muestra cuando el valor es 0. Su salida en JSON y XML omite ese campo.
Un valor de 0 o N/A, o un campo ausente, no te dice que el flujo esté vacío. El valor solo indica que FFmpeg no estableció ningún recuento en este campo.
De dónde proviene el valor
NB Frames normalmente proviene de la estructura interna del archivo, así que FFmpeg no tiene que contar los fotogramas. La fuente depende del formato:
- MP4 y MOV: FFmpeg suma los recuentos de muestras en la tabla time-to-sample, que es el átomo
stts. - AVI: FFmpeg lee un número de 32 bits del encabezado del flujo, que es el bloque
strh. - AIFF: FFmpeg lee el campo
numSampleFramesdel Common Chunk. - WAV, MP3, FLAC y MKV: los lectores de FFmpeg para estos formatos no establecen el valor, así que la salida predeterminada de ffprobe muestra
N/A.
Un archivo MKV aún puede guardar un recuento con otro nombre. El programa mkvmerge escribe una etiqueta llamada NUMBER_OF_FRAMES para cada pista.
Cómo contar los frames
NB Frames solo repite el número de la estructura del archivo. Ese número no prueba que todos los fotogramas estén realmente en el archivo. Un archivo MOV de prueba en FFmpeg guarda un recuento de 708, pero ffprobe lee solo 66 paquetes y 65 fotogramas de ese archivo.
Para medir el recuento, ejecuta ffprobe con las opciones -show_streams y -count_frames. El programa ffprobe entonces decodifica el flujo e informa el resultado en un campo separado, nb_read_frames. Esto lleva más tiempo, porque ffprobe debe decodificar cada fotograma.
Usa esta comprobación para flujos de video. En un archivo AIFF, ffprobe cuenta bloques decodificados que contienen muchos sample frames, por lo que los dos números difieren incluso en un archivo completo.
La opción -count_packets, también usada con -show_streams, cuenta paquetes sin decodificarlos e informa el resultado en nb_read_packets. Un paquete de video suele contener un fotograma comprimido, pero un paquete de audio puede contener varios.
Por qué es importante
En un flujo de video, el recuento de fotogramas y la duración juntos dan la frecuencia de fotogramas media. El lector MP4 y MOV de FFmpeg calcula esta tasa a partir de un recuento de fotogramas y una duración. En el mismo archivo de prueba, 708 fotogramas en 23,613333 segundos dan aproximadamente 29,98 fotogramas por segundo.
El recuento también te ayuda a comprobar un archivo de video. Si un recuento medido está muy por debajo del recuento guardado, puede faltar parte de los datos de video.