3

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

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;

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

4

3 回答 3

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对象时,您需要提供几个可以从输入流中提取的参数。可以在此处找到教程。

于 2013-04-17T05:12:26.807 回答
2

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

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

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

于 2013-07-07T19:49:23.553 回答
1

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

  1. cv2.VideoWriter([filename, fourcc, fps, frameSize[, isColor]])您应该使用标志值 =设置第二个参数-1。这将允许您查看 PC 中使用的编解码器压缩列表。
  2. 就我而言,英特尔提供的编解码器名为 IYUV 或 I420。我不知道其他制造商。Fourcc 网页
  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 前缀
    • 引入正确的帧大小

对于其他一切,您可以使用 Ekalic 提供的代码

于 2014-11-14T04:38:43.470 回答