Статья
Извлечение кадров видео для миниатюр и контактных листов
Видео, это последовательность неподвижных изображений. Извлечение одного из них даёт миниатюру, обложку или контактный лист. Результат получается более чётким и предсказуемым, когда вы понимаете, как видеокодек хранит кадры и какие моменты стоит захватывать.
Кадры и частота кадров
Видеофайл, это последовательность неподвижных изображений, отображаемых достаточно быстро для создания иллюзии движения. Количество изображений, показываемых в секунду,, это частота кадров, выраженная в fps. Распространённые значения: 24 fps для кино, 25 fps для PAL-вещания, 30 fps для веб-видео и 60 fps для игрового контента. При 24 fps двухчасовой фильм содержит около 172 800 отдельных кадров. Каждый кадр соответствует отдельному моменту времени; извлечение одного замораживает этот момент как отдельное изображение. Частота кадров также определяет, сколько кадров вы получаете за секунду видео при пакетном извлечении: при 30 fps извлечение каждого кадра из одной минуты видео даёт 1800 изображений, что зачастую намного больше, чем нужно. Извлечение с более низкой частотой кадров или каждого N-го кадра в инструментах, которые это поддерживают, практичный способ сократить этот объём при сохранении охвата всей продолжительности.

Ключевые кадры и интерполированные кадры
Современные видеокодеки не хранят каждый кадр как полное изображение. Они используют три типа кадров для экономии места. I-frame, также называемый ключевым кадром,, это полное, самодостаточное изображение. P-frame хранит только пиксели, изменившиеся с момента последнего I-frame или P-frame. B-frame хранит изменения относительно как предыдущего кадра, так и будущего, требуя кадров с обеих сторон для восстановления. Поскольку P-frame или B-frame неполны сами по себе, их декодирование требует окружающих опорных кадров. Если эти опорные кадры содержат размытие движения или переход, восстановленное изображение наследует это размытие. I-frame, напротив, декодируется независимо. Он всегда чёткий, поскольку не заимствует ничего от соседей. При извлечении кадра для использования в качестве миниатюры попадание на I-frame даёт наилучший возможный результат. Большинство кодеков размещают I-frame при смене сцены, что является естественно чёткими отправными точками.
Выбор подходящего момента
Даже хорошо декодированный I-frame может стать плохой миниатюрой, если захваченный момент не является удачным. Несколько факторов снижают качество миниатюры. Размытие движения возникает, когда камера или объект быстро движутся во время экспозиции кадра; результирующий смаз делает кадр мягким, даже если декодирование было чистым. Переходные кадры, захваченные в середине растворения или затухания, содержат два перекрывающихся изображения и редко работают как отдельные картинки. Недоэкспонированные или переэкспонированные кадры, распространённые в начале сцены до стабилизации автоэкспозиции, теряют детали в тенях или светах. Лучшие кадры для миниатюр получаются из моментов ясного действия или выражения, хорошего освещения и стабильной камеры. Прокрутка видео в плеере с отображением точных временных меток позволяет определить эти моменты до их извлечения. Кадр, хорошо выглядящий при паузе в плеере, как правило, будет хорошо выглядеть и как экспортированное изображение.

Экспорт: разрешение, формат и каждый N-й кадр
При извлечении кадра экспортированное изображение должно соответствовать нативному разрешению видео. Увеличение вносит артефакты интерполяции; уменьшение отбрасывает пиксели, которые могут понадобиться. Видео 1080p создаёт изображения 1920x1080 пикселей, а видео 4K, 3840x2160. По формату PNG сохраняет каждый пиксель точно и является правильным выбором, когда нужна максимальная чёткость для редактирования или дальнейшего масштабирования. JPEG меньше по размеру и подходит для предварительного просмотра или отправки, но вносит артефакты сжатия вокруг чётких краёв. При создании контактного листа, сетки небольших репрезентативных кадров, охватывающих всю продолжительность видео,, стандартный подход заключается в извлечении с фиксированной частотой кадров, а не в извлечении каждого кадра подряд: запрос 1 кадра в секунду из источника с 30 fps даёт одно изображение на каждую секунду видео, а более высокая частота, например 5 или 10 fps, даёт более плотный набор для детального изучения. Точная частота зависит от того, сколько деталей вам нужно по сравнению с тем, сколькими изображениями вы хотите управлять.
Локальная работа с video-extract-frames
Инструмент video-extract-frames на Sunasty декодирует ваше видео полностью внутри браузера, используя FFmpeg, скомпилированный в WebAssembly. Вы перетаскиваете файл, выбираете частоту от 1 до 30 кадров в секунду, выбираете PNG или JPEG, и инструмент декодирует кадры с этой частотой в памяти браузера и предлагает результаты как отдельные загрузки, с ограничением в 300 кадров за один запуск. Ваш видеофайл никогда не покидает ваше устройство. Ни байта не отправляется на сервер ни в какой момент процесса. Это важно для видеозаписей с личным или конфиденциальным содержимым: семейная съёмка, интервью или исходный материал до монтажа. Браузер загружает видео в виртуальную файловую систему в оперативной памяти, запускает декодирование FFmpeg и возвращает изображения вам. Компромисс: декодирование выполняется программно на вашем процессоре, а не специализированным аппаратным обеспечением, поэтому длинное видео с высоким разрешением займёт больше времени, чем в нативном приложении. Для извлечения нескольких кадров или создания контактного листа из короткого клипа скорость вполне практична.
Инструменты из этой статьи
- Извлечь кадры видеоИзвлекайте стоп-кадры из видео в виде изображений PNG или JPG прямо в браузере. Без загрузки.
- Обрезать видеоОбрежьте видео по диапазону начало/конец прямо в браузере. Быстрое копирование потока или точное перекодирование. Без загрузки.
- Видео в GIFПреобразуйте видеоклип в анимированный GIF прямо в браузере. Без загрузки.
Частые вопросы
Почему извлечённый кадр выглядит размытым?
Наиболее распространённая причина, попадание на P-frame или B-frame в момент движения. Эти кадры хранят различия, а не полные изображения, и размытие движения в исходном видео переносится в декодированный кадр. Попробуйте извлечь ближайший I-frame, соответствующий смене сцены или периодическому ключевому кадру, для более чёткого результата.
Экспортировать кадры в PNG или JPEG?
PNG, если вы планируете редактировать кадр, увеличивать его или использовать в контексте, где артефакты сжатия будут заметны. JPEG, если нужен меньший файл для быстрой отправки или предварительного просмотра, и небольшое снижение качества приемлемо. Для миниатюр, отображаемых при фиксированном маленьком размере, JPEG с разумными настройками качества обычно достаточен.
Как создать контактный лист из видео?
Выберите частоту кадров достаточно низкую, чтобы получить управляемое количество кадров, вместо одной временной метки. Для двухминутного клипа 1 кадр в секунду даёт около 120 кадров, чего достаточно, чтобы выбрать хорошую сетку; в любом случае вывод ограничен 300 кадрами за один запуск. Более низкой частоты, чем 1 fps, сегодня нет, поэтому для более разреженной сетки извлекайте с частотой 1 fps и оставляйте только нужные кадры для итоговой сетки.