基于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显示如下

image-20210927100315106.png

表明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/

image-20210927100746303.png
image-20210927100800301.png

参考资料

https://blog.csdn.net/li_xue_zhao/article/details/107317509

你可能感兴趣的:(基于ffmpeg的多路视屏图像合并)