ffmpeg 将视频流组合成 1x4 拼贴画
ffmpeg combine video streams into 1x4 collage
任何人都可以帮助理解如何使正确的-filter_complex
ffmpeg
中的表达式将 4 个 RTSP 流加入 1x4 行拼贴画中?
复杂的是,有一个内部有 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
一行视频
您可以使用 hstack
(or vstack
) 视频过滤器:
在此示例中,每种颜色代表一个单独的视频输入或流。
一个输入有四个视频流(如问题所示)
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 个像素的填充:
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
任何人都可以帮助理解如何使正确的-filter_complex
ffmpeg
中的表达式将 4 个 RTSP 流加入 1x4 行拼贴画中?
复杂的是,有一个内部有 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
一行视频
您可以使用 hstack
(or vstack
) 视频过滤器:
在此示例中,每种颜色代表一个单独的视频输入或流。
一个输入有四个视频流(如问题所示)
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 个像素的填充:
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