Вам необходимо установить еще один параметр -vsync
(установите его на 0 или 2), или мультиплексор получил неправильные кадры, потому что по умолчанию -vsync=1
Например, правильная команда
ffmpeg -i INPUT_FILE -vsync 0 -vf thumbnail,scale=300:200 -frames:v 20 -f image2 img-%04d.jpg
Что касается меня, то вместо фильтра миниатюр я использую селектор I-frame - он генерирует немного больше файлов, но он более точен для моих целей.Это пример с отметкой времени, и во-первых, мы должны узнать правильный fps из файла (это Mac OS X grep
диалект), чтобы установить значение r=
ffmpeg -i INPUT_FILE 2>&1 | grep -Po "[^\s]+\sfps"
Также вам нужно выбрать свой собственныйфайл шрифтов, я использую файлы Mac OS X
Теперь все готово (например, сохраните первые 20 I-кадров)
ffmpeg -i INPUT_FILE -someq -vsync 0 -vf \
drawtext="fontfile=/Library/Fonts/Courier\ New.ttf: \
timecode='00\:00\:00\:00':r=23.98: fontcolor=0xFFFFFFFF:fontsize=18:\
shadowcolor=0x000000EE:shadowx=1:shadowy=1",select='eq(pict_type\,I)'\
-vframes:v 20 -f image2 img-%04d.jpg
(странно, я получаю ошибку на \
с пробеламилиния, но все работает в одну строку)