Crie vídeos a partir de vários JPEGs

Crie vídeos a partir de vários JPEGs

Tenho uma câmera CCTV que carrega imagens JPEG (.jpg) para um servidor FTP quando detecta movimento. Parece que temos algumas imagens, então gostaria de transformá-las em um vídeo para facilitar a visualização.

Fiz várias pesquisas no Google, mas nada produz o que espero ver. A pasta que estou usando tem mais de 2.000 imagens chamadas AyyMMddhhmmssff.jpg. Se eu precisar renomear, posso fazer isso, pois já acho que preciso para que o FFMPEG funcione.

Gostaria de uma imagem por segundo, ou talvez 2 por segundo, para que as imagens sejam fáceis de visualizar durante a reprodução do vídeo. Sim, eu sei que isso resultará em um vídeo de 20/40min+!

Estou feliz com uma solução Windows, macOS ou Ubuntu! Minha preferência seria o Windows (já que é onde está o servidor FTP).

ImagemMagick

convert *.jpg video.mpg

Isso parecia ótimo, agradável e simples. No entanto, eu tentei no meu Mac (instalado via brew) e no Ubuntu e ambos interromperam o desempenho do sistema relativo e depois de 20 minutos, ainda não terminei. Tive que reiniciar o Mac porque não pude fazer nada!

FFMPEG

ffmpeg -y -r 6 -f image2 -s 1920x1080 -i <path>\%06d.jpg -vcodec libx264 -pix_fmt yuv420p <path>/video.mp4

Não sou especialista em usar FFMPEG, mas usei-o para diversas tarefas e descobri que é um ótimo utilitário para se ter por perto. O comando acima produz um vídeo, mas as imagens são exibidas muito rapidamente, removendo o ponto do vídeo. Tentei ajustar os valores e consegui melhorar, mas não é exatamente o que procuro. Uma tentativa (configuração -r 1do IIRC) resultou em uma única imagem para todo o vídeo! Está claro que não entendo os vários argumentos do comando FFMPEG, embora tenha consultado o manual!

Responder1

Se você renomear as imagens para serem numeradas consecutivamente, poderá usar

ffmpeg -y -framerate 1 -i <path>\%06d.jpg -r 5 -c:v libx264 -pix_fmt yuv420p <path>/video.mp4

Numerados consecutivamente, como em 000001.jpg, 000002.jpg, 000003.jpg... Observe que existem exatamente 6 caracteres em cada nome, o que satisfaz o %06dpassado para o ffmpeg.

Se você não quiser renomear, crie um arquivo de texto no formato,

file first.jpg
file second.jpg
file third.jpg
...
file last.jpg

e então

ffmpeg -f concat -r 1 -i list.txt -r 5 -c:v libx264 -pix_fmt yuv420p <path>/video.mp4

Responder2

em vez de -r 5, mude para -framerate 5 Isso produzirá um vídeo com 5 quadros por segundo. Você pode ajustar esse número para atender às suas necessidades, 1 mostraria cada imagem por 1 segundo, 10 percorreria mais rapidamente.

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

informação relacionada