
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 itsoffset
valor deve ser igual à duração da introdução (em segundos). Não deve haver necessidade de transcodificar as legendas.