Python-Opencv在内存缓冲区上写入x264视频

时间:2016-11-07 17:29:07

标签: python opencv video buffer x264

我在内存缓冲区上写x264视频(或单帧)时遇到问题。在opencv for images中,imencode和imdecode执行此任务。但我希望保存x264视频帧以降低内存使用率并在互联网上发送。我能够使用jpeg,但jpeg尺寸大于x264视频帧,质量更差。我搜索但我找不到如何在缓冲区上写视频帧。

以下是在网络摄像头上拍摄帧的示例代码

        import numpy as np
        import cv2


        cap = cv2.VideoCapture(0)
        cap.set(3,320)
        cap.set(4,240)
        cap.set(5,30)
        # Define the codec and create VideoWriter object
        fourcc = cv2.VideoWriter_fourcc(*'x264')
        out = cv2.VideoWriter('.....sample.avi',fourcc, 30.0, (320,240))

        while(cap.isOpened()):
            ret, frame = cap.read()
            if ret==True:
                cv2.imshow('frame',frame)
                out.write(frame) #I want to write memory not disk
                if cv2.waitKey(1) & 0xFF == ord('q'):
                    break
            else:
                break

        # Release everything if job is finished
        cap.release()
        out.release()
        cv2.destroyAllWindows()

1 个答案:

答案 0 :(得分:2)

不幸的是,没有办法处理 cv2.VideoWriter ,因为在 out.release()之前无法访问已编码的视频帧。

我找到的项目方式是从 D:\ your_directory \ opencv \ sources \ modules \ highgui \ src 实施cap_ffmpeg_impl.hpp并在该库中发送您捕获的帧。您将通过UDP或TCP / IP发送编码帧,并使用相同的库解码它们到达的位置。还要记住,您需要编译右ffmpeg版本才能使用它。