У меня есть следующие требования к миниатюрам:
- Смена сцены должна отличаться от предыдущей не менее чем на 6%
select=gt(scene\,0.06)
- соотношение сторон сохраняется при ширине 1280 пикселей
scale='min(1280\, iw):-1'
- минимум 1 секунда между каждой миниатюрой
-r 1
- имена файлов представляют собой смещение по времени миниатюры
-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