ffmpeg - 使用 FFMPEG 将流覆盖混合到第二个流上

标签 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

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

最佳答案

利用

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 中通常低于标准。因此,您可以在同一命令中执行此操作。

关于ffmpeg - 使用 FFMPEG 将流覆盖混合到第二个流上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45979457/

相关文章:

bash - 在 BASH 脚本中连接视频文件后报告错误的视频时长

php - 如何从 swf 游戏创建缩略图?

c# - FFMPEG - windows - MJPEG 流 - 转换为 MP4 并重新流式传输 - C# - 新手

javascript - CSS 覆盖菜单在 Firefox 中不起作用

ffmpeg - 两个几乎相同的 ffmpeg 命令,一个有效,另一个卡住

Nginx Rtmp 和 FFMpeg |是否可以为 ffmpeg 设置变量?

flash - 最好的 Flash 音频/视频 + 交互服务器?

video-streaming - 如何在 kurento 媒体服务器中进行 rtmp 流式传输?

ios - iOS后处理-将时间戳叠加到视频并导出

javascript - 具有多个叠加层和图像按钮的 Flowplayer