Eu estou tentando sobrepor um vídeo de entrada com muitas imagens, onde cada imagem deve ser mostrada por um curto período de tempo. Consegui isso usando um filtro complexo (o comando abaixo). O problema é que eu tenho muitas, muitas imagens (> 1000): -)
ffmpeg -y -i in.mp4
-i logo1.png
-i logo2.png
-i logo3.png
-filter_complex "
[0:v][1:v] overlay=10:10:enable='between(n,2,4)' [tmp];
[tmp][2:v] overlay=30:30:enable='between(n,6,8)' [tmp];
[tmp][3:v] overlay=50:50:enable='between(n,10,12)';
" out.mp4
O FFmpeg permite que um usuário passe esses dados através de um arquivo de texto?
As imagens são geradas na memória, então os canais também são bons (de fato preferidos).
(se isso não for possível, posso passar vídeo gerado em bruto no formato Bgra ?);
mas eu não preferiria isso porque a operação de mesclagem é mais cara + mais IO: tem que ser o mais rápido possível)
Editar:
Se eu usar a seguinte configuração, somente a última imagem enviada será sobreposta.
-i ski.mp4
-f image2pipe -vcodec png -i -
-filter_complex "[0:v][1:v] overlay=10:10:enable='between(n,2,3)' [tmp];
[tmp][1:v] overlay=30:30:enable='between(n,6,7)'"
-f mp4", "out.mp4"
Saídas do FFmpeg (parece que ele pula as imagens se elas tiverem tamanhos diferentes):
Input stream #1:0 frame changed from size:1417x665 fmt:rgba to size:1800x700 fmt:rgba
Input stream #1:0 frame changed from size:1800x700 fmt:rgba to size:550x371 fmt:rgba
Input stream #1:0 frame changed from size:550x371 fmt:rgba to size:256x256 fmt:rgba
Como posso instruir o FFmpeg que para o primeiro filtro usa a primeira imagem, a segunda segunda imagem no pipe, etc. ( as imagens têm tamanhos diferentes )?