使用opencv2在python中编写流媒体视频

时间:2013-04-16 19:39:52

标签: python opencv video-streaming

在我的项目中,我想保存流媒体视频。

import cv2;
if __name__ == "__main__":
     camera =  cv2.VideoCapture(0);
     while True:
          f,img = camera.read();
          cv2.imshow("webcam",img);
          if (cv2.waitKey (5) != -1):
                break;

` 使用上面的代码,可以从网络摄像头流式传输视频。如何将此流媒体视频写入文件?

3 个答案:

答案 0 :(得分:9)

您只需将抓取的帧保存到图像中即可:

camera = cv2.VideoCapture(0)
i = 0
while True:
   f,img = camera.read()
   cv2.imshow("webcam",img)
   if (cv2.waitKey(5) != -1):
       break
   cv2.imwrite('{0:05d}.jpg'.format(i),img)
   i += 1

或者像这样的视频:

camera = cv2.VideoCapture(0)
video  = cv2.VideoWriter('video.avi', -1, 25, (640, 480));
while True:
   f,img = camera.read()
   video.write(img)
   cv2.imshow("webcam",img)
   if (cv2.waitKey(5) != -1):
       break
video.release()    

创建VideoWriter对象时,需要提供几个可以从输入流中提取的参数。可以找到一个教程here

答案 1 :(得分:2)

在ubuntu中使用以下代码从给定图片创建视频

os.system('ffmpeg -f image2 -r 8 -i %05d.bmp -vcodec mpeg4 -y movie3.mp4')

图片名称为00000.bmp,00001.bmp,00002.bmp等。

答案 2 :(得分:1)

如果你真的想使用为你的电脑提供的编解码器压缩帧。

  1. 您应该使用标记值= cv2.VideoWriter([filename, fourcc, fps, frameSize[, isColor]])设置-1的第二个参数。这将允许您查看电脑中使用的编解码器压缩列表。
  2. 就我而言,英特尔提供的编解码器名为IYUV或I420。我不了解其他制造商。 fourcc webpage
  3. 将此信息设置如下

    fourcc = cv2.cv.CV_FOURCC('I','Y','U','V')
    # or
    fourcc = cv2.cv.CV_FOURCC('I','4','2','0')
    # settting all the information
    out = cv2.VideoWriter('output1.avi',fourcc, 20, (640,480))
    
  4. 记住两个小参数让我头疼不已:
    • 别忘了cv2.cv前缀
    • 介绍正确的框架尺寸
  5. 对于其他一切,您可以使用Ekalic提供的代码