想要拼接四个以下摄像头可以参考一下链接
ffmpeg实现视频流的多路拼接_ffmpeg组装流-CSDN博客
想要拼接四个以上摄像头就需要使用自定义分辨率了
另外,也要注意拉取的rtsp流要使用子码流,因为拼接画面过多的话,会出现因为主码流比特率过高出现录制画面卡顿甚至消耗过多cpu资源,以海康威视举例:
//sub表示子码流如果是main则表示主码流
rtsp://${username}:${password}@${ip}:554/h264/ch1/sub/av_stream
以下是五个摄像头视频流拼接指令
ffmpeg -rtsp_transport tcp -i rtsp://${username}:${password}@${ip}:554/h264/ch1/sub/av_stream -rtsp_transport tcp -i rtsp://${username}:${password}@${ip}:554/h264/ch1/sub/av_stream -rtsp_transport tcp -i rtsp://${username}:${password}@${ip}:554/h264/ch1/sub/av_stream -rtsp_transport tcp -i rtsp://${username}:${password}@${ip}:554/h264/ch1/sub/av_stream -rtsp_transport tcp -i rtsp://${username}:${password}@${ip}:554/h264/ch1/sub/av_stream -filter_complex [0:v]scale=1440:720[p];[p]pad=1920:1080:x=230:y=0[bg];[1:v]scale=480:360[1s];[2:v]scale=480:360[2s];[3:v]scale=480:360[3s];[4:v]scale=480:360[4s];[bg][1s]overlay=0:720[bg1];[bg1][2s]overlay=480:720[bg2];[bg2][3s]overlay=1440:720[bg3];[bg3][4s]overlay=960:720 -c:v h264 -f mp4 E:/FiveGY11.mp4
原理是使用ffmpeg的过滤参数-filter_complex对输入源进行拼接堆叠,然后输出为MP4文件
以下为效果图
如果只想拉取视频流不拉取音频流可以在-i前面加上-an
下面是六个摄像头画面和七个摄像头画面的过滤参数,参照上面的指令自行添加rtsp流即可
六个摄像头画面过滤参数
[0:v]scale=1440:720[p];[p]pad=1920:1080:x=0:y=0[bg];[1:v]scale=480:360[1s];[2:v]scale=480:360[2s];[3:v]scale=480:360[3s];[4:v]scale=480:360[4s];[5:v]scale=480:360[5s];[bg][1s]overlay=1440:180[bg1];[bg1][2s]overlay=0:720[bg2];[bg2][3s]overlay=1440:720[bg3];[bg3][4s]overlay=960:720[bg4];[bg4][5s]overlay=480:720
七个摄像头画面过滤参数
[0:v]scale=1440:720[p];[p]pad=1920:1080:x=0:y=0[bg];[1:v]scale=480:360[1s];[2:v]scale=480:360[2s];[3:v]scale=480:360[3s];[4:v]scale=480:360[4s];[5:v]scale=480:360[5s];[6:v]scale=480:360[6s];[bg][1s]overlay=1440:0[bg1];[bg1][2s]overlay=1440:360[bg2];[bg2][3s]overlay=1440:720[bg3];[bg3][4s]overlay=960:720[bg4];[bg4][5s]overlay=480:720[bg5];[bg5][6s]overlay=0:720
最后,我的分享到这儿就结束了,后续有问题可评论区讨论。如果以上内容帮到你,请给我点个赞!谢谢。