Tenho os seguintes requisitos para as miniaturas:
- a mudança de cena deve ser pelo menos 6% diferente da última
select=gt(scene\,0.06)
- a proporção é mantida na largura de 1280px
scale='min(1280\, iw):-1'
- mínimo de 1 segundo entre cada miniatura
-r 1
- 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 -r
que 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