ffprobe
se puede utilizar para obtener información sobre un archivo multimedia:
ffprobe -select_streams v -show_streams input.avi
Obtendrá detalles sobre la transmisión:
nb_frames=159697
Busque nb_frames
con grep
:
ffprobe -select_streams v -show_streams input.avi 2>/dev/null | grep nb_frames | sed -e 's/nb_frames=//'
Eso funciona para avi, mp4 y etc. Para algunos contenedores, no muestra un valor válido, p. mpeg.
En ese caso, esto funciona ffprobe -show_packets a.mpg 2>/dev/null | grep video | wc -l
Esto es horrible, estúpido y lento, pero parece funcionar:
ffmpeg -i foo.avi -vcodec copy -f rawvideo -y /dev/null 2>&1 | tr ^M '\n' | awk '/^frame=/ {print $2}'|tail -n 1
También funcionará bien en archivos truncados y transmisiones sin procesar (es por eso que no obtiene nada para los archivos .vob)
Publiqué esto en otra pregunta. Usando el tcprobe
herramienta (del transcode
paquete), el número de marcos está incluido en la información. Usa el -i
cambie para obtener un volcado de información del archivo:
$ 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
Tenga en cuenta que el número de fotogramas se indica aquí en dos líneas (segunda línea de salida y última línea de salida).