Produza miniaturas de vídeo durante a mudança de cena a uma taxa mínima de 1 por segundo

Produza miniaturas de vídeo durante a mudança de cena a uma taxa mínima de 1 por segundo

Tenho os seguintes requisitos para as miniaturas:

  1. a mudança de cena deve ser pelo menos 6% diferente da últimaselect=gt(scene\,0.06)
  2. a proporção é mantida na largura de 1280pxscale='min(1280\, iw):-1'
  3. mínimo de 1 segundo entre cada miniatura-r 1
  4. nomes de arquivos representam o deslocamento de tempo da miniatura-vsync 0 -frame_pts 1

Atualmente, isso é inserido em um comando como abaixo:

ffmpeg -copyts -i arquivo.mp4 -vf "select=gt(scene\,0.06),scale='min(1280\, iw):-1'" -r 1 -vsync 0 -frame_pts 1 snapshot.1280.% 04d.png -f nulo

No entanto, estou recebendo erros na saída:

Usar -vsync 0 e -r pode produzir arquivos de saída inválidos

[image2 @ 0x7f804500a000] O aplicativo forneceu dts inválido e aumentando não monotonicamente para muxer no fluxo 0: 463 >= 463

Isso deveria ser algo com que se preocupar no comando ou devo ignorá-los?

Responder1

Se você precisar de um mínimo de 1 segundo entre os snaps, deverá modificar a expressão de seleção para isso. Tudo o -rque este comando faz afeta o nome do arquivo que é formado devido a frame_pts. (Você pode ignorar o aviso de "arquivos inválidos"; destinado a um cenário diferente).

ffmpeg -copyts -i file.mp4 -vf "select=eq(n\,0)+gt(scene\,0.06)*gte(t-prev_selected_t\,1),scale='min(1280\, iw):-1'" -r 1 -vsync 0 -frame_pts 1 snapshot.1280.%04d.png

informação relacionada