Python 使用fourcc编解码器h264和opencv中的h265从帧中保存视频

Python 使用fourcc编解码器h264和opencv中的h265从帧中保存视频,python,opencv,video,h.264,openh264,Python,Opencv,Video,H.264,Openh264,我正在使用h264编解码器将实时流中的帧保存到视频中。我用python中的openCV(版本3.4和4.4)尝试了这一点,但我无法保存它。我可以在XVID和许多其他编解码器中保存视频,但在h264和h265中我没有成功 我正在Python中使用windows opencv 4.4 我的示例代码如下 cap = cv2.VideoCapture(0) while(cap.isOpened()): ret,frame = cap.read() if ret

我正在使用h264编解码器将实时流中的帧保存到视频中。我用python中的openCV(版本3.4和4.4)尝试了这一点,但我无法保存它。我可以在XVID和许多其他编解码器中保存视频,但在h264和h265中我没有成功

我正在Python中使用windows opencv 4.4

我的示例代码如下

cap = cv2.VideoCapture(0)

while(cap.isOpened()):
    
        ret,frame = cap.read()
        if ret == True:

        width  = int(cap.get(3)) # float
        height = int(cap.get(4)) # float
        # fourcc = int(cap.get(cv2.CAP_PROP_FOURCC))
        
        fourcc = cv2.VideoWriter_fourcc(*'H264')
        out = cv2.VideoWriter(filename, fourcc, 30, (width,height)) 
        out.write(frame)
out.release()  


谁能帮助我如何在h264和h265中保存视频。

您正在每个帧上重新创建
VideoWriter
,最后只存储一个帧。您需要先创建编写器,在循环中向其写入帧,然后在完成视频后终止它。作为预防措施,如果我们在读取帧时检测到视频中存在任何问题,您还需要打破循环。为确保正确操作,让我们在第一帧中阅读,设置
VideoWriter
,然后在建立其创建后才对其进行写入:

cap=cv2.VideoCapture(0)
out=无
而cap.isOpened():
ret,frame=cap.read()
如果ret==True:
如果out为无:
宽度=int(cap.get(3))#浮点
高度=int(cap.get(4))#浮动
fourcc=cv2.VideoWriter_fourcc(*“H264”)
out=cv2.VideoWriter(文件名,fourcc,30,(宽度,高度))
其他:
输出。写入(帧)
其他:
打破
如果out不是None:
out.release()

好的,这是一个bug。但主要的问题是使用h264编写。即使只在循环外创建一次,它也无法使用编解码器h264和H265写入您使用的是哪种操作系统?我使用的是带有opencv 4.4的windows 10。您需要确保您使用的是OpenH264,这是唯一与opencv兼容的框架,并且在windows中写入h264文件:亲爱的,我使用了您告诉的过程。我下载了openh264.dll文件,并将其放在脚本所在的同一目录中,以及更改目录时保存文件的目录中。但它仍然没有保存视频。它以0字节保存。还有别的事要做吗?我错过什么了吗?