Извлечение ключевых кадров из видео с помощью FFmpeg: подробное руководство

При обработке видео ключевые кадры играют решающую роль в различных приложениях, таких как обобщение видео, обнаружение объектов и индексирование на основе контента. FFmpeg — мощный инструмент командной строки, который позволяет эффективно манипулировать видео, включая извлечение ключевых кадров. В этой статье мы рассмотрим несколько методов извлечения ключевых кадров из видео с помощью FFmpeg, а также приведем примеры кода.

Метод 1: извлечение всех ключевых кадров
Самый простой метод извлечения всех ключевых кадров из видео — использование параметра «-vf» (видеофильтр) в FFmpeg. Следующая команда извлекает все ключевые кадры и сохраняет их как отдельные файлы изображений:

ffmpeg -i input_video.mp4 -vf "select=eq(pict_type\,I)" -vsync vfr output_%03d.jpg

Объяснение:

  • -i input_video.mp4указывает входной видеофайл.
  • -vf "select=eq(pict_type\,I)"применяет видеофильтр для выбора кадров с «I» (внутренним) pict_type, который представляет ключевые кадры.
  • -vsync vfrустанавливает переменную частоту кадров на выходе.
  • output_%03d.jpgопределяет шаблон выходного файла, где «%03d» представляет собой трехзначный последовательный номер.

Метод 2: извлечение ключевых кадров через фиксированные интервалы
Если вы хотите извлечь ключевые кадры через фиксированные интервалы времени, вы можете использовать параметр -vfс фильтром fps. Следующая команда извлекает ключевые кадры каждые 10 секунд:

ffmpeg -i input_video.mp4 -vf "select=eq(pict_type\,I),fps=1/10" -vsync vfr output_%03d.jpg

Объяснение:

  • -vf "select=eq(pict_type\,I),fps=1/10"объединяет фильтры «Выбрать» и «fps» для извлечения ключевых кадров со скоростью 1 кадр в 10 секунд.

Метод 3: извлечение ключевых кадров на основе обнаружения изменения сцены
FFmpeg также предоставляет фильтр обнаружения изменения сцены (select=scene), который автоматически обнаруживает изменения сцены и соответствующим образом извлекает ключевые кадры. Следующая команда демонстрирует извлечение ключевых кадров на основе изменения сцены:

ffmpeg -i input_video.mp4 -vf "select=scene,showinfo" -vsync vfr output_%03d.jpg

Объяснение:

  • -vf "select=scene,showinfo"применяет фильтр обнаружения изменения сцены вместе с параметром showinfoдля отображения информации об обнаруженных сценах.
  • -vsync vfrустанавливает переменную частоту кадров на выходе.

Метод 4: извлечение ключевых кадров с использованием метаданных
Некоторые видеоформаты хранят информацию о ключевых кадрах в метаданных. FFmpeg может извлекать ключевые кадры на основе этих метаданных. Следующая команда демонстрирует этот подход:

ffmpeg -i input_video.mp4 -map 0:v -c copy -f nut - | ffprobe -show_frames -select_streams v -print_format json - | grep -Po '"key_frame":\s*\d' > keyframes.txt

Объяснение:

  • -map 0:v -c copy -f nut -извлекает видеопоток без его повторного кодирования.
  • ffprobe -show_frames -select_streams v -print_format json -извлекает информацию на уровне кадра в формате JSON.
  • grep -Po '"key_frame":\s*\d' > keyframes.txtфильтрует вывод JSON для извлечения информации о ключевом кадре и сохраняет ее в текстовый файл с именем «keyframes.txt».

В этой статье мы рассмотрели несколько методов извлечения ключевых кадров из видео с помощью FFmpeg. Мы рассмотрели извлечение всех ключевых кадров, извлечение ключевых кадров через фиксированные интервалы, использование обнаружения изменения сцены и извлечение ключевых кадров с использованием метаданных. Используя эти методы, вы можете эффективно выполнять различные задачи по анализу видео.