ffmpeg将视频流合并为1x4拼贴画

时间:2015-02-28 15:20:46

标签: ffmpeg

任何人都可以帮助了解如何正确-filter_complex ffmpeg中的表达式连接拼贴1x4中的4个RTSP流? 复杂性是有一个输入,里面有4个视频流。 ffprobe输出:

Input #0, rtsp, from 'rtsp://MyStream':
  Metadata:
    title           : h264.sdp
  Duration: N/A, start: 0.024944, bitrate: N/A
Stream #0:0: Video: h264 (Baseline), yuv420p, 640x480, 27.92 tbr, 90k tbn, 180k tbc
Stream #0:1: Video: h264 (Baseline), yuv420p, 640x480, 27.92 tbr, 90k tbn, 180k tbc
Stream #0:2: Video: h264 (Baseline), yuv420p, 640x480, 27.92 tbr, 90k tbn, 180k tbc
Stream #0:3: Video: h264 (Baseline), yuv420p, 640x480, 27.92 tbr, 90k tbn, 180k tbc

1 个答案:

答案 0 :(得分:3)

一排视频

您可以使用hstack(或vstack)视频过滤器:

overlay example
在此示例中,每种颜色代表一个单独的视频输入或流。

一个包含四个视频流的输入(如问题所示)

ffmpeg -i input \
-filter_complex "[0:v:0][0:v:1][0:v:2][0:v:3]hstack=inputs=4[v]" \
-map "[v]" output.mp4

四个输入,每个视频流

ffmpeg -i input0 -i input1 -i input2 -i input3 \
-filter_complex "[0:v][1:v][2:v][3:v]hstack=inputs=4[v]" \
-map "[v]" output.mp4

与上述相同但具有组合音频

使用amerge过滤器:

ffmpeg -i input0 -i input1 -i input2 -i input3 -filter_complex \
"[0:v][1:v][2:v][3:v]hstack=inputs=4:shortest=1[v]; \
 [0:a][1:a][2:a][3:a]amerge=inputs=4[a]" \
-map "[v]" -map "[a]" -shortest output.mp4

使用填充或边框

您可以使用pad过滤器在每个视频之间添加边框。此示例将在每个视频之间添加10个像素填充:

overlay with padding

ffmpeg -i input0 -i input1 -i input2 -i input3 -filter_complex \
"[0:v]pad=iw+10[v0]; \
 [1:v]pad=iw+10[v1]; \
 [2:v]pad=iw+10[v2]; \
 [0v][1v][2v][3:v]hstack=inputs=4[v]" \
-map "[v]" output.mp4