对于一个项目,我们需要手动控制视频流顶部的叠加层(静态图像)。我们得出结论,我们将需要 ZeroMQ 来控制它,并且我们已经成功地通过 ZeroMQ 成功地控制了一个音频过滤器。
为了实现这一点,我们考虑了两种选择:
不幸的是,我们设法让两者都工作,但没有与 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)
非常感谢有关如何实现这一目标的建议!
更新
管理以使其正常工作:
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)