FFMPEG - Crie um vídeo de apresentação de slides a partir de imagens em um diretório, classificado em ordem alfabética


2

Vejo esta página sobre como fazer isso com imagens numericamente. Mas eu tenho um diretório de imagens que se parece com isso, por exemplo:

ADAM SANDLER.jpg
JOHN DOE.jpg
SAM SMITH.jpg

Quero criar uma apresentação de slides de vídeo de todas as imagens neste diretório, classificadas em ordem alfabética.

Há alguma maneira de fazer isso?

EDITAR

No final, estou tentando criar um vídeo vertical para postar no Instagram. Essas fotos são retratos, portanto, será necessário um vídeo "vertical". Parece que o FFMPEG está tendo problemas com isso, pelo menos a reprodução do vídeo no Quicktime não parece estar funcionando. Ele precisa ser um vídeo de 15 segundos e existem 25 imagens.

Este é o comando que estou executando e só aparece preto quando o abro no Quicktime. Quando abro no VLC, ele está sendo reproduzido, mas mostra apenas os primeiros dois quadros.

ffmpeg -r 1 -i img%03d.jpg -c:v libx264 -pix_fmt yuv420p out.mp4

Respostas:


2

Você pode usar o desmembrador concat.

Primeiro, prepare um arquivo de texto contendo a lista de todas as imagens na ordem desejada. No Windows, em um prompt de comando, você pode executar este comando, na pasta:

dir *.jpg /b /on > list.txt

Agora prefixe cada linha com file 'e sufixo com ', para que cada linha se pareça com

file 'ADAM SANDLER.jpg'

convém duplicar a última linha devido a um erro no filtro fps.

Agora, se todas as suas imagens tiverem o mesmo tamanho, execute

ffmpeg -f concat -r 1/2 -i list.txt -crf 20 -vf fps=8,format=yuv420p video.mp4

Caso contrário, e assumindo 1920x1080como tamanho de vídeo de saída, execute

ffmpeg -f concat -r 1/2 -i list.txt -vf "scale=iw*min(1920/iw\,1080/ih):ih*min(1920/iw\,1080/ih), pad=1920:1080:(1920-iw*min(1920/iw\,1080/ih))/2:(1080-ih*min(1920/iw\,1080/ih))/2,fps=8,format=yuv420p" -crf 20 video.mp4

A -r 1/2é a taxa de quadros de entrada e determina quanto tempo cada imagem permanece, neste caso, 2 segundos. Eu configurei a taxa de quadros de saída em 8porque alguns jogadores podem não reproduzir a saída. O CRF controla a qualidade. Valores mais baixos produzem melhores resultados, mas arquivos maiores.


Para o Q editado :

Usar

ffmpeg -framerate 25/15 -i img%03d.jpg -c:v libx264 -vf "scale=iw*min(1080/iw\,1080/ih):ih*min(1080/iw\,1080/ih), pad=1080:1080:(1080-iw*min(1080/iw\,1080/ih))/2:(1080-ih*min(1080/iw\,1080/ih))/2,fps=30000/1001,format=yuv420p" out.mp4

Atualizei minha pergunta para ser mais específico sobre o que estou tentando fazer. Eu tenho os arquivos em ordem alfanumérica neste momento.
Corey

0

Você pode criar um gif animado usando o comando "convert" nos utilitários do ImageMagick:

convert -delay 500 -loop 0 *.jpg myimage.gif

Isso concatenará arquivos jpg, mostrando cada meio segundo cada, em um loop permanente.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.