Я использую ffmpeg для извлечения ключевых кадров из видео. Это команда:
ffmpeg -i test2.mp4 -vf select='eq(pict_type\,I)' -vsync 2 -s 160x90 -f image2 thumbnails-%02d.jpeg
Как я могу получить индекс каждого ключевого кадра, извлеченного в видео? Например, для первого I-кадра индекс будет равен 0, для второго - 24 и т. Д.
Ответы:
Как упомянуто @dstob, вы можете использовать,
ffprobe
чтобы получить I-кадры и связанную с ними информацию.ffprobe
поставляется с некоторыми статическими сборками на странице загрузки и может быть также собран из исходного кода.Предполагается, что вы работаете в Linux / Unix:
Извлечь кадры и типы кадров
Команда
grep
фильтруетI
в них строки и подсчитывает их индекс (используя-n
опцию). Командаcut
выбирает только первый столбец выходных данных (индекс). Обратите внимание, что этот индекс основан на 1, а не на 0.Переименовать выходные файлы на основе индекса
Вы можете фактически передать эти индексы в список:
Затем составьте список всех миниатюр:
Затем вставьте эти два вместе:
Список теперь содержит имя миниатюры и индекс. Выполните переименование на основе этого:
Выше будет переименовать
thumbnail-01.jpeg
вthumbnail-0.jpeg
. Обратите внимание, что в выходном индексе нет нуля. Если вы хотите добавить к нулю, скажем, 5 цифр, используйтеprintf
:В Windows вы бы сделали то же самое,
ffprobe
но по-разному проанализировали результат. Не знаю, как выполнить переименование там, хотя.источник
[FRAME]
строка и строка.[/FRAME]
pict_type
-of csv
опцию для, в кадре будет только одна строкаffprobe
. Однако вы описываете формат вывода по умолчанию.Если вы хотите использовать FFMPEG, как указано ранее, вы можете перечислить весь или частичный список, а также создать jpg со следующими:
Удалить
-t 15
без ограничения по времени или изменить в соответствии с костюмом. Удалить-s 160x90 -f image2 thumbnail-%02d.jpeg
или изменить в соответствии с уменьшением миниатюр.источник