Como eu extraio os timestamps associados aos frames ffmpeg extraídos de um vídeo com a opção -r?

11
ffmpeg -i myvid.mp4  -r  25  -t  100  image-%d.jpeg 

É o comando que estou usando para extrair quadros e está funcionando exatamente como eu esperava. No entanto, eu também gostaria de ver os timestamps dos frames. Em qualquer precisão. 100 milissegundos é bom o suficiente para mim. O ffmpeg pode fazer isso?

Fornecendo detalhes adicionais,

Quando executo o comando acima, recebo cerca de 100 JPEGs, acho que há uma correspondência de 1 para 1 (ou muitos para 1) entre esses JPEGs e quadros do vídeo. Eu gostaria de saber o timestamp do quadro que foi gerado como uma imagem JPEG 'i'.

Além disso, eu tentei o ffprobe, mas acho que ele relata até a duração do vídeo imprecisamente :(

    
por Srini 18.11.2014 / 19:57

1 resposta

11

O que você pode fazer é "simular" o processo de gravação de imagens, filtrando com o filtro fps e, em seguida, usando ffprobe para mostrar os registros de data e hora dos quadros gerados. Isso significa que a 25 fps, o 50º quadro (como a sua 50ª imagem) terá uma PTS de 2,00 segundos.

Você faz assim:

ffprobe -f lavfi -i "movie=input.mp4,fps=fps=25[out0]" -show_frames -show_entries frame=pkt_pts_time -of csv=p=0

A saída será:

0
0.04
0.08
0.12
0.16
...

Estes são os carimbos de data e hora de cada imagem de saída. Você pode combinar a lista de frames e os timestamps:

ls -1 image-*.jpeg > images.txt
ffprobe -f lavfi -i "movie=input.mp4,fps=fps=25[out0]" -show_frames -show_entries frame=pkt_pts_time -of csv=p=0 > frames.txt
paste images.txt frames.txt > combined.txt

Criará um arquivo com:

image-0001.jpeg 0
image-0002.jpeg 0.04
image-0003.jpeg 0.08
image-0004.jpeg 0.12

Observe que isso pode resultar em linhas estranhas se houver muitos quadros ou muitas linhas de saída de informações. Parece um pouco impreciso lá.

    
por 19.11.2014 / 21:14

Tags