Se bem entendi, este artigo no Wiki do FFmpeg chamado "Criar uma imagem em miniatura a cada X segundos do vídeo" mostra que o FFmpeg não pode fazer o que deseja (sem alguns cálculos automatizados).
O wiki diz que -vf "fps=fps=XYZ"
é sua melhor chance - ele criará uma miniatura / quadro a cada quadro XYZ
do vídeo original. Se você realmente deseja 10 fotos por vídeo e todas elas têm comprimentos diferentes, primeiro você pode ler a contagem total de quadros e calcular os fps necessários com um script:
XYZ=wanted_frames_times_actual_fps/total_frames_of_vid
por wanted_frames_times_actual_fps
exemplo, 10*25
(PAL) ou 10*30
(NTSC) no seu caso e total_frames_of_vid=(hh*3600+mm*60+ss)*25+ff
, onde hh
significa horas, mm
significa minutos, ss
segundos, e ff
quadros (após o último segundo contado). Exemplo de cálculo: um código de tempo de 01:35:45:24
(ou 01:35:45.960
nos termos do FFmpeg, como o FFmpeg não usa quadros, mas milissegundos) a 25 quadros por segundo se assemelha ao total de 143649 quadros.
Essa solução pode funcionar - você só precisa encontrar uma maneira de obter o tempo total do vídeo (por exemplo, via ffprobe) e seus fps (se você não conseguir um código de tempo adequado) e, em seguida, armazenar essas informações como uma variável chamada $total_frames_of_vid
.
Eu encontrei outra abordagem sobre isso na seção "Also see" da Wiki, com um link para
uma pergunta de superusuário chamada "Miniaturas significativas para um vídeo usando o FFmpeg", que sugere o uso de:
ffmpeg -hide_banner -i <YOUR_VIDEO> -vf "select=gt(scene\,0.8)" -frames:v 10 -vsync vfr -vf "fps=fps=1/200" -y out%03d.png
(Modifiquei o código um pouco - alterei o codec da imagem para PNG e alterei os valores para -frames:v
e fps
. Também alterei as imagens de saída para ter três dígitos em seus nomes.)
e depois recodificá-los no seu GIF.
Esta solução também precisa de algum trabalho manual ou computacional, pois os valores de todas as opções (e principalmente fps
precisam ser alterados de acordo com a duração do vídeo. Ou seja, eu tentei o código original do superusuário com um vídeo de 35 minutos - e obtive apenas 5 quadros .