代码之家  ›  专栏  ›  技术社区  ›  Casper Alant

FFMpeg ZeroMQ筛选器在短时间后停止工作

  •  2
  • Casper Alant  · 技术社区  · 8 年前

    我运行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
    

    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)
    

    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秒后启动它,它根本不会发送任何命令。

    如果你想亲自测试,只需确保测试。mkv和test2.mkv是一些超过1分钟的视频。

    2 回复  |  直到 8 年前
        1
  •  4
  •   Casper Alant    8 年前

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

    #!/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过滤器也会结束。

        2
  •  1
  •   halfer Jatin Pandey    8 年前

    使用 REQ/REP 确实是一个

    通往地狱的高速公路

    永远不要选择一种看似微不足道的虚假美 请求/代表 从不它可能也将陷入无法解决的相互僵局。问题不在于是否,而在于何时。

    如果/为什么使用FFMPEG,我没有找到任何明确的原因 REP 出于任何特殊原因/如果它可以开始使用任何其他更合适的原型作为 PAIR / PAIR PUSH/PULL