¿Alguien sabe cómo obtener la cantidad de fotogramas totales de un archivo de video usando ffmpeg? La salida de renderizado de ffmpeg muestra el fotograma actual y necesito el recuento de fotogramas para calcular el progreso en porcentaje.
112

Respuestas:
Nota: La presencia de una lista de edición en MP4 / M4V / M4A / MOV puede afectar su número de fotograma. Consulte Editar listas a continuación.
ffprobe: consulta el contenedor
N/A. Consulte los otros métodos que se enumeran a continuación.ffprobe: cuenta el número de fotogramas
-skip_frame nokeyopción de contar solo los fotogramas clave.ffmpeg: cuenta el número de fotogramas
Si no lo tiene
ffprobe, puede usarffmpegen su lugar:frame=cerca del final de la salida de la consola.-discard nokeyopción de entrada (antes-i) para contar solo los fotogramas clave.Editar listas
Ignore la lista de edición MP4 / M4V / M4A / MOV con la
-ignore_editlist 1opción de entrada. El valor predeterminado es no ignorar la lista de edición.Que significan las opciones de ffprobe
-v errorEsto oculta la salida de "información" (información de la versión, etc.) lo que facilita el análisis.-count_framesCuente el número de fotogramas por flujo e infórmelo en la sección de flujo correspondiente.-select_streams v:0Seleccione solo la transmisión de video.-show_entries stream=nb_frameso-show_entries stream=nb_read_framesMostrar solo la entrada paranb_framesonb_read_frames.-of default=nokey=1:noprint_wrappers=1Establezca el formato de salida (también conocido como el "escritor") endefault, no imprima la clave de cada campo (nokey=1) y no imprima el encabezado y pie de página de la sección (noprint_wrappers=1). Hay alternativas más cortas como-of csv=p=0.Ver también
información de los medios
La conocida
mediainfoherramienta puede generar el número de fotogramas:MP4Box
Para archivos MP4 / M4V / M4A.
MP4Boxde gpac puede mostrar el número de fotogramas:Consulte la
Media Infolínea en la salida para la transmisión de video en cuestión:En este ejemplo, la secuencia de video tiene 2525 cuadros.
caja
Para archivos MP4 / M4V / M4A / MOV.
boxdumperes una sencilla herramienta de l-smash. Producirá una gran cantidad de información. En lastszsección del cuadro de tamaño de muestra, consultesample_countel número de fotogramas. En este ejemplo, la entrada tiene 1900 fotogramas de video:stszátomo.fuente
ffprobe -v error -select_streams v:0 -show_entries stream=nb_frames -of default=nokey=1:noprint_wrappers=1 input.mkvEn Unix, esto funciona a la perfección:
fuente
ffmpeg -i 00000.avi -map 0:v:0 -c copy -f null -y /dev/null 2>&1 | grep -Eo 'frame= *[0-9]+ *' | grep -Eo '[0-9]+' | tail -1Calcúlalo en función del tiempo.
Eso es lo que hago y funciona muy bien para mí y para muchos otros). Primero, busque la duración del video en el siguiente fragmento:
Debería poder encontrar de manera consistente y segura
Duration: hh:mm:ss.nnpara determinar el tamaño del videoclip de origen. Luego, para cada línea de actualización (CR, no LF) puede analizar el texto para la marca de tiempo actual en la que se encuentra:Solo tenga cuidado de no esperar siempre un resultado perfecto de estas líneas de estado. Pueden incluir mensajes de error como aquí:
Una vez que usted tiene el tiempo, es simple matemática:
time / durration * 100 = % done.fuente
TimeSpanpartir de él y luego usarcurrentDurationTimeSpan.Ticks / (totalDurationTimeSpan.Ticks / 100). El TimeSpan también proporciona una potente función de análisis, compruébaloNo todos los formatos almacenan su recuento de fotogramas o la duración total, e incluso si lo hacen, el archivo puede estar incompleto, por lo que ffmpeg no detecta ninguno de ellos con precisión de forma predeterminada.
En su lugar, intente buscar el final del archivo y lea la hora, luego cuente la hora actual mientras avanza.
Alternativamente, puede probar
AVFormatContext->nb_index_entrieso la duración detectada, que debería funcionar en AVI / MOV bien al menos sin daños, o la biblioteca FFMS2, que probablemente sea demasiado lenta para molestarse en una barra de progreso.fuente
Prueba algo como:
Escribe el número de fotograma en stderr, por lo que puede recuperar el último fotograma de este.
fuente
Puede usar
ffprobepara obtener el número de fotograma con los siguientes comandosffprobe.exe -i video_name -print_format json -loglevel fatal -show_streams -count_frames -select_streams vque dicen imprimir datos en
jsonformatoselect_streams vle diráffprobeque nos brindevideodatos de transmisión y, si los elimina, también le brindaráaudioinformacióny la salida será como
2. puedes usar
que le dará datos de flujo, si desea información seleccionada como velocidad de fotogramas, use el siguiente comando
que dan una base numérica en la información de su video, el problema es que cuando usa este método, es posible que obtenga una
N/Asalida como.para obtener más información, consulte esta página FFProbe Tips
fuente
prueba esto:
fuente
*.ts. La salida es una línea vacía.Dado que mi comentario recibió algunos votos a favor, pensé que lo dejaría como respuesta:
Esto debería ser rápido, ya que no se está realizando ninguna codificación.
ffmpegsimplemente demux el archivo y leerá (decodificará) el primer flujo de video lo más rápido posible. El primergrepcomando tomará el texto que muestra el marco. El segundogrepcomando tomará solo el número de eso. Eltailcomando solo mostrará la línea final (recuento de fotogramas final).fuente
para construir sobre la respuesta de Stu. así es como encontré la velocidad de fotogramas de un video desde mi teléfono móvil. Ejecuté el siguiente comando por un tiempo. Dejé que el recuento de cuadros llegara a aproximadamente ~ 10,000 antes de impacientarme y presionar ^ C:
luego, tomé dos piezas de información de esa línea que comienza con "frame =", el número de cuadros, 7989, y el tiempo, 00: 04: 26.30. Primero debe convertir el tiempo en segundos y luego dividir el número de fotogramas por segundos para obtener "fotogramas por segundo". "fotogramas por segundo" es su velocidad de fotogramas.
la velocidad de fotogramas de mi video es de 30 fps.
fuente
La única precisión que he podido hacer es la siguiente:
Para asegurarse de que esto funcione con video:
fuente
ffprobe -i my_video.mp4 -show_frames 2>&1 | grep -c media_type=videoLo siento por la respuesta necro, pero tal vez necesite esto (ya que no encontré una solución para las versiones recientes de ffmpeg.
Con ffmpeg 3.3.4 encontré uno que puede encontrar con lo siguiente:
Al final, dará salida al recuento de cuadros. Me funcionó en videos con audio. Sin embargo, da dos veces una línea "nb_frames", pero la primera línea fue el recuento de cuadros real en los videos que probé.
fuente
Utilizo php_ffmpeg y luego puedo obtener todos los tiempos y todos los fotogramas de una película. Como a continuación
Y luego el detalle está en la página.
http://ffmpeg-php.sourceforge.net/doc/api/ffmpeg_movie.php
fuente
fuente
linux
rubí
fuente