Veja o ffmpeg manpage . Você quer -vframes
:
-vframes
number
Set the number of video frames to record.
Veja também este exemplo de alguém fazendo a mesma coisa. A mensagem original observa que -r
parece não funcionar corretamente com argumentos menores que um. Em vez disso, a sugestão é usar esse tipo de linha de comando para pegar um quadro (onde X é algum tempo para procurar no arquivo):
ffmpeg -ss X -i input.movie.file -an -vframes 1 ouput.png
Em seguida, use o shell script para fazer um loop e gerar automaticamente o X com base em (a) quantos quadros você deseja capturar e (b) por quanto tempo o vídeo está. Como seu antigo script de exemplo já encontra (b), (a) é a única entrada necessária:
# generate NFRAMES frames in a movie 90 minutes long
mins=$(exiftool "$file" | grep "Duration" | awk -F : '{print $2}' | grep --only-matching '[0-9]*')
dir="$file-screenshots"
mkdir "$dir"
for i in $(seq 1 $NFRAMES);
do
ffmpeg -ss $(echo "$i * $mins" | bc -l) -i "$file" -an -vframes 1 "$dir/$i.png";
done