У меня есть 601 последовательное изображение, они меняют размер и соотношение сторон в кадре 36 и 485, создавая в наборе изображения трех разных размеров.
Я хочу создать таймлапс, удалить первые 200 кадров и показать только оставшиеся 401, но если я использую фильтр обрезки на входе, фильтр обрабатывает каждую из трех секций кадров разного размера как отдельные «потоки» со своими собственный сброс PTS, все из которых запускаются в одно и то же время. Это означает, что окончательный вывод приведенной ниже команды имеет длину всего 249 кадров вместо 401.
Как я могу это исправить, чтобы получить только последний 401 кадр?
ffmpeg \
-framerate 60 \
-i "./%07d.jpg" \
-filter_complex "
[0]scale=1000:1000[in1];
[in1]trim=start_frame=200[in2];
[in2]setpts=PTS-STARTPTS
" \
-r 60 -y trimmed.webm
Фильтры типа setpts=N/(60*TB)
или setpts=PTS-SETPTS
после scale
, пытающиеся исправить время кадра, похоже, тоже ничего не меняют.
Если я удалю обрезку и сброс точек, таймлапс отлично экспортирует все 601. Если я удалю сброс точек и оставлю обрезку, он экспортирует 449 кадров, начиная с кадра 0.
Нет никаких ошибок или предупреждений, связанных с проблемой, за исключением состояний отладки, входные данные достигают EOF в кадре 449. (по какой-то причине это 485-36, две длины раздела)
Я понимаю, что предварительная обработка размеров изображения — это способ исправить это, но я хотел бы понять, почему это невозможно с помощью одной команды.
версия 6.0-6ubuntu1, но бывает и на 6.1 и 5.1.
Даже если я сведу его к минимуму, он все равно неправильно экспортирует 450 кадров:
ffmpeg -i "./%07d.jpg" -filter setpts=PTS-STARTPTS -y tpad.webm
Когда видеопоток меняет параметры в середине потока, ffmpeg перенастраивает граф фильтров, поскольку лишь немногие фильтры могут надежно адаптироваться к изменению. Поэтому вам нужно сообщить ffmpeg, чтобы он не перенастраивал граф фильтров. Вам все равно придется масштабировать изображения до одинакового размера.
Кроме того, если вы хотите пропустить начальный набор изображений, просто начните импорт изображений с желаемой начальной точки.
ffmpeg \
-reinit_filter 0 \
-start_number 200 \
-framerate 60 \
-i "./%07d.jpg" \
-vf "scale=1000:1000" \
-y trimmed.webm