随着技术的不断发展,越来越多的场景需要同时监控多个角度,而这就需要将多路摄像头的画面实时合成为一个流。根据摄像头的数量的不同,我们可以采用不同的方式来合成实时摄像头流。最近遇到一个问题,就是怎么在去是应用过滤参数定义合成摄像头画面,下面的几种命令适合初学者参考总结规律
在此之前需要先开启rtsp简单服务器,我是使用docker拉取镜像去启动容器,以下是启动该服务的参考链接。
https://github.com/aler9/mediamtx
拉取镜像并启动容器命令
docker run --rm -it -e MTX_PROTOCOLS=tcp -p 8554:8554 -p 1935:1935 -p 8888:8888 -p 8889:8889
四个摄像头:
当有四个摄像头时,我们可以采用叠加的方式来将四个画面合成为一个画面。下面是合成的命令:
```
ffmpeg -rtsp_transport tcp -i rtsp://your_username:your_password@your_ip_address1:554/h264/ch1/main/av_stream -rtsp_transport tcp -i rtsp://your_username:your_password@your_ip_address2:554/h264/ch1/main/av_stream -rtsp_transport tcp -i rtsp://your_username:your_password@your_ip_address3:554/h264/ch1/main/av_stream -rtsp_transport tcp -i rtsp://your_username:your_password@your_ip_address4:554/h264/ch1/main/av_stream -filter_complex [0:v]pad=iw*2:ih*2[a];[a][1:v]overlay=w[b];[b][2:v]overlay=0:h[c];[c][3:v]overlay=w:h -vcodec h264 -f rtsp -r 25 -an rtsp://your_new_ip_address:your_new_port/test
```
请将 `your_username`、`your_password`、`your_ip_address1`、`your_ip_address2`、`your_ip_address3`、`your_ip_address4`、`your_new_ip_address`、`your_new_port` 分别替换为您的摄像头的真实信息和新的 IP 地址以及端口号。需要注意的是,如果你将输入流直接推送到你的新地址,请确保有相应的网络状况和硬件设施来处理大量的实时视频流。
```
两个摄像头:
当只有两个摄像头时,我们可以采用分屏的方式将两个画面合成为一个画面。下面是合成的命令:
```
ffmpeg -rtsp_transport tcp -i rtsp://your_username:your_password@your_ip_address1:554/h264/ch1/main/av_stream -rtsp_transport tcp -i rtsp://your_username:your_password@your_ip_address2:554/h264/ch1/main/av_stream -filter_complex [0:v]pad=iw*2:ih[a];[a][1:v]overlay=w -vcodec h264 -f rtsp -r 25 -an rtsp://your_new_ip_address:your_new_port/test
```
六个摄像头:
当有六个摄像头时,我们可以采用分屏以及缩放的方式来将六个画面合成为一个画面。下面是合成的命令:
```
ffmpeg -rtsp_transport tcp -i rtsp://your_username:your_password@your_ip_address1:554/h264/ch1/main/av_stream -rtsp_transport tcp -i rtsp://your_username:your_password@your_ip_address2:554/h264/ch1/main/av_stream -rtsp_transport tcp -i rtsp://your_username:your_password@your_ip_address3:554/h264/ch1/main/av_stream -rtsp_transport tcp -i rtsp://your_username:your_password@your_ip_address4:554/h264/ch1/main/av_stream -rtsp_transport tcp -i rtsp://your_username:your_password@your_ip_address5:554/h264/ch1/main/av_stream -rtsp_transport tcp -i rtsp://your_username:your_password@your_ip_address6:554/h264/ch1/main/av_stream -filter_complex [1:v]scale=iw/2:-1[v2];[2:v]scale=iw/2:-1[v3];[3:v]scale=iw/2:-1[v4];[4:v]scale=iw/2:-1[v5];[5:v]scale=iw/2:-1[v6];[0:v]pad=iw*2:ih*2[a];[a][v2]overlay=2*w[b];[b][v3]overlay=0:2*h[c];[c][v4]overlay=w:2*h[d];[d][v5]overlay=2*w:h[e];[e][v6]overlay=2*w:2*h -vcodec h264 -f rtsp -r 25 -an rtsp://your_new_ip_address:your_new_port/test
```
以上是三种不同场景下的实时摄像头流合成方式,通过ffmpeg的过滤参数进行配置合成画面的布局。