
Quiero agregar un logotipo de marca de agua a un video (subido por los usuarios) y combinarlo con una introducción. El vídeo resultante debe tener el mismo formato que el vídeo de entrada.
El problema comienza cuando el vídeo subido tiene más de una secuencia de audio e incluye subtítulos.
Resolví el problema del audio 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
Pero el resultado no contiene subtítulos.
¿Alguien puede ayudar?
Respuesta1
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
Una vez que especifique cualquier declaración de mapa, solo se incluirán aquellas transmisiones mapeadas. Por lo tanto, debe asignar explícitamente cualquier secuencia de subtítulos. Como puede que no haya ninguno, agregué un final ?
para indicar una asignación condicional.
He introducido el vídeo de entrada dos veces, porque las marcas de tiempo de los subtítulos serán incorrectas en la salida, ya que la introducción ahora precede al vídeo. Se agrega un desplazamiento de marca de tiempo a la segunda entrada y el subtítulo se asigna desde esa fuente. El itsoffset
valor debe ser igual a la duración de la introducción (en segundos). No debería ser necesario transcodificar los subtítulos.