Por que o ffprobe reporta um número incorreto de frames?

3

Eu tenho um pequeno arquivo de vídeo que o ffprobe descreve como: -

Input #0, avi, from 'sample.avi': 
Metadata: 
encoder : Lavf55.12.100 
Duration: 00:00:35.00, start: 0.000000, bitrate: 546 kb/s 
Stream #0:0: Video: msmpeg4v3 (MP43 / 0x3334504D), yuv420p, 320x240, 
             506 kb/s, 200 fps, 200 tbr, 200 tbn, 200 tbc 

Como o vídeo é de 35 segundos. longo, e com taxa de quadros de 200 fps, espero que haja (35 x 200) = 7000 quadros no vídeo.

Se eu usar o ffmpeg para realmente extrair imagens de quadros do vídeo, eu realmente obtenho 6999 imagens (próximo o suficiente, suponho). O comando que eu uso para isso é: -

c:\> ffmpeg -i sample.avi  -f image2 -c:v png Img%%04d.png

Nota: o '%%' é necessário quando o comando é executado a partir da CLI do WinXP

No entanto, usando o comando: -

c:\> ffprobe -select_streams v -show_frames sample.avi > frames.lis 

e contando quantos itens [FRAME] estão em frames.lis fornece uma contagem de frames de 1023 frames e não 7000.

Alguma explicação?

Aqui está um link para um arquivo muito semelhante que se comporta da mesma maneira (~ 7MB):

http://www.filedropper.com/sample_65

Clique com o botão esquerdo na imagem "Download This File" na página.

Estou usando o build Win32 17APR2014 estático do ffmpeg 'ffprobe' no WinXP-SP3.

Se houver outra maneira de fazer isso, estou basicamente tentando criar uma tabela de "número de quadros" versus "tempo" para uma série de arquivos de vídeo para uso em outro aplicativo.

Obrigado.

    
por Skeeve 23.04.2014 / 04:46

1 resposta

1

Existe uma razão pela qual 1023 não pode estar correto? Os fps a que você está se referindo são informações de cabeçalho e, portanto, podem ser facilmente incorretos.

Na saída do png, existem muitos quadros duplicados? O Ffmpeg pode estar fazendo um favor e gerando quadros copiados para corresponder ao fps e à duração relatados.

O uso do ffprobe é a minha solução recomendada. É difícil ter certeza 100% do tempo a menos que você esteja realmente decodificando os quadros e contando. Portanto, usar -count_frames ou -show_frames deve fornecer o número que você está procurando.

Observação: não há garantia de que a duração listada seja exata.

    
por 19.08.2014 / 20:56