Concatenar vários vídeos com diferentes contagens de fluxos de áudio e legendas usando ffmpeg

Concatenar vários vídeos com diferentes contagens de fluxos de áudio e legendas usando ffmpeg

Quero adicionar um logotipo de marca d’água a um vídeo (enviado pelos usuários) e concatená-lo com uma introdução. O vídeo resultante deve ter o mesmo formato do vídeo de entrada.

O problema começa quando o vídeo enviado possui mais de um fluxo de áudio e inclui legendas.

Resolvi o problema de áudio usando algo como este comando.

ffmpeg -i intro.mp4 -i input.mkv -i logo.png -filter_complex "[0:v] scale=480:270,setdar=16/9 [a]; [1:v] scale=480:270,setdar=16/9 [b]; [2:0] scale=480:270 [wm]; [b][wm] overlay[ov]; [a][0:a:0][0:a:0] [ov][1:a:0][1:a:1] concat=n=2:v=1:a=2 [vd] [a0] [a1]" -map "[vd]" -map "[a0]" -map "[a1]" -y output.mkv

Mas a saída não contém legendas.

Alguém pode ajudar?

Responder1

Usar

ffmpeg -i intro.mp4 -i input.mkv -itsoffset 4.5 -i input.mkv -i logo.png
  -filter_complex
     "[0:v] scale=480:270,setdar=16/9 [a];
      [1:v] scale=480:270,setdar=16/9 [b];
      [3:0] scale=480:270 [wm];
      [b][wm] overlay[ov];
      [a][0:a:0][0:a:0] [ov][1:a:0][1:a:1] concat=n=2:v=1:a=2 [vd] [a0] [a1]"
  -map "[vd]" -map "[a0]" -map "[a1]" -map 2:s? -c:s copy -y output.mkv

Depois de especificar quaisquer instruções de mapa, somente os fluxos mapeados serão incluídos. Portanto, você deve mapear explicitamente qualquer fluxo de legenda. Como pode não haver, adicionei um final ?para indicar atribuição condicional.

Alimentei o vídeo de entrada duas vezes, porque os carimbos de data e hora da legenda estarão errados na saída, pois a introdução agora precede o vídeo. Um deslocamento de carimbo de data/hora é adicionado à segunda entrada e a legenda é mapeada a partir desse feed. O itsoffsetvalor deve ser igual à duração da introdução (em segundos). Não deve haver necessidade de transcodificar as legendas.

informação relacionada