1

Короткая проблема: я хочу сделать несколько снимков экрана из 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.

0