python-3.x - FFMpeg ZeroMQ 过滤器不久后停止工作

标签 python-3.x ffmpeg zeromq

我按如下方式运行 FFMpeg:

#!/bin/bash
fc="[1]scale=iw/2:ih/2 [pip]; [pip] zmq=bind_address=tcp\\\://127.0.0.1\\\:1235,[0]overlay=x=0:y=0"
ffmpeg -v verbose -re -y -i test.mkv -i test2.mkv -filter_complex "$fc" -f mpegts -codec:v libx264 -preset ultrafast resultzmq.mp4

然后我启动一个 Python 3 应用程序将 zmq 命令发送到 FFMpeg:

import zmq
import time
import sys
from  multiprocessing import Process

context = zmq.Context()
port = "1235"
print("Connecting to server with port {}".format(port))
socket = context.socket(zmq.REQ)
socket.connect("tcp://localhost:{}".format(port))
for request in range (20):
    print("Sending request ", request, "...")
    socket.send_string("Parsed_overlay_2 x 200")
    message = socket.recv()
    print("Received reply ", request, "[", message, "]")
    time.sleep (1)

当我从 Ffmpeg 得到这个信息时,它运行得很好,直到大约 40 秒(它停止获取命令):

frame=  918 fps= 24 q=19.0 size=   12192kB time=00:00:38.82 bitrate=2572.6kbits
frame=  931 fps= 24 q=19.0 size=   12402kB time=00:00:39.30 bitrate=2585.1kbits
[Parsed_zmq_1 @ 0x56185e089220] Processing command #8 target:Parsed_overlay_2 command:x arg:200
[Parsed_zmq_1 @ 0x56185e089220] Sending command reply for command #8:
0 Success
frame=  938 fps= 24 q=19.0 size=   12516kB time=00:00:39.82 bitrate=2574.1kbits/frame=  952 fps= 24 q=19.0 size=   12752kB time=00:00:40.33 bitrate=2590.0kbits/[Parsed_zmq_1 @ 0x56185e089220] Processing command #9 target:Parsed_overlay_2 command:x arg:200
[Parsed_zmq_1 @ 0x56185e089220] Sending command reply for command #9:
0 Success
frame=  963 fps= 24 q=19.0 size=   12932kB time=00:00:40.81 bitrate=2595.6kbits
frame=  976 fps= 24 q=19.0 size=   13121kB time=00:00:41.31 bitrate=2601.4kbits
frame=  992 fps= 24 q=19.0 size=   13434kB time=00:00:41.84 bitrate=2629.9kbits
frame= 1002 fps= 24 q=18.0 size=   13582kB time=00:00:42.34 bitrate=2627.2kbits

这是来自 Python 3 客户端的:

Sending request  8 ...
Received reply  8 [ b'0 Success' ]
Sending request  9 ...
Received reply  9 [ b'0 Success' ]
Sending request  10 ...

无论我何时启动 Python 客户端,断开连接总是同时发生。如果我在 40 秒后启动它,它根本不会发送任何命令。

在我的实际应用程序中,同样的事情发生,但大约 60 秒。

我尝试设置一个简单的 Python 服务器/客户端,但没有出现问题。所以我认为问题一定与 FFMpeg 及其 zmq 插件有关?

如果您想自己测试一下,只需确保 test.mkv 和 test2.mkv 是一些长度超过 1 分钟的视频。

我非常感谢任何帮助!

最佳答案

在一天的大部分时间里漫无目的地更改代码后,我终于找到了解决方案:

#!/bin/bash
fc="[1]scale=iw/2:ih/2,[0]overlay=x=0:y=0,zmq=bind_address=tcp\\\://127.0.0.1\\\:1235 "
ffmpeg -v verbose -re -y -i test.mkv -i server_upgrade_2.mkv -filter_complex "$fc" -f mpegts -codec:v libx264 -preset ultrafast resultzmq.mp4

我的猜测是,即使当您尝试发出命令时(您可以向所有过滤器发出命令),zmq 过滤器的位置并不重要,但当 zmq 过滤器的输入结束时,zmq 过滤器也会结束。

关于python-3.x - FFMpeg ZeroMQ 过滤器不久后停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44821976/

相关文章:

azure - 将 FFMpeg 与 Asp .Net Core 和视频流一起使用

video - FFMPEG:更改过滤器可防止视频模糊

c# - libzmq.dll FileNotFoundException 异常

c++ - 在跨平台桌面/移动应用程序套件中使用 ZeroMQ 来解决架构问题

python - 如何计算python中组内两点之间的距离,对于许多后续点

python - 在 Python 中的 For 语句中为输入字段循环一个变量

python-3.x - Tensorflow 1.15/Keras 2.3.1 Model.train_on_batch() 返回的值多于输出/损失函数

python - 删除了 __pycache__ 和 __init__.py

c++ - 如何使用 x264 与 ffmpeg 进行编码?

java - jeromq:关闭上下文失败