Modelo básico é
ffmpeg -y \
-loop 1 -t 1 -i a1.jpg \
-loop 1 -t 1 -i a2.jpg \
-loop 1 -t 4 -i a3.jpg \
-loop 1 -t 1 -i a4.png \
-loop 1 -i a5.png \
-i audio.mp3 \
-filter_complex "concat=n=5" -shortest \
-c:v libx264 -pix_fmt yuv420p -c:a aac video.mp4
A especificação t
para cada imagem define sua duração. O t
da última imagem deve ser omitido se você quiser que o vídeo dure até que o áudio termine.
Eu uso o filtro de concatenação para unir todas as entradas de vídeo. A boa prática é rotular quais entradas o filtro de concat será incluído, mas se não for especificado, o filtro capturará as primeiras N -i
entradas, em que N é o valor definido no filtro de concat. Todas as imagens devem ter a mesma resolução e proporção.
Seu comando determinado copia o áudio, mas o MP3, apesar de permitido, não é padrão no MP4, e alguns players, como o Quicktime, não reproduzem o arquivo, então eu mudei para o AAC.
Para imagens de tamanhos diferentes, altere o filter_complex para
"[0]scale=W:H:force_original_aspect_ratio=decrease,pad=W:H:(ow-iw)/2:(oh-ih)/2,setsar=1[i0];
[1]scale=W:H:force_original_aspect_ratio=decrease,pad=W:H:(ow-iw)/2:(oh-ih)/2,setsar=1[i1];
[2]scale=W:H:force_original_aspect_ratio=decrease,pad=W:H:(ow-iw)/2:(oh-ih)/2,setsar=1[i2];
[3]scale=W:H:force_original_aspect_ratio=decrease,pad=W:H:(ow-iw)/2:(oh-ih)/2,setsar=1[i3];
[4]scale=W:H:force_original_aspect_ratio=decrease,pad=W:H:(ow-iw)/2:(oh-ih)/2,setsar=1[i4];
[i0][i1][i2][i3][i4]concat=n=5"
W e H devem ser substituídos por valores numéricos de largura e altura do vídeo alvo.