首页 > 解决方案 > OpenCV 帧到 FFMPEG

问题描述

我有一个消费序列化 OpenCV 帧的 Kafka 消费者。在消费者中,我试图将其写入输出文件以用于流式传输。我的最终目标是将这些帧流式传输到 Web 浏览器或任何其他客户端。

但是当我写视频输出时,由于损坏或其他原因,它没有播放。

#ffmpeg
ffmpeg = 'ffmpeg'
dimension = '{}x{}'.format(1280, 622)
f_format = 'bgr24' # remember OpenCV uses bgr format
fps = str(fps)
output_file = 'videos/encoded/out.mp4'
    
command = [ffmpeg,
'-y',
'-f', 'rawvideo',
'-vcodec','rawvideo',
'-s', dimension,
'-pix_fmt', 'bgr24',
'-r', fps,
'-i', '-',
'-an',
'-vcodec', 'mpeg4',
'-b:v', '5000k',
output_file ]

proc = sp.Popen(command, stdin=sp.PIPE, stderr=sp.PIPE)

try:
    while True:
        msg = consumer.poll(1.0)
        if msg is None:
            continue
        if msg.error():
            print("Consumer error: {}".format(msg.error()))
            continue
        nparr = np.frombuffer(msg.value(), np.uint8)
        img = cv2.imdecode(nparr, cv2.IMREAD_COLOR)

        if img is not None:
            proc.stdin.write(img.tostring())
except KeyboardInterrupt:
    print("Detected Keyboard Interrupt. Quitting...")
    pass

finally:
    consumer.close()
proc.stdin.close()
proc.stderr.close()
proc.wait()

这是我尝试过的代码。这会写入输出视频,但无法播放。当我使用 OpenCV 中的 VideoWriter 时,它工作正常。但问题是我没有办法在消费者while循环中释放。我能做些什么来解决这个问题?

标签: pythonopencvffmpeg

解决方案


推荐阅读