Isso é possível, mas exigirá scripts adicionais por causa do número variável de imagens selecionadas e também devido à falta de uma opção de loop real para entradas de vídeo e áudio.
Esta resposta fornece alguns exemplos , mas você tem o requisito adicional de fazer um loop de fluxo de vídeo e áudio.
Aqui estão alguns exemplos que você pode adaptar e desenvolver. O script vai depender de você.
Exemplo 1
Este exemplo está assumindo que:
-
Todas as entradas de imagem têm o mesmo tamanho de quadro. Esse é um requisito, caso contrário, problemas de tempo podem ocorrer .
-
Todas as entradas de imagem são nomeadas
img001.jpg
,img002.jpg
,img003.jpg
, etc. Alternativamente, você pode usar um padrão glob conforme descrito no documentação do demuxer do arquivo de imagem .
ffmpeg -i video.mkv -i audio.mp3 -framerate 1/5 -i img%03.jpg -filter_complex \
"[0:v]setpts=PTS-STARTPTS[vid]; \
[vid][vid][vid]concat=n=3:v=1:a=0[bg]; \
[1:a][1:a][1:a]concat=n=3:v=0:a=1[a]; \
[2:v]drawbox=t=5:c=white[fg]; \
[bg][fg]overlay=(W-w)/2:(H-h)/2,format=yuv420p[v]" \
-map "[v]" -map "[a]" -shortest output.mp4
Exemplo 2
Outro método é listar explicitamente cada imagem como uma entrada separada. Isso pode permitir que você execute qualquer dimensionamento, se necessário, mas torna o comando ainda mais complexo:
ffmpeg -i video.mkv -i audio.mp3 -loop 1 -i hound.jpg -loop 1 -i crow.jpg \
-loop 1 -i donkey.png -filter_complex \
"[0:v]setpts=PTS-STARTPTS[vid]; \
[vid][vid][vid]concat=n=3:v=1:a=0[bg]; \
[1:a][1:a][1:a]concat=n=3:v=0:a=1[a]; \
[2:v]trim=duration=5,scale=640:360,drawbox=t=5:c=white[fg0]; \
[3:v]trim=duration=5,scale=640:360,drawbox=t=5:c=white[fg1]; \
[4:v]trim=duration=5,scale=640:360,drawbox=t=5:c=white[fg2]; \
[bg][fg0]overlay=(W-w)/2:(H-h)/2[ol0]; \
[ol0][fg1]overlay=(W-w)/2:(H-h)/2[ol1]; \
[ol1][fg2]overlay=(W-w)/2:(H-h)/2,format=yuv420p[v]" \
-map "[v]" -map "[a]" -shortest output.mp4
Existem várias respostas no Superusuário que fornecem exemplos de escalonamento mais complexos. Este exemplo é simples, mas pode resultar em imagens de saída comprimidas ou esticadas se as imagens de entrada variarem na proporção.
O que você precisa para determinar
Para ambos os métodos, com base em quantas imagens o usuário selecionar e a duração do vídeo e do áudio, você terá que determinar quantos segmentos são necessários para o concat
filtrar para fornecer um loop apropriado.
Você pode ter alguns problemas. O demuxer de imagens e concat
são algumas vezes meticulosos.