0%

ffmpeg合并多路rtmp流

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的官方文档