3.opencv读取本地视频或摄像头并修改编码

opencv读取本地视频或摄像头并修改编码

请添加图片描述

读取本地视频

#打开视频
import cv2
cv2.namedWindow('video',cv2.WINDOW_NORMAL)
cv2.resizeWindow('video',640,480) #设置读取时屏幕大小
cap=cv2.VideoCapture('./1.mp4')

#循环读取摄像头每一帧
#while cap.isOpenned();
while True:
    #读一帧,返回标记,True表示读到数据,False表示没读到数据
    flag,frame=cap.read()#frame一帧的意思
    
    #根据flag做判断
    if not flag:
        break
        
    #显示数据
    cv2.imshow('video',frame)
    key=cv2.waitKey(1)#双斜线,向下取整
    #一个是视频是30帧,时间为1000/300取整
    if key == ord('q'):
        break
        
cap.release()
cv2.destroyAllWindows()

修改视频编码

VideoWriter_fourcc()常见的编码参数

cv2.VideoWriter_fourcc('M', 'P', '4', 'V')MPEG-4编码 .mp4 可指定结果视频的大小
cv2.VideoWriter_fourcc('X','2','6','4')MPEG-4编码 .mp4 可指定结果视频的大小
cv2.VideoWriter_fourcc('I', '4', '2', '0')该参数是YUV编码类型,文件名后缀为.avi 广泛兼容,但会产生大文件
cv2.VideoWriter_fourcc('P', 'I', 'M', 'I')该参数是MPEG-1编码类型,文件名后缀为.avi
cv2.VideoWriter_fourcc('X', 'V', 'I', 'D')该参数是MPEG-4编码类型,文件名后缀为.avi,可指定结果视频的大小
cv2.VideoWriter_fourcc('T', 'H', 'E', 'O')该参数是Ogg Vorbis,文件名后缀为.ogv
cv2.VideoWriter_fourcc('F', 'L', 'V', '1')该参数是Flash视频,文件名后缀为.flv

控制录制视频的码率和大小,按q键停止录制

import cv2
cap = cv2.VideoCapture(0)
fourcc = cv2.VideoWriter_fourcc(*'mp4v')#*表示解包,把mp4v分割
#fourcc = cv2.VideoWriter_fourcc('M', 'P', '4', 'V')#VideoWriter_fourcc为视频编解码
vw = cv2.VideoWriter('output.mp4',fourcc,30,(640,480))
while cap.isOpened():
    ret,frame = cap.read()
    if not ret:
        print('出错了')
        break
    
    vw.write(frame)
    cv2.imshow('frame',frame)
    
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
cap.release()
vw.release()# 释放后数据从缓存到磁盘
cv2.destroyAllWindows()

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
读取视频流并保存为视频文件,您可以使用OpenCV库中的`VideoWriter`类。以下是一个示例代码,演示了如何读取视频流并将其保存为视频文件: ```python import cv2 # 打开视频文件 cap = cv2.VideoCapture('your_video_file.mp4') # 或者使用摄像头:cap = cv2.VideoCapture(0) # 检查视频是否成功打开 if not cap.isOpened(): print("无法打开视频文件") exit() # 获取视频流的宽度和高度 width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) # 创建用于保存视频的VideoWriter对象 fourcc = cv2.VideoWriter_fourcc(*'XVID') # 可根据需要选择视频编码器 out = cv2.VideoWriter('output_video.avi', fourcc, 20.0, (width, height)) while True: # 逐帧读取视频流 ret, frame = cap.read() # 检查是否已经到达视频末尾 if not ret: break # 在窗口中显示当前帧 cv2.imshow('Video', frame) # 将当前帧写入输出视频文件 out.write(frame) # 按下 'q' 键退出循环 if cv2.waitKey(1) & 0xFF == ord('q'): break # 释放资源 cap.release() out.release() cv2.destroyAllWindows() ``` 在上述代码中,我们首先使用`cv2.VideoCapture()`函数打开视频文件或者连接到摄像头。然后,使用`cap.read()`逐帧读取视频流,并将每一帧显示在窗口中。同时,我们使用`cv2.VideoWriter()`创建一个用于保存视频的对象,并指定输出视频文件的名称、编码器、帧率和分辨率。在每一帧读取后,我们使用`out.write(frame)`将当前帧写入输出视频文件中。最后,我们需要释放资源,关闭窗口,并且调用`out.release()`来保存输出视频文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值