ffprobe
peut être utilisé pour obtenir des informations sur un fichier multimédia :
ffprobe -select_streams v -show_streams input.avi
Vous obtiendrez des détails sur le flux :
nb_frames=159697
Recherchez nb_frames
avec grep
:
ffprobe -select_streams v -show_streams input.avi 2>/dev/null | grep nb_frames | sed -e 's/nb_frames=//'
Cela fonctionne pour avi, mp4 et etc. Pour certains conteneurs, il n'affiche pas de valeur valide, par ex. mpeg.
Dans ce cas, cela fonctionne ffprobe -show_packets a.mpg 2>/dev/null | grep video | wc -l
C'est horrible, stupide et lent, mais semble fonctionner :
ffmpeg -i foo.avi -vcodec copy -f rawvideo -y /dev/null 2>&1 | tr ^M '\n' | awk '/^frame=/ {print $2}'|tail -n 1
Cela fonctionnera également correctement sur les fichiers tronqués et les flux bruts (c'est pourquoi vous n'obtenez rien pour les fichiers .vob)
J'ai posté ceci sur une autre question. Utilisation du tcprobe
outil (du transcode
package), le nombre de cadres est inclus dans l'info. Utilisez le -i
basculez pour obtenir un vidage d'informations à partir du fichier :
$ tcprobe -i foo.avi
[tcprobe] RIFF data, AVI video
[avilib] V: 29.970 fps, codec=XVID, frames=38630, width=512, height=384
[avilib] A: 48000 Hz, format=0x55, bits=16, channels=2, bitrate=128 kbps,
[avilib] 53707 chunks, 21768720 bytes, VBR
[tcprobe] summary for foo.avi, (*) = not default, 0 = not detected
import frame size: -g 512x384 [720x576] (*)
frame rate: -f 29.970 [25.000] frc=4 (*)
audio track: -a 0 [0] -e 48000,16,2 [48000,16,2] -n 0x55 [0x2000] (*)
bitrate=128 kbps
length: 38630 frames, frame_time=33 msec, duration=0:21:28.954
Notez que le nombre d'images est donné sur deux lignes ici (2ème ligne de sortie et dernière ligne de sortie).