Есть IP камера, которая определяет в видеопотоке людей, транспорт, или любой движущийся объект. Камера выдаёт в xml координаты объекта (координаты прямоугольника, который обрисовывает объект). Задача делать снапшот с потока камеры, на полученном снапшоте рисовать рамку по координатам объекта, ужимать полученный .jpg с 4к до 1080p и сохранять на локальном диске. (Далее всё это отправляется в мессенжер).
Сейчас я это делаю в NodeRED с помощью готовых нод, там и рамку можно нарисовать, и надпись наложить, и ресайзнуть. Но процесс занимает 15-20 сек (Raspberry 3). Перетащил всё это на Jetson Nano, процесс стал занимать 12 сек. Заметил, что все процессы идут в десятки раз быстрее, если использовать ffmpeg. Например ресайз через него занимает 0,12 сек, через ноду NodeRED - 6 сек.
Но не могу никак понять, как рисовать рамку или хотя бы линии в ffmpeg. Нашёл на просторах интернета код:
ffmpeg -i in.avi -vf "color=red@0.5:50x50 [c]; [in][c] overlay=10:10" out.avi
перерисовал его в
ffmpeg -i 01.jpg -vf "color=red@0.5:50x50 [c]; [in][c] overlay=10:10" out.jpg
и он рисует полупрозрачный квадрат, но выкидывает кучу ошибок. Также нигде не смог найти значение параметров [c]; [in][c]. Документацию смотрел, ничего не понял.
Как можно нарисовать на изображении простую линию?
Ругается: The specified filename '/media/77772.jpg' does not contain an image sequence pattern or a pattern is invalid. Use a pattern such as %03d for an image sequence or use the -update option (with -frames:v 1 if needed) to write a single image.
Как указать, что обрабатываться будет только один кадр?
Серёга, а, ну вот же русским английским языком прям пишут, что да как:
The specified filename '/media/777003.jpg' does not contain an image sequence pattern or a pattern is invalid.
Use a pattern such as %03d for an image sequence or use the -update option (with -frames:v 1 if needed) to write a single image.
Предлагают прям два варианта решения: либо %03 в имени выходного файла, чтобы нагенерило серию картинкок 000..999, либо -update добавить, чтобы перезаписывало один и тот же файл, и имеет смысл добавить -frames:v 1, чтобы сгенерило 1 кадр и остановилось.
-update <0, 1>
Если установлено значение 1, имя файла всегда будет интерпретироваться как просто имя файла, а не шаблон, и соответствующий файл будет постоянно перезаписываться новыми изображениями. Значение по умолчанию - 0.
Также могу порекомендовать добавить это: -q:v 1 -qmin 1