Я пытаюсь извлечь ключевые кадры из видеоклипа. Я попробовал следующую команду, но она извлекает все кадры.
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
, но теперь в этом случае все такие случаи, кажется, сопровождаются / отмечены ошибкой декодера h264illegal short term buffer state detected
.Пример с использованием
select
иscale
фильтры:Несколько советов:
Фильтры не должны быть перед
-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. Ошибка открытия входных файлов: неверный аргумент
ты можешь сделать это:
== --------------------------------------------
«-I» Параметры заранее
источник