如何将流图像作为视频录制到文件中?

时间:2018-02-17 11:03:41

标签: python stream raspberry-pi video-streaming

我从adaftut复制了一个脚本,允许在TFT LCD上显示相机流。 但是使用该流我无法保存摄像机录像。

该脚本打开io.BytesIO,而不是将摄像头捕获到该流中,而不是在while循环中关闭流。我无法将视频流保存为视频。 这是代码的一部分:

while(True):
    stream = io.BytesIO() # Capture into in-memory stream
    camera.capture(stream, use_video_port=True, format='raw')
    stream.seek(0)
    stream.readinto(yuv)  # stream -> YUV buffer
    stream.close()
    yuv2rgb.convert(yuv, rgb, sizeData[sizeMode][1][0],
      sizeData[sizeMode][1][1])
    img = pygame.image.frombuffer(rgb[...], 'RGB')

您可以帮助将流保存为录音吗? 我需要同时保存摄像机录像并在LCD TFT上预览摄像机数据。

1 个答案:

答案 0 :(得分:2)

Hayk jan,

最有可能你需要使用一些处理视频文件的库。 例如,您可以使用OpenCV将流保存到视频文件中。它的示例可以在answer中找到。对于你的代码,它应该是这样的:

import cv2

# Define the codec and create VideoWriter object
#fourcc = cv2.cv.CV_FOURCC(*'DIVX')
#out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640,480))
out = cv2.VideoWriter('output.avi', -1, 20.0, (640,480))

while(True):
    stream = io.BytesIO() # Capture into in-memory stream
    camera.capture(stream, use_video_port=True, format='raw')
    stream.seek(0)
    stream.readinto(yuv)  # stream -> YUV buffer
    stream.close()
    yuv2rgb.convert(yuv, rgb, sizeData[sizeMode][1][0],
      sizeData[sizeMode][1][1])
    img = pygame.image.frombuffer(rgb[...], 'RGB')

    out.write(img)

out.release()