FFMPEG extrae fotogramas intracuadros I, P, B

FFMPEG extrae fotogramas intracuadros I, P, B

¿Hay alguna manera de extraer los intracuadros y conservarlos tal cual desde FFMPEG o un programa similar? Sé que puedes extraer fotogramas a una secuencia de imágenes JPEG usando -f image2. Pero esas son imágenes completas de cada uno de los fotogramas. Me gustaría exportar solo la imagen del cambio en movimiento, por lo que los cuadros P y B solo mostrarían el cambio en movimiento excluyendo o enmascarando el área sin cambios de las imágenes.

es posible?

El comando básico de exportación de cuadros que estoy usando. Esto me proporciona imágenes encuadradas completas de cada fotograma, al FPS especificado.

ffmpeg -i input.mp4 -r 12 -an -b 1024k -y -f image2 frame%4d.jpg

Espero exportar los fotogramas para tener una carpeta de fotogramas donde el primer fotograma sería una imagen completa y el siguiente fotograma solo serían los datos de la imagen donde es necesario volver a dibujar la imagen. Exponer la redundancia temporal entre los dos fotogramas (¿no es esto lo que hacen los fotogramas I,P,B?)

Respuesta1

Para extraer un cierto tipo de marco utilice elselectfiltrar:

select=eq(pict_type\,<x>)

donde <x>es uno de los siguientes:pict_type (video only) the type of the filtered frame, can assume one of the following values: I, P, B, S, SI, SP, BI

Así por ejemplo:

ffmpeg -i <inputfile> -vf '[in]select=eq(pict_type\,B)[out]' b.frames.mp4

Para comprender más sobre el resultado, agregue elshowinfofiltrar:

ffmpeg -i <inputfile> -vf '[in]select=eq(pict_type\,B),showinfo[out]' b.frames.mp4

Respuesta2

Los fotogramas P y B no suelen contener datos de imagen nuevos para cada una de las áreas que han cambiado. Más bien, la imagen se divide en macrobloques de diferentes tipos. Algunos tipos de macrobloques contienen nuevos datos de imágenes, pero la mayoría calcula el contenido basándose en otras imágenes de referencia y vectores de movimiento.

No es exactamente lo que estabas pidiendo, pero usará colores para mostrarte el tipo de cada macrobloque:

ffmpeg -debug vis_mb_type -i input.mp4 output.mp4

o

ffplay -debug vis_mb_type input.mp4

Esto también le mostrará los vectores de movimiento:

ffplay -debug vis_mb_type -vismv 7 input.mp4

Consulte el enlace para obtener más información sobre los colores de cada MB:

Documentación de Depuración de macrobloques y vectores de movimiento FFMpeg

información relacionada