Создать видео из нескольких JPEG-файлов

Создать видео из нескольких JPEG-файлов

У меня есть камера видеонаблюдения, которая загружает изображения 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 1IIRC) привела к одному изображению для всего видео! Очевидно, что я не понимаю различные аргументы в команде 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

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