Короткая проблема: я хочу сделать несколько снимков экрана из URL-адреса видео в определенное время, но я не хочу читать видео целиком.
Допустим, у меня есть видео, сохраненное в некотором URL (например, https://www.sample-videos.com/video/mp4/720/big_buck_bunny_720p_30mb.mp4). Размер видео велик, но мы можем искать на видео.
Теперь я хочу сделать 4 скриншота / миниатюры видео. Например, если размер видео составляет 100 с, я хочу сделать снимки экрана в 20, 40, 60 и 80-х годах.
Использование учебника из вики: создание миниатюрного изображения каждые X секунд видео. Я могу сделать это
ffmpeg -i 'https://www.sample-videos.com/video/mp4/720/big_buck_bunny_720p_30mb.mp4' -vf fps=1/20 img%03d.jpg
Но проблема этого подхода в том, что он читает весь ввод перед возвратом скриншотов. Но так как ввод является доступным, это кажется бесполезным. Лучше всего подойти к позициям и занять их. Сейчас мы используем что-то вроде
for i in 20 to 80 step 20
ffmpeg -noaccurate_seek -ss {i} -i 'https://www.sample-videos.com/video/mp4/720/big_buck_bunny_720p_30mb.mp4' -vframes 1 out-{i}.png
Это похоже на работу, но все равно выполнение каждого ffmpeg занимает некоторое время, и каждый ffmpeg декодирует заголовок того же URL-адреса видео, который кажется избыточным. Есть ли способ, чтобы в одном вызове ffmpeg этот дубликат работ можно было удалить?
PS Нет необходимости в ответе только с помощью ffmpeg. Мы также можем использовать mpv/mplayer или vlc или любой другой плеер / конвертер, доступный в Linux.