Я знаю, как извлечь набор кадров как JPG файлы из видео с помощью FFmpeg, если вы знаете, номера кадров (ниже)Как извлечь ключевые кадры, наиболее близкие к данным номерам кадров от H264 видео с FFmpeg
Extracting Frames: [40, 59, 73, 110]
/usr/bin/ffmpeg -y -hide_banner -nostats -loglevel error -i /home/pi/movie.mp4 -vf select='eq(n\,40)+eq(n\,59)+eq(n\,73)+eq(n\,110)',scale=640:-1 -vsync 0 /tmp/%04d.jpg
Это будет извлекать кадры [40, 59, 73, 110] в виде файлов /tmp/0000.jpg, /tmp/0001.jpg и т.д.
Я также знаю, как извлечь все ключевые кадры для данного период времени:
ffmpeg -ss <start_time> -i video.mp4 -t <duration> -q:v 2 -vf select="eq(pict_type\,PICT_TYPE_I)" -vsync 0 frame%03d.jpg
Это позволит получить все I-кадры от start_time
до start_time+duration
.
Но то, что я хотел бы сделать, это предоставить список номеров кадров и ffmpeg извлечь самые близкие ключевые кадры для каждого номера кадра. Есть ли способ сделать это с помощью ffmpeg или мне нужно написать свою собственную программу ontop libavcodec, чтобы сделать это?
Все ключевые кадры в заданном радиусе целевого кадра или только ближайшие? До и после? – Mulvya
Просто ближайший, поэтому, если ключевые кадры находятся в [0, 5, 10, 15, 20], и я хочу кадров [3, 6, 12], он вернется. Фактически это зависит от алгоритма. Он может выбрать кадр 5 как самый близкий для 3, кадр 10 как ближайший слева до 6, а затем 15, как ближайший слева до 12.Идеальный сценарий (путем суммарного расстояния до ключевого кадра по всем элементам) будет возвращать кадры [0, 5, 10]. –