framerate variável com FFmpeg

0

Suponhamos que eu tenha 5 imagens com os respectivos atrasos entre cada imagem:

  1. 60ms;
  2. 54ms;
  3. 70ms;
  4. 23ms;
  5. 40ms;

Como posso saber FFmpeg essa informação?

    
por Nicke Manarin 08.07.2016 / 05:27

1 resposta

1

Além do método de várias ferramentas mostrado no link , isso também pode ser feito por meio de um único comando longo.

ffmpeg -i a1.jpg -i a2.jpg -i a3.jpg -i a4.jpg -i a5.jpg
       -filter_complex
        "[1]settb=1/1000,setpts=PTS+0.06/TB[b];
         [2]settb=1/1000,setpts=PTS+0.054/TB[c];
         [3]settb=1/1000,setpts=PTS+0.07/TB[d];
         [4]split[4a][4b];
         [4a]settb=1/1000,setpts=PTS+0.023/TB[e];
         [4b]settb=1/1000,setpts=PTS+0.04/TB[f];
         [0][b][c][d][e][f]concat=n=6"
       -vsync vfr -r 1000 -video_track_timescale 1000 vt.mp4

Para cada imagem, exceto a primeira, os filtros timebase e timestamp são aplicados. Como você precisa de precisão em milissegundos, a base de tempo é definida como 1/1000 seg = 1 milissegundo. Em seguida, os setpts adicionam o atraso necessário (em segundos). Como acredito que o último quadro do vídeo tenha, na verdade, a duração padrão determinada pela taxa de quadros do codec, a última imagem precisa ser duplicada. A primeira cópia é configurada com o valor PTS de acordo com seu atraso, e a segunda tem seu PTS configurado para a duração desejada da última imagem.

    
por 08.07.2016 / 08:37