![使用 ffmpeg 连接具有不同音频和字幕流的多个视频](https://linux22.com/image/1525544/%E4%BD%BF%E7%94%A8%20ffmpeg%20%E8%BF%9E%E6%8E%A5%E5%85%B7%E6%9C%89%E4%B8%8D%E5%90%8C%E9%9F%B3%E9%A2%91%E5%92%8C%E5%AD%97%E5%B9%95%E6%B5%81%E7%9A%84%E5%A4%9A%E4%B8%AA%E8%A7%86%E9%A2%91.png)
我想在视频(由用户上传)中添加水印徽标并将其与简介连接起来。生成的视频必须与输入视频具有相同的格式。
当上传的视频有多个音频流并且包含字幕时,就会出现问题。
我使用类似这样的命令解决了音频问题。
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
值应等于简介的持续时间(以秒为单位)。不需要对字幕进行转码。