Dictionnaire

Que signifie le nombre d'images vidéo NB Frames ?

NB Frames vous indique combien d'images une piste vidéo ou audio contient. FFmpeg ne fournit pas ce nombre pour chaque format, de sorte que la valeur peut être inconnue.

nb-frames

NB Frames signifie le nombre d'images dans un flux d'un fichier vidéo ou audio. Les lettres NB signifient "number" (nombre). FFmpeg et son programme ffprobe appellent ce champ nb_frames.

Un fichier peut contenir plusieurs flux, et chaque flux a sa propre valeur NB Frames. Un fichier avec un flux vidéo et un flux audio a donc 2 décomptes séparés. NB Streams est une autre valeur : elle compte les flux dans le fichier, et non les images à l'intérieur d'un flux.

Ce qu'est une image vidéo

Dans un flux vidéo, une image (frame) est une image fixe de la vidéo. Dans un flux audio, le sens dépend du format.

En AIFF, une "sample frame" contient un échantillon pour chaque canal audio. En MP3, une frame est un bloc plus grand, et FFmpeg multiplie le nombre de frames par le nombre d'échantillons par frame pour obtenir la durée. Vous ne pouvez donc pas comparer directement un décompte audio d'un format avec un décompte d'un autre format.

À quoi ressemblent les valeurs

La valeur est un nombre entier lorsqu'elle est connue. Ces valeurs apparaissent dans le code, la documentation et les résultats de tests de FFmpeg :

  • 708 : le décompte pour un flux vidéo dans un des fichiers de test de FFmpeg.
  • 1 : le décompte pour une seule image fixe dans un fichier HEIC.
  • 0 : la valeur que l'interface de programmation de FFmpeg utilise lorsque le nombre n'est pas connu.
  • N/A : le texte que la sortie par défaut de ffprobe affiche lorsque la valeur est 0. Ses sorties JSON et XML omettent ce champ.

Une valeur de 0 ou N/A, ou un champ manquant, ne signifie pas que le flux est vide. La valeur indique seulement que FFmpeg n'a pas défini de décompte dans ce champ.

D'où vient la valeur

NB Frames provient généralement de la structure interne du fichier, de sorte que FFmpeg n'a pas à compter les images. La source dépend du format :

  • MP4 et MOV : FFmpeg additionne les nombres d'échantillons dans la table "time-to-sample", qui est l'atome stts.
  • AVI : FFmpeg lit un nombre 32 bits dans l'en-tête du flux, qui est le bloc strh.
  • AIFF : FFmpeg lit le champ numSampleFrames dans le "Common Chunk".
  • WAV, MP3, FLAC et MKV : les lecteurs FFmpeg pour ces formats ne définissent pas la valeur, donc la sortie par défaut de ffprobe affiche N/A.

Un fichier MKV peut quand même contenir un décompte sous un autre nom. Le programme mkvmerge écrit une balise nommée NUMBER_OF_FRAMES pour chaque piste.

Comment compter le nombre d'images vidéo

NB Frames ne fait que reprendre le nombre présent dans la structure du fichier. Ce nombre ne prouve pas que toutes les images sont réellement dans le fichier. Un fichier MOV de test dans FFmpeg stocke un décompte de 708, mais ffprobe lit seulement 66 paquets et 65 images dans ce fichier.

Pour mesurer le décompte, exécutez ffprobe avec les options -show_streams et -count_frames. Le programme ffprobe décode alors le flux et indique le résultat dans un champ séparé, nb_read_frames. Cela prend plus de temps, car ffprobe doit décoder chaque image.

Utilisez ce contrôle pour les flux vidéo. Dans un fichier AIFF, ffprobe compte des blocs décodés qui contiennent chacun de nombreuses "sample frames", de sorte que les deux nombres diffèrent même dans un fichier complet.

L'option -count_packets, également utilisée avec -show_streams, compte les paquets sans les décoder et indique le résultat dans nb_read_packets. Un paquet vidéo contient généralement une image compressée, mais un paquet audio peut en contenir plusieurs.

Pourquoi c'est important

Pour un flux vidéo, le nombre d'images et la durée donnent ensemble la fréquence d'images moyenne. Le lecteur MP4 et MOV de FFmpeg calcule cette fréquence à partir d'un nombre d'images et d'une durée. Dans le même fichier de test, 708 images sur 23,613333 secondes donnent environ 29,98 images par seconde.

Le décompte vous aide aussi à vérifier un fichier vidéo. Si un décompte mesuré est très inférieur au décompte stocké, une partie des données vidéo peut manquer.