Я пытаюсь извлечь ключевые кадры из видеоклипа. Я попробовал следующую команду, но она извлекает все кадры.
ffmpeg -vf select="eq(pict_type\,PICT_TYPE_I)" -i 2.flv -vsync 2 -s 73x41 -r 30 -f image2 thumbnails-%%02d.jpeg
Я пытаюсь извлечь ключевые кадры из видеоклипа. Я попробовал следующую команду, но она извлекает все кадры.
ffmpeg -vf select="eq(pict_type\,PICT_TYPE_I)" -i 2.flv -vsync 2 -s 73x41 -r 30 -f image2 thumbnails-%%02d.jpeg
Ответы:
Вы можете сделать это проще , используя -skip_frame
без необходимости select
видеофильтра:
ffmpeg -skip_frame nokey -i 2.flv -vsync 0 -r 30 -f image2 thumbnails-%02d.jpeg
-threads 1
, по сравнению со значением по умолчанию, -threads auto
это делает cropdetect
фильтр фильтра ( ffmpeg -threads 1 -skip_frame nokey -i input.mkv -filter:v select='not(mod(n\,20))',cropdetect -an -f null /dev/null
) в 2 раза быстрее в моей системе (от 60 до 30 с)!
-threads 1
является то, что в противном случае последовательность выходных ключевых кадров может быть выведена не по порядку. Если у вас есть какой -то особый способ решения этой проблемы, вы можете сохранить многопоточность. Кроме того, кажется, что все еще возможно получить неупорядоченные ключевые кадры, даже при использовании -threads 1
, но теперь в этом случае все такие случаи, кажется, сопровождаются / отмечены ошибкой декодера h264 illegal short term buffer state detected
.
Пример с использованием select
и scale
фильтры:
ffmpeg -i 2.flv -vf "select=eq(pict_type\,I),scale=73x41" \
-vsync vfr -qscale:v 2 thumbnails-%02d.jpeg
Несколько советов:
Фильтры не должны быть перед -i
опцией, так как они являются опцией вывода. Я не знаю, откуда именно вы получили команду, но PICT_TYPE_I
не существует - она должна быть I
.
В scale
фильтре вы можете заменить 73
или 41
сделать так, чтобы фильтр автоматически вычислял ширину или высоту, чтобы сохранить соотношение сторон: например, scale=73:-1
или scale=-1:41
. Это предотвращает растяжение или сдавливание, которые могут возникнуть в результате «принудительного» масштабирования.
Качество вывода можно контролировать с помощью -qscale:v
(или псевдонима -q:v
). Эффективный диапазон - линейная шкала от 2 до 31, а более низкое значение - более высокое качество.
То, что ваш ffmpeg
фильтр позволяет, прежде чем входные данные говорят мне, что это может быть устаревшим. Загрузите последнюю статическую сборку для вашей операционной системы или соберите ее самостоятельно в соответствии с руководствами по компиляции, если вышеприведенное не работает.
ffmpeg -i 2.flv -vf "select=eq(pict_type\,I)" -vsync vfr frame-%02d.png
если это ошибки :
Опцию vf (установить видеофильтры) нельзя применить к URL-адресу ввода 1508.mp4 - вы пытаетесь применить опцию ввода к выходному файлу или наоборот. Переместите эту опцию перед файлом, которому она принадлежит. Ошибка анализа параметров для входного файла 1508.mp4. Ошибка открытия входных файлов: неверный аргумент
ты можешь сделать это:
ffmpeg -i 263.mp4 -vf select=eq(pict_type\,PICT_TYPE_I) -vsync 2 -s 480x320 -r 24 -f image2 thumbnails-%05d.jpeg
== --------------------------------------------
«-I» Параметры заранее