ffmpeg流媒体视频合并(画中画)效果并推流

通过ffmpeg工具将多个视频流进行处理,实现画中画效果(效果如下图),并推流到服务器。

Ffmpeg -rtsp_transport tcp -i “[视频源1]” -rtsp_transport tcp -i “[视频源2]” -filter_complex “[1]scale=iw/2:ih/2[pip];[0][pip]overlay=main_w-overlay_w-10:main_h-overlay_h-10” -f flv -r 25 -s 1920*1080 -an rtmp://localhost:1935/live/room

我的两个视频源是摄像头源,如果是本地文件,可以直接这样写。

Ffmpeg -i a.mp4 -i b.mp4 -filter_complex “[1]scale=iw/2:ih/2[pip];[0][pip]overlay=main_w-overlay_w-10:main_h-overlay_h-10” -f flv -r 25 -s 1920*1080 -an rtmp://localhost:1935/live/room

效果图

推流命令详解

-rtsp_transport tcp -i “rtsp://admin:[email protected]/h264/1/main/av_stream”

-rtsp_transport 传输类型:tcp
-i 视频源:“rtsp://admin:[email protected]/h264/1/main/av_stream”
rtsp_transport tcp -i “rtsp://admin:[email protected]/h264/1/main/av_stream”

第二个视频源,参数意义同上

filter_complex “[1]scale=iw/2:ih/2[pip];[0][pip]overlay=main_w-overlay_w-10:main_h-overlay_h-10”

此部分为实现画中画命令(流合并)

filter_complex 说明后边双引号中为filter(过滤器)相关操作。

[0] 表示第一个源(-i)
[1] 表示第二个源(-i)
以此类推
[1]scale=iw/2:ih/2[pip]
缩放视频源[1]为源宽(iw)二分之一,高(ih)二分之一。得到的结果为[pip]
[0][pip]overlay=main_w-overlay_w-10:main_h-overlay_h-10
将处理后的视频源[1],也就是[pip],覆盖到视频源[0]上。
main_w 为 [0] 宽度
main_h 为 [0] 高度
overlay_w 为 [pip] 宽度
overlay_h 为 [pip] 高度

 

main_w-overlay_w-10
main_h-overlay_h-10

这个就是在计算上图 A 点坐标,该坐标确定了[pip]在[0]中的位置。

posted @   阿风小子  阅读(593)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示