sobreposição de vídeo FFmpeg

1

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 )?

    
por dajuric 05.03.2016 / 17:35

1 resposta

2

Se você puder inserir suas imagens como uma sequência e especificar seus overlay x , y e qualificadores de tempo como uma expressão, isso poderá ser feito como um comando gerenciável.

Você pode inserir as imagens via pipe usando o -f image2pipe -vcodec png como uma opção de entrada.

Além disso, o FFmpeg pode referenciar um filterchain de um script

-filter_complex_script filename (global)

This option is similar to -filter_complex, the only difference is that its argument is the name of the file from which a complex filtergraph description is to be read.

    
por 05.03.2016 / 19:27