Смотрите страницу руководства ffmpeg . Вы хотите -vframes
:
-vframes
номер
Установите количество видеокадров для записи.
Также посмотрите этот пример того, как кто-то делает то же самое. Исходное сообщение отмечает, что -r
, кажется, не работает должным образом с аргументами меньше, чем один. Вместо этого предлагается использовать этот вид командной строки для захвата одного кадра (где X - некоторое время для поиска вперед в файле):
ffmpeg -ss X -i input.movie.file -an -vframes 1 ouput.png
Затем используйте сценарии оболочки, чтобы зациклить это, и автоматически сгенерируйте X на основе (а) того, сколько кадров вы хотите захватить и (б) как долго будет длиться видео. Так как ваш старый пример сценария уже находит (b), (a) является единственным необходимым вводом:
# generate NFRAMES frames in a movie 90 minutes long mins=$(exiftool "$file" | grep "Duration" | awk -F : '' | 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