Como iniciar o vídeo de marca d'água quando ele aparecer?

2

Este é o meu cenário:

Eu quero adicionar um vídeo de marca d'água em outro vídeo, mas quero que a marca d'água comece quando for exibida.

Na verdade, sou capaz de exibir um vídeo de marca d'água e reproduzi-lo desde o começo. Se eu tentar adicionar a marca d'água em um intervalo específico, ela aparecerá corretamente no período especificado, mas a marca d'água será interrompida porque começa quando o vídeo principal é reproduzido.

Este é o comando que estou usando:

ffmpeg -y -i big_buck_bunny.mp4 -i alpha.mov -filter_complex "[1:v] fade=out:st=30:d=1:alpha=1 [ov]; [0:v][ov] overlay=10:main_h-overlay_h-10:enable=between(t\,3\,5) [v]" -map "[v]" -map 0:a -c:v libx264 -c:a copy out.mp4

Qualquer ajuda seria apreciada. Obrigado

    
por stuzzo 08.08.2014 / 18:33

1 resposta

5

Use -itsoffset antes da entrada sobreposta com a mesma quantidade de segundos que você está usando no início do filtro (3 no seu caso)

Isso está mantendo o filtro fade out que você tinha, mas esse filtro não produz resultados visíveis:

ffmpeg -y -i big_buck_bunny.mp4 -itsoffset 3 -i alpha.mov -filter_complex "[1:v] fade=out:st=30:d=1:alpha=1 [ov]; [0:v][ov] overlay=10:main_h-overlay_h-10:enable=between(t\,3\,5) [v]" -map "[v]" -map 0:a -c:v libx264 -c:a copy out.mp4

Isto é com 3 entradas (2 sobreposições e uma base) e sem esse outro filtro:

ffmpeg -y -i basevideo.mp4 -itsoffset 3 -i overlay1.mp4 -itsoffset 8 -i overlay2.mp4 -filter_complex "[0:v][1:v] overlay=0:0:enable=between(t\,3\,5) [oa]; [oa][2:v] overlay=0:0:enable=between(t\,8\,10) [ob]"  -map "[ob]" -map 0:a -c:v libx264 -c:a copy output.mp4

Para continuar adicionando vídeos sobrepostos:

  • adicione -itsoffset **X** -i newinput.mp4 após o último arquivo de entrada.
    • Ordem de arquivos de entrada é importante
    • **X** é o tempo que o vídeo de sobreposição irá iniciar reprodução (isto não mostrará a sobreposição, apenas inicie internamente a reprodução do vídeo). Ajuste como necessário (provavelmente correspondendo ao valor de **X** na próxima etapa)
  • insira outro [**previous_output**][**Y**:v] overlay=0:0:enable=between(t\,**X**\,**Z**) [**new_output**] após o último bloco.
    • **Y** é o arquivo de entrada Yth, iniciando em 0 (no meu exemplo, basevideo é 0, overlay1 é 1, overlay2 é 2, etc).
    • **X** é o tempo que a sobreposição mostrará no vídeo de saída.
    • **Z** é o tempo que a sobreposição irá ocultar no vídeo de saída.
    • O tempo é contado para o início da exibição em diante, não o tamanho do vídeo sobreposto, portanto, faça seus cálculos de duração: se o vídeo de sobreposição tiver 2 segundos, **Z** será **X** + 2.
  • Ajuste o -map "[**XX**] no final do comando para corresponder ao **new_output** , ou você estará escrevendo para arquivar o passo anterior!

O áudio é capturado diretamente do basevideo . Os áudios das outras fontes são ignorados e não serão reproduzidos.

    
por 08.08.2014 / 19:42