我在写入内存缓冲区中的x264视频(或单个帧)时遇到问题。在opencv中,图像,imencode和imdecode完成这个任务。但我想保存x264视频帧以降低内存使用量并在互联网上发送。我能够使用jpeg,但是JPEG尺寸大于x264视频帧和质量要差得多。我搜索,但我无法找到我如何写缓冲区的视频帧。Python-Opencv在内存缓冲区中写入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()
你能否详细说明一下,因为我不知道你在做什么。你想创建一个包含图像帧的视频文件吗?或者是其他东西?无论哪种方式,我不知道x264播放与AVI容器,我会尝试MKV代替 –
其实我试图通过udp或tcp/ip通过网络发送相机帧。我成功发送了jpg图像(一帧发送并发送下一帧)。但我想发送x264压缩mkv或avi视频(或一帧顺序)文件,因为x264压缩比jpg更有效率(也更好的质量,我认为)我可以写在磁盘上,但我想写在内存上(如numpy阵列..)x264视频帧,因为我必须序列化(使用pickle或json)视频帧并通过套接字发送。我在网上搜索,但我找不到我该怎么办?我觉得这个解释很清楚。这是我的问题。 – faxcon
我不确定这是可能的,因为Python版本的OpenCV仅仅使用numpy来处理矩阵,可以进行腌制,序列化等。对于视频流,OpenCV(C++和Python)都使用FFMPEG(libav),其对象不能以相同的方式工作。你要在流媒体之前修改内容吗?即你真的需要OpenCV,还是可以使用另一个库直接流式传输内容? –