FFMPEG:在ffmpeg中通过ZeroMQ控制overlay

FFMPEG: Controlling overlay through ZeroMQ in ffmpeg

对于一个项目,我们需要手动控制视频流顶部的叠加层(静态图像)。我们得出结论,我们将需要 ZeroMQ 来控制它,并且我们已经成功地通过 ZeroMQ 控制了一个音频过滤器。

为实现这一目标,我们考虑了两种选择:

  1. 使用滤色器控制前景(图像)透明度
  2. “移动”视频流前面的叠加图像,并将其从视频中移除canvas

不幸的是,我们已经设法让两者都能正常工作,但没有与 ZeroMQ 结合使用。

示例:

ffmpeg -loglevel verbose    \
              -i $STREAM     \
              -i overlay.png  \
          -bsf:a aac_adtstoasc \
        -threads 12             \
             -vf "zmq=bind_address=tcp\\://127.0.0.1\\:1235, [0:v][1:v]overlay=25:25" \
            -c:a aac              \
             -af "azmq=bind_address=tcp\\://127.0.0.1\\:1235,volume=1" \
            -c:v h264 output

以上示例产生以下错误:

Error reinitializing filters!
Failed to inject frame into filter network: Invalid argument

非常感谢有关如何实现这一点的建议!

可行的解决方案:


更新
设法让它工作:

ffmpeg -loglevel verbose    \
              -i $STREAM     \
              -i overlay.png  \
          -bsf:a aac_adtstoasc \
        -threads 12             \
 -filter_complex "[0:v][1:v]overlay=x=0:y=0,zmq=bind_address=tcp\\://127.0.0.1\\:1236" \
            -c:a aac              \
             -af "azmq=bind_address=tcp\\://127.0.0.1\\:1235,volume=1" \
            -c:v libx264

我可以通过 ZeroMQ 发送消息来删除(控制)覆盖:

Parsed_overlay_0 x 1280