ffmpeg: extraia quadros e obtenha seus timestamps exatos

4

Estou tentando extrair quadros de um vídeo de variável framerate a cada 5 segundos e obter os timestamps exatos de cada quadro extraído. Isso é o que eu tenho até agora:

-i inputfile -vstats_file vstats.log  -vsync 2 -vcodec png -r 0.2 -f image2pipe -

E é isso que eu recebo:

frame=     1 q= 0.0 f_size= 136261 s_size=      133kB **time= 5.000** br=   218.0kbits/s avg_br=   218.0kbits/s type= I
frame=     2 q= 0.0 f_size= 139382 s_size=      269kB **time= 10.000** br=   223.0kbits/s avg_br=   220.5kbits/s type= I
frame=     3 q= 0.0 f_size= 141631 s_size=      407kB **time= 15.000** br=   226.6kbits/s avg_br=   222.5kbits/s type= I

Eu preciso do timestamp exato do quadro que foi usado para extração, para que eu possa cortar o vídeo com precisão com base nas miniaturas geradas.

Além disso, existe uma maneira de imprimir vstats para stdout em vez de um arquivo?

    
por Mango 07.06.2012 / 17:00

1 resposta

2

Não sei o que você tentou fazer, mas se funcionar para você, tudo bem ...

De qualquer forma, para pular quadros, eu teria usado o filtro de vídeo SELECT (verifique se você tem libavfilter enable). Para quadros infoI teria usado SHOWINFO filtro de vídeo.

Seu comando deve ser algo como o seguinte:

ffmpeg -i inputfile -vf '[in]select=not(mod(n\,150))[s1];[s1]showinfo[out]' -vcodec mpeg2video outputfile

(onde 150 quadros são 5s * 30fps)

    
por 12.06.2012 / 16:36