基于ffmpeg的多路视屏图像合并
1.推流、拉流解释
1.1推流:
将直播内容推送至服务器的过程,媒体上传至转发服务器中。
1.2 拉流:
为服务器已有直播内容,用指定地址进行拉取的过程,媒体 流下载至播放客户端中。
2.转码h264
将1.MP4文件转码为h264格式ffmpeg -i 1.mp4 -vcodec h264 out.mp4
3.视频合并
3.1 将1、2、3、4.mp4文件四幅合并为一个画面
ffmpeg -i 1.mp4 -i 2.mp4 -i 3.mp4 -i 4.mp4 -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" out.mp4
3.2 关键参数列表为:-filter_complex
# [0:v] [1:v]代表第一路视频,第二路视频等
#意思是合并后的视频的画布分布,宽度以第一路视频[0:v]的宽、高为基准(iw宽、ih高),[a]给第一路视频起了个别名
#表示画布为第一路视频宽的两倍,高也是两倍
#所以在视频合并时,应该选用分辨率大小一样的合并
[0:v]pad=iw*2:ih*2[a];
# [a][1:v]表示第二路[1:v]时紧紧挨着[a],左上角顶点位置处于w:0,0可以省略
[a][1:v]overlay=w[b];
# 同理为第三路视频挨着[b],左上角坐标为0:h
[b][2:v]overlay=0:h[c];
# 同理为第四路视频挨着[c],左上角坐标为w:h
[c][3:v]overlay=w:h
3.3 消除声音
-an
ffmpeg -i input.mp4 -an output.mp4
可以单独使用亦可和视频合并加入。
3.3 实例
3.3.1 合并4路视频
[0:v]pad=iw*2:ih*2[a];
[a][1:v]overlay=w:0[b];
[b][2:v]overlay=0:h[c];
[c][3:v]overlay=w:h
image-20210927090314728.png
3.3.2 合并三路视频
[0:v]pad=iw*3:ih*1[a];
[a][1:v]overlay=w:0[b];
[b][2:v]overlay=2*w:0
image-20210927090615465.png
3.3.3 资料
https://blog.csdn.net/crazty/article/details/107671992?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link
3.3.4 音视频合并
ffmpeg -i out.mp4 -i 11.mp3 -c copy oo.mp4
4.流转发服务器
搭建简单RTSP流媒体服务器。
rtsp-simple-server_v0.17.3_windows_amd64
逻辑上是使用ffmpeg
往流转发服务器rtsp-simple-server
推流,然后再用vlc
拉流
4.1 流转发服务器
双击打开rtsp-simple-server.exe
显示如下
表明rtsp协议再端口8554处监听,所以ffmpeg需要配置到8554端口进行推流
整个推流+转发的配置
# ffmpeg 将1.MP4转发到转发服务器上
ffmpeg -re -stream_loop -1 -i 1.mp4 -f rtsp rtsp://127.0.0.1:8554/aa
# rtsp-simple-server
无
4.2 vlc配置
rtsp://127.0.0.1:8554/
参考资料
https://blog.csdn.net/li_xue_zhao/article/details/107317509