ffmpeg合并多路rtmp流
最近在看有关连麦的相关技术,其中有一种实现方式是将两路的视频流合并成一段。最简单的方法是使用ffmpeg的overlay参数,将一个视频流覆盖到另一个上面。
语法
overlay[=x[:y]]
参数可选,默认是0。距离画面左上角的x、y的距离。
举例
将视频流1rtmp://inputstream1
和视频流2rtmp://inputstream2
合并后输出视频流rtmp://outputstream
。
注意这里是将视频流2覆盖在视频流1上。所以保证视频流2的大小不要比视频流1大。或者在使用ffmpeg合并的时候指定流画面的大小。
添加视频在左上角:
1 | ffmpeg -i "rtmp://inputstream1" -i "rtmp://inputstream2" -filter_complex overlay -f flv "rtmp://outputstream" |
添加视频在右上角:
1 | ffmpeg -i "rtmp://inputstream1" -i "rtmp://inputstream2" -filter_complex overlay=W-w -f flv "rtmp://outputstream" |
添加视频在左下角:
1 | ffmpeg -i "rtmp://inputstream1" -i "rtmp://inputstream2" -filter_complex overlay=0:H-h -f flv "rtmp://outputstream" |
添加视频在右下角:
1 | ffmpeg -i "rtmp://inputstream1" -i "rtmp://inputstream2" -filter_complex overlay=W-w:H-h -f flv "rtmp://outputstream" |
距离画面左上角x、y:
1 | ffmpeg -i "rtmp://inputstream1" -i "rtmp://inputstream2" -filter_complex overlay=x:y -f flv "rtmp://outputstream" |
如图蓝色代表视频流1,红色代表视频流2,这里的x、y代表视频流2的左上角距离视频流1的左上角的距离。
更多的内容请查看ffmpeg的官方文档