使用 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]
。黑色背景消失,剩下的还在。
来源:很久以前的一部纪录片的回忆,讲述了广播中使用的技巧,讲述了如何在胶片上叠加黑底白字使黑色透明。希望这里有电影爱好者可以更好地解释它
我正在尝试构建一种可以叠加到直播中的监控形式。
监视器覆盖
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]
。黑色背景消失,剩下的还在。
来源:很久以前的一部纪录片的回忆,讲述了广播中使用的技巧,讲述了如何在胶片上叠加黑底白字使黑色透明。希望这里有电影爱好者可以更好地解释它