При обработке видео ключевые кадры — это кадры, которые используются в качестве опорных точек для всего видео. Извлечение ключевых кадров из видео может быть полезно для различных приложений, таких как обобщение видео, создание миниатюр и анализ контента. FFmpeg, мощный инструмент командной строки, предоставляет несколько методов для извлечения ключевых кадров из видео. В этой статье мы рассмотрим различные подходы с примерами кода для извлечения ключевых кадров с помощью FFmpeg.
Метод 1: использование фильтра выбора:
FFmpeg предоставляет фильтр выбора, который позволяет нам извлекать определенные кадры на основе условий. Чтобы извлечь ключевые кадры с помощью этого метода, выполните следующую команду:
ffmpeg -i input.mp4 -vf "select='eq(pict_type,PICT_TYPE_I)'" -vsync vfr output%d.jpg
Эта команда отфильтровывает кадры с типом pict_type, равным PICT_TYPE_I, который представляет ключевые кадры. Выходной%d.jpg определяет шаблон имени выходного файла.
Метод 2. Использование фильтра showinfo:
Фильтр showinfo в FFmpeg предоставляет подробную информацию о каждом кадре. Анализируя выходные данные, мы можем идентифицировать ключевые кадры. Выполните следующую команду:
ffmpeg -i input.mp4 -vf "showinfo" -f null -
Эта команда выводит на консоль информацию о каждом кадре. Ключевые кадры можно определить по строкам, содержащим ключевое слово “key_frame=1”.
Метод 3: Использование команды ffprobe:
FFprobe — это дополнительный инструмент для FFmpeg, который может извлекать информацию из мультимедийных потоков. Выполните следующую команду:
ffprobe -select_streams v -show_frames -print_format json input.mp4 | grep -C 1 "\"key_frame\":1"
Эта команда извлекает информацию о кадре в формате JSON и фильтрует кадры с помощью «key_frame»:1 с помощью grep.
Метод 4. Использование кодировщика libx264:
FFmpeg позволяет нам кодировать видео с использованием различных кодеков. Указав кодировщик libx264 и интервал низких ключевых кадров, мы можем заставить ключевые кадры появляться часто. Выполните следующую команду:
ffmpeg -i input.mp4 -c:v libx264 -x264opts keyint=10:min-keyint=10 -f null -
Эта команда устанавливает интервал ключевых кадров равным 10 кадрам. Вывод отбрасывается с помощью -f null -.
Метод 5. Использование модуля подпроцесса Python:
Если вы предпочитаете использовать Python, вы можете использовать модуль подпроцесса для выполнения команд FFmpeg. Вот пример:
import subprocess
input_file = "input.mp4"
output_pattern = "output%d.jpg"
command = f"ffmpeg -i {input_file} -vf 'select=eq(pict_type,PICT_TYPE_I)' -vsync vfr {output_pattern}"
subprocess.call(command, shell=True)
Извлечение ключевых кадров из видео — важнейшая задача при обработке видео. FFmpeg предлагает несколько методов для выполнения этой задачи: от параметров командной строки до программных подходов с использованием Python. В этой статье мы рассмотрели пять различных методов с примерами кода. Не забудьте выбрать метод, который лучше всего соответствует вашим требованиям, и интегрировать его в свой конвейер обработки видео.