FFMPEG extrai quadros intra-quadros I, P, B

FFMPEG extrai quadros intra-quadros I, P, B

Existe uma maneira de extrair os intra-frames e preservá-los como estão no FFMPEG ou programa semelhante? Eu sei que você pode extrair quadros para uma sequência de imagens JPEG usando -f image2. Mas essas são imagens completas de cada um dos quadros. Gostaria de exportar apenas a imagem da mudança em movimento, assim teria os quadros P e B mostrando apenas a mudança em movimento excluindo ou mascarando a área não alterada das imagens.

Isso é possível?

O comando básico de exportação de quadros que estou usando. Isso me dá imagens completas de cada quadro, no FPS especificado.

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

Espero exportar os frames para que eu tenha uma pasta de frames onde o primeiro frame seria uma imagem completa, o próximo frame seria apenas os dados da imagem onde a imagem precisa ser redesenhada. Expor a redundância temporal entre os dois quadros (não é isso que os quadros I, P, B fazem?)

Responder1

Para extrair um determinado tipo de quadro use oselectfiltro:

select=eq(pict_type\,<x>)

onde <x>está um dos seguintes:pict_type (video only) the type of the filtered frame, can assume one of the following values: I, P, B, S, SI, SP, BI

Então, por exemplo:

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

Para entender mais sobre a saída, adicione oshowinfofiltro:

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

Responder2

Os quadros P e B geralmente não contêm novos dados de imagem para cada uma das áreas que foram alteradas. Em vez disso, a imagem é dividida em macroblocos de diferentes tipos. Alguns tipos de macroblocos contêm novos dados de imagem, mas a maioria calcula o conteúdo com base em outras imagens de referência e vetores de movimento.

Não é exatamente o que você estava pedindo, mas usará cores para mostrar o tipo de cada macrobloco:

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

ou

ffplay -debug vis_mb_type input.mp4

Isso também mostrará os vetores de movimento:

ffplay -debug vis_mb_type -vismv 7 input.mp4

Consulte o link para obter mais informações sobre as cores de cada MB:

Documentação do FFMpeg de depuração de macroblocos e vetores de movimento

informação relacionada