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

Use FFMPEG to blend streaming overlay onto second stream

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

监视器覆盖

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

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

实际产量

预期输出

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

使用

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

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

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

只需将 nullsrc=1024x576[1:v] 更改为 pad=1024:576:0:0:black[1:v]。黑色背景消失,剩下的还在。

来源:很久以前的一部纪录片的回忆,讲述了广播中使用的技巧,讲述了如何在胶片上叠加黑底白字使黑色透明。希望这里有电影爱好者可以更好地解释它