使用ffmpeg开发混剪视频工具的时候遇到了下面的问题
尝试使用-filter_complex 复杂滤镜对视频进行拼接
ffmpeg -i 11.mp4 -i 22.mp4 -filter_complex 'concat=n=2:v=1' output.mp4
报错如下:
[Parsed_concat_0 @ 00000170685eee80] Input link in0:v0 parameters (size 576x956, SAR 1:1) do not match the corresponding output link in0:v0 parameters (720x1280, SAR 1:1)
原因是两个视频的分辨率不同,尝试通过scale命令修改分辨率后再合并:
ffmpeg -i 11.mp4 -i 22.mp4 -filter_complex '[1]scale=720:1280[v1];[0][v1]concat=n=2:v=1[v]' -map [v] output.mp4
依旧报错:
[Parsed_concat_1 @ 000001b7eb4de940] Input link in0:v0 parameters (size 720x1280, SAR 256:239) do not match the corresponding output link in0:v0 parameters (720x1280, SAR 1:1)
没看懂,但是发现这个是SAR不一致导致的,这查了一下个SAR 1:1是像素比,应该是用scale修改分辨率后像素比变了,于是考虑如果保持宽高比缩放,然后多余的部分用黑色像塑填充,于是修改命令:
ffmpeg -i 11.mp4 -i 22.mp4 -filter_complex '[1]scale=720:-1,pad=720:1280:(iw+ow)/2:0:black[v1];[0][v1]concat=n=2:v=1[v]' -map [v] output.mp4
运行之后成功合成视频。但是同时修改为1080*1920的分辨后又报错了:
ffmpeg -i 11.mp4 -i 22.mp4 -filter_complex '[0]scale=1080:-1,pad=1080:1920:(iw+ow)/2:(ih+oh)/2:black[v0];[1]scale=1080:-1,pad=1080:1920:(iw+ow)/2:(ih+oh)/2:black[v1];[v0][v1]concat=n=2:v=1[v]' -map [v] output.mp4
发现依然是像塑比不对了,于是经过一番查证,终于找到解决方法,只需要在缩放视频后架上setsar=1即可解决。
ffmpeg -i 11.mp4 -i 22.mp4 -filter_complex '[1]scale=720:1280,setsar=1[v1];[0][v1]concat=n=2:v=1[v]' -map [v] output.mp4