
У меня есть камера видеонаблюдения, которая загружает изображения JPEG (.jpg) на FTP-сервер, когда обнаруживает движение. Кажется, мы получаем довольно много изображений, поэтому я хотел бы сделать из них видео, чтобы облегчить просмотр.
Я сделал несколько поисков в Google, но ничего не выдает того, что я ожидаю увидеть. В папке, которую я использую, более 2000 изображений, которые называются AyyMMddhhmmssff.jpg. Если мне нужно переименовать, я могу это сделать, поскольку я уже обнаружил, что это нужно для работы FFMPEG.
Мне бы хотелось изображение в секунду, или, может быть, 2 в секунду, чтобы изображения было легко просматривать при воспроизведении видео. Да, я знаю, что это приведет к видео продолжительностью 20/40 минут+!
Я доволен решением Windows, macOS или Ubuntu! Я бы предпочел Windows (так как там находится FTP-сервер).
ImageMagick
convert *.jpg video.mpg
Это звучало здорово, красиво и просто. Однако я пробовал на своем Mac (установленном через brew) и Ubuntu, и оба приводили к остановке производительности соответствующей системы и через 20 минут все еще не закончили. Мне пришлось перезагрузить Mac, так как я ничего не мог сделать!
FFMPEG
ffmpeg -y -r 6 -f image2 -s 1920x1080 -i <path>\%06d.jpg -vcodec libx264 -pix_fmt yuv420p <path>/video.mp4
Я не эксперт в использовании FFMPEG, но я использовал его для нескольких задач и обнаружил, что это отличная утилита, которую нужно иметь под рукой. Вышеуказанная команда действительно создает видео, но изображения отображаются слишком быстро, что сводит на нет суть видео. Я пробовал настраивать значения и могу добиться лучшего результата, но это не совсем то, что мне нужно. Одна попытка (установка -r 1
IIRC) привела к одному изображению для всего видео! Очевидно, что я не понимаю различные аргументы в команде FFMPEG, хотя я и заглядывал в руководство!
решение1
Если вы переименуете изображения так, чтобы они были пронумерованы последовательно, то вы можете использовать
ffmpeg -y -framerate 1 -i <path>\%06d.jpg -r 5 -c:v libx264 -pix_fmt yuv420p <path>/video.mp4
Последовательно пронумерованные, например 000001.jpg
, , 000002.jpg
, 000003.jpg
... Обратите внимание, что в каждом имени ровно 6 символов, что соответствует %06d
переданным ffmpeg требованиям.
Если вы не хотите переименовывать, то создайте текстовый файл вида,
file first.jpg
file second.jpg
file third.jpg
...
file last.jpg
а потом
ffmpeg -f concat -r 1 -i list.txt -r 5 -c:v libx264 -pix_fmt yuv420p <path>/video.mp4
решение2
вместо -r 5 измените его на -framerate 5 Это даст видео с 5 кадрами в секунду. Вы можете настроить это число в соответствии со своими потребностями, 1 будет показывать каждое изображение в течение 1 секунды, 10 будет циклически проходить быстрее..
ffmpeg -y -framerate 1 -i <path>\%06d.jpg -framerate 5 -c:v libx264 -pix_fmt yuv420p <path>/video.mp4
or
ffmpeg -f concat -r 1 -i list.txt -framerate 5 -c:v libx264 -pix_fmt yuv420p <path>/video.mp4