При обработке видео ключевые кадры играют решающую роль в различных приложениях, таких как обобщение видео, обнаружение объектов и индексирование на основе контента. 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. Мы рассмотрели извлечение всех ключевых кадров, извлечение ключевых кадров через фиксированные интервалы, использование обнаружения изменения сцены и извлечение ключевых кадров с использованием метаданных. Используя эти методы, вы можете эффективно выполнять различные задачи по анализу видео.