Você está com falta de shortest
. Como você está lidando com múltiplos fluxos, você precisa dizer quando todo o processo precisa ser concluído.
-shortest (output)
Finish encoding when the shortest input stream ends.
Sua imagem de marca d'água apresenta um loop infinito com -loop
. Então você precisa especificar quando terminar este loop. A seguir funcionará para você.
ffmpeg -i input_video -loop 1 -i input_image -c:a copy -filter_complex "
[1:v]fade=in:st=0:d=0.5,fade=out:st=30:d=0.5[watermark];
[0:v][watermark]overlay=(main_w-overlay_w)/2:main_h-overlay_h:shortest=1" out_video
Conforme você usa filter_complex
, é necessário usar shortest
com o filtro. Além disso, você pode precisar redimensionar a imagem e usar scale
para filtrá-la.
UPDATE
Para dimensionar o vídeo, você pode usar o filtro scale
e vinculá-lo à marca d'água desbotada que você usou. A seguir, o vídeo de entrada será dimensionado para 1280x720 e você poderá encontrar mais opções de dimensionamento aqui .
ffmpeg -i input_video -loop 1 -i input_image -c:a copy -filter_complex "
[0:v]scale=1280:720[scaled];
[1:v]fade=in:st=0:d=0.5,fade=out:st=30:d=0.5[watermark];
[scaled][watermark]overlay=(main_w-overlay_w)/2:main_h-overlay_h:shortest=1" out_video
Espero que isso ajude!