FFMPEG:通过 ffmpeg 中的 ZeroMQ 控制覆盖

Mic*_*hel 2 ffmpeg zeromq

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

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

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

不幸的是,我们设法让两者都工作,但没有与 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
Run Code Online (Sandbox Code Playgroud)

上面的例子产生以下错误:

Error reinitializing filters!
Failed to inject frame into filter network: Invalid argument
Run Code Online (Sandbox Code Playgroud)

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

Mic*_*hel 5

工作解决方案:


更新
管理以使其正常工作:

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
Run Code Online (Sandbox Code Playgroud)

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

Parsed_overlay_0 x 1280
Run Code Online (Sandbox Code Playgroud)