Concatir vários vídeos com diferentes contagens de fluxo de áudio e legendas usando ffmpeg

0

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

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

Eu resolvi o problema de áudio por algo como esse comando.

ffmpeg -i intro.mp4 -i input.mkv -i logo.png -filter_complex "[0: v] escala = 480: 270, setdar = 16/9 [a]; [1: v] escala = 480 : 270, setdar = 16/9 [b]; [2: 0] escala = 480: 270 [wm]; [b] [wm] sobreposição [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 dose de saída não contém subtítulo.

alguém pode ajudar?

    
por Kian 22.03.2017 / 02:30

1 resposta

0

Use

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 as instruções do mapa, apenas esses fluxos mapeados serão incluídos. Portanto, você precisa mapear explicitamente qualquer fluxo de legendas. Como pode não haver um, adicionei um ? à direita para indicar a atribuição condicional.

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

    
por 22.03.2017 / 05:58

Tags