使用 ffmpeg 连接具有不同音频和字幕流的多个视频

使用 ffmpeg 连接具有不同音频和字幕流的多个视频

我想在视频(由用户上传)中添加水印徽标并将其与简介连接起来。生成的视频必须与输入视频具有相同的格式。

当上传的视频有多个音频流并且包含字幕时,就会出现问题。

我使用类似这样的命令解决了音频问题。

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

但输出不包含字幕。

有人可以帮忙吗?

答案1

使用

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

一旦指定了任何映射语句,就只包含那些映射的流。因此,您必须明确映射任何字幕流。由于可能没有字幕流,我添加了尾随?以指示条件分配。

我已经两次输入了输入视频,因为字幕时间戳在输出中会出错,因为简介现在在视频之前。时间戳偏移量被添加到第二个输入,字幕从该输入映射。该itsoffset值应等于简介的持续时间(以秒为单位)。不需要对字幕进行转码。

相关内容