ffmpeg多个流画面合并

首先这个是两路视频流的合并

要实现将两个视频一左一右同时播放的效果,可以使用FFmpeg的hstack和vstack滤镜来实现。以下是一种常见的方法:

ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex "[0:v]scale=640:480[left];[1:v]scale=640:480[right];[left][right]hstack=inputs=2[v]" -map "[v]" -f flv rtmp://your-streaming-server.com/live/stream-key

这个命令将会从input1.mp4和input2.mp4两个输入文件中读取视频流,并将它们进行缩放和水平拼接,然后将结果推送到指定的RTMP服务器。(这个没有视频流显示,就是没有视频信息)

优化后:

ffmpeg  -i input.mp4 -i input.mp4 -filter_complex "[0:v]scale=640:360[v0];[1:v]scale=640:360[v1];[v0][v1]hstack=2[out]" -map [out] -c:v libx264 -preset veryfast -tune zerolatency -f flv rtmp://your-streaming-server.com/live/stream-key

解释:
-map [out]用于指定输出的音频流,-c:v libx264用于指定视频编码器为libx264,-preset veryfast用于指定编码速度为veryfast,-tune zerolatency用于指定编码器的tune参数为zerolatency。

实现ffmpeg视频流的多个拼接

要实现五格拼接,你可以使用FFmpeg的滤镜功能来实现。首先,你需要将五个视频文件准备好,这五个视频文件将会被拼接在一起。然后,你可以使用FFmpeg的concat协议来将这五个视频文件拼接在一起。

ffmpeg -i video1.mp4 -i video2.mp4 -i video3.mp4 -i video4.mp4 -i video5.mp4 -filter_complex "[0:v][1:v][2:v][3:v][4:v]xstack=inputs=5:layout=0_0|w0_0|0_h0|w0_h0|w0+w1_h0[v]" -map "[out]" output.mp4

解释:
-filter_complex参数用于指定滤镜复杂图形,xstack滤镜用于将输入的视频流进行拼接。inputs=5表示有五个输入视频,layout参数用于指定拼接的布局,0_0|w0_0|0_h0|w0_h0|w0+w1_h0表示五个视频的位置,-map "[out]"用于指定输出的视频流。

layout=0_0|w0_0|w0+w1_0|0_h1|w0_h1[out] :指定了视频流在输出画面中的布局。具体解释如下:   
0_0 :第一个输入视频流的位置是在左上角。 
w0_0 :第二个输入视频流的位置是在第一个视频流的右边。
0_h0 :第三个输入视频流的位置是在第一个视频流的下边。
w0_h0: 第四个输入视频流的位置是在第二个视频流的下边。 
w0+w1_h0 : 第五个输入视频流的位置是在第四个视频流的右边。

如图排布:
在这里插入图片描述

优化:(上面推上去以后,最后一个空白格在右上角,下面要将空白格放到右下角)

ffmpeg -i video1.mp4 -i video2.mp4 -i video3.mp4 -i video4.mp4 -i video5.mp4 -filter_complex 
"[0:v][1:v][2:v][3:v][4:v]xstack=inputs=5:layout=0_0|w0_0|w0+w1_0|0_h1|w0_h1[out]" -map [out] -c:v libx264 -preset veryfast -tune zerolatency -f flv  rtmp://your-streaming-server.com/live/stream-key

解释:

xstack=inputs=5:layout=0_0|w0_0|w0+w1_0|0_h1|w0_h1[out]
这样第三个视频流就放到第二个右边了。

如图排布:
在这里插入图片描述

最最最后优化版本

ffmpeg -i video1.mp4 -i video2.mp4 -i video3.mp4 -i video4.mp4 -i video5.mp4 -filter_complex "[0:v]scale=640:400[v0];[1:v]scale=640:400[v1];[2:v]scale=640:400[v2];[3:v]scale=640:400[v3];[4:v]scale=640:400[v4];color=c=black:s=640x400[bg];[v0][v1][v2][v3][v4][bg]xstack=inputs=6:layout=0_0|w0_0|w0+w1_0|0_h1|w0_h1|w0+w1_h1[out]" -map "[out]" -c:v libx264 -preset veryfast -tune zerolatency -f flv rtmp://your-streaming-server.com/live/stream-key

节省了CPU的消耗和空白格颜色的更改,并调整视频流的比例大小。

color过滤器的参数使用了具体的数值,例如c=black表示黑色,s=640x400表示大小为640x400像素。然后,将这个黑色背景与之前的五个视频流一起传递给xstack过滤器,以生成最终的拼接视频。

猜你喜欢

转载自blog.csdn.net/lijunlin0329/article/details/131590015