Выводить миниатюры видео во время смены сцен с минимальной частотой 1 в секунду.

Выводить миниатюры видео во время смены сцен с минимальной частотой 1 в секунду.

У меня есть следующие требования к миниатюрам:

  1. Смена сцены должна отличаться от предыдущей не менее чем на 6%select=gt(scene\,0.06)
  2. соотношение сторон сохраняется при ширине 1280 пикселейscale='min(1280\, iw):-1'
  3. минимум 1 секунда между каждой миниатюрой-r 1
  4. имена файлов представляют собой смещение по времени миниатюры-vsync 0 -frame_pts 1

В настоящее время это передается в команду следующим образом:

ffmpeg -copyts -i file.mp4 -vf "select=gt(scene\,0.06),scale='min(1280\, iw):-1'" -r 1 -vsync 0 -frame_pts 1 снимок.1280.%04d.png -f null

Однако в выводе я получаю ошибки:

Использование -vsync 0 и -r может привести к созданию недействительных выходных файлов.

[image2 @ 0x7f804500a000] Приложение предоставило недопустимый, немонотонно увеличивающийся dts для мультиплексора в потоке 0: 463 >= 463

Стоит ли беспокоиться об этом в команде или лучше их игнорировать?

решение1

Если вам нужно как минимум 1 секунду между снимками, то вам следует изменить выражение select для этого. Все, -rчто делает эта команда, это влияет на имя файла, которое формируется из-за frame_pts. (Вы можете игнорировать предупреждение "недопустимые файлы"; оно предназначено для другого сценария).

ffmpeg -copyts -i file.mp4 -vf "select=eq(n\,0)+gt(scene\,0.06)*gte(t-prev_selected_t\,1),scale='min(1280\, iw):-1'" -r 1 -vsync 0 -frame_pts 1 snapshot.1280.%04d.png

Связанный контент