Ответ 1
-
Метод 1: интервалы кадров
Это может занять некоторое время в зависимости от ввода или возврата
N/A
для определенных типов входов (см. в этом случае метод, основанный на длительности).Получить общее количество кадров
video
:ffprobe <input> -select_streams v -show_entries stream=nb_frames -of default=nk=1:nw=1 -v quiet
Команда выведет целочисленное значение, например:
18034
В приведенном выше примере интервал кадра
nb_frames / 5 = 18034 / 5 = 3607
Наконец, команда
ffmpeg
:ffmpeg -i <input> -filter:v "select=(gte(n\,3607))*not(mod(n\,3607)),tile=2x2" -frames:v 1 -vsync vfr -y tile.png
-
Метод 2: интервалы продолжительности
Те же идеи, что и выше, но используйте продолжительность в секундах. Это может занять некоторое время, и сообщенная продолжительность может быть недействительной (например: если файл усечен).
ffprobe <input> -select_streams v -show_entries stream=duration -of default=nk=1:nw=1 -v quiet
Он возвращает реальное значение, например:
601.133333
Ваш интервал
601 / 5 ~= 120
секунд:ffmpeg -i <input> -filter:v "select=(gte(t\,120))*(isnan(prev_selected_t)+gte(t-prev_selected_t\,120)),tile=2x2" -frames:v 1 -y tile.png
-
Метод 3: поиск и извлечение
Найдите определенное время с помощью
-ss -i
, извлеките один кадр и используйте imagemagickmontage
для создания плитки.Пример вывода для таймера обратного отсчета 10 минут: