FFMPEG extrair quadros intra-frames I, P, B

4

Existe uma maneira de extrair os frames internos e preservá-los como estão no FFMPEG ou em um programa similar? Eu sei que você pode extrair quadros para uma seqüência de imagens JPEG usando -f image2 . Mas essas são imagens completas de cada um dos quadros. Eu gostaria de exportar apenas a imagem da mudança em movimento, então eu teria os quadros P e B apenas mostrando 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 fornece imagens emolduradas 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 quadros para que eu tenha uma pasta de quadros em que o primeiro quadro seria uma imagem completa, o próximo quadro seria apenas os dados da imagem em que a imagem precisa ser redesenhada. Expondo a redundância temporal entre os dois quadros (não é isso que os quadros I, P, B fazem?)

    
por ndmweb 07.06.2013 / 02:27

2 respostas

5

Para extrair um tipo de quadro certin, use o filtro de seleção:

select=eq(pict_type\,<x>)

em que <x> é 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 o filtro showinfo :

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

    
por 07.06.2013 / 07:02
4

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 isso 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
    
por 08.06.2013 / 04:15

Tags