Я пытаюсь извлечь ключевые кадры из видеоклипа. Я попробовал следующую команду, но она извлекает все кадры.
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» Параметры заранее