FFMPEG:在ffmpeg中通过ZeroMQ控制overlay
FFMPEG: Controlling overlay through ZeroMQ in ffmpeg
对于一个项目,我们需要手动控制视频流顶部的叠加层(静态图像)。我们得出结论,我们将需要 ZeroMQ 来控制它,并且我们已经成功地通过 ZeroMQ 控制了一个音频过滤器。
为实现这一目标,我们考虑了两种选择:
- 使用滤色器控制前景(图像)透明度
- “移动”视频流前面的叠加图像,并将其从视频中移除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
对于一个项目,我们需要手动控制视频流顶部的叠加层(静态图像)。我们得出结论,我们将需要 ZeroMQ 来控制它,并且我们已经成功地通过 ZeroMQ 控制了一个音频过滤器。
为实现这一目标,我们考虑了两种选择:
- 使用滤色器控制前景(图像)透明度
- “移动”视频流前面的叠加图像,并将其从视频中移除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