使用FFMPEG将流叠加混合到第二个流上

时间:2017-08-31 10:39:51

标签: ffmpeg rtmp overlays

我正在尝试构建一种可以叠加到直播中的监控形式。

监控重叠

ffmpeg -i rtmp://localhost/pool/livestream -filter_complex \
  "nullsrc=1024x576[1:v]; \
  [0:a]showvolume=v=0:o=1:t=0:f=0.1,drawbox=x=ih-40:y=0:w=40:h=ih[volume]; \
  [1:v]drawtext=x=(main_w/2)-(text_w/2):y=text_h:fontsize=30:fontcolor=white:borderw=1:text='Stream Label',scale=-1:-1[label]; \
  [label][volume]overlay=x=main_w-40:y=0[output]" \
  -map "[output]" -f flv rtmp://localhost/pool/livestream_overlay

我想要完成的是将此流叠加到原始流上并推送到第三个RTMP端点,如下所示:

ffmpeg -i rtmp://localhost/pool/livestream -i rtmp://localhost/pool/livestream_overlay \
  -filter_complex "[0:v][1:v]overlay=shortest=1[output]" \
  -f flv rtmp://localhost/pool/livestream_monitor

虽然工作流程似乎正常,但叠加层没有混合(减去?)到原始视频上:

实际输出

Actual output

预期输出

Expected output

注意:为了简洁起见,已删除了编解码器选项。

2 个答案:

答案 0 :(得分:0)

使用

ffmpeg -i rtmp://localhost/pool/livestream -filter_complex \
"[0:a]showvolume=v=0:o=1:t=0:f=0.1,drawbox=x=iw-40:y=0:w=40:h=ih[volume]; \
 [0:v]drawtext=x=(W-tw)/2:y=th:fontsize=30:fontcolor=white:borderw=1:text='Stream Label'[label]; \
 [label][volume]overlay=x=W-40:y=0[output]" \
-map "[output]" -map 0:a -f flv rtmp://localhost/pool/livestream_monitor

通常的FLV编解码器都不支持alpha,所以在第二个命令中,你必须执行色度键控,这通常在ffmpeg中是低于此的。所以,你可以在同一个命令中完成它。

答案 1 :(得分:0)

所以在玩了一整天后,我偶然发现了答案。

只需将nullsrc=1024x576[1:v]更改为pad=1024:576:0:0:black[1:v]即可。黑色背景消失,其余的仍然存在。

来源:很久以前关于广播中使用的技巧的纪录片的记忆,谈论叠加在电影上的黑色背景上的白色文字如何使黑色透明。希望这里有一个可以更好地解释它的电影迷